功能分支工作流仍然用中央仓库,并且 master 分支还是代表了正式项目的历史。但不是直接提交本地历史到各自的本地 master 分支,开发者每次在开始新功能前先创建一个新分支。功能分支应该有个有描述性的名字,比如 animated-menu-items 或 issue-#1061 ,这样可以让分支有个清楚且高聚焦的用途。
让我们一起逐步分解来看看一个常见的小团队如何用这个工作流来协作的。有两个开发者小明和小红,看他们是如何开发自己的功能并提交到中央仓库上的。有人先初始化好中央仓库第一步,有人在服务器上创建好中央仓库。如果是新项目,你可以初始化一个空仓库;否则你要导入已有的 Git 或 SVN 仓库。
像 Subversion 一样,集中式工作流以中央仓库作为项目所有修改的单点实体。相比 SVN 缺省的开发分支 trunk ,Git 叫做master,所有修改提交到这个分支上。本工作流只用到 master 这一个分支。开发者开始先克隆中央仓库。在自己的项目拷贝中像 SVN 一样的编辑文件和提交修改;但修改是存在本地的,和中央仓库是完全隔离的。开发者可以把和上游的同步延后到一个方便时间点。
如果你的开发团队成员已经很熟悉 Subversion ,集中式工作流让你无需去适应一个全新流程就可以体验 Git 带来的收益。这个工作流也可以作为向更 Git 风格工作流迁移的友好过渡。 转到分布式版本控制系统看起来像个令人生畏的任务,但不改变已用的工作流你也可以用上 Git 带来的收益。团队可以用和 Subversion 完全不变的方式来开发项目。
工作流有各式各样的用法,但也正因此使得在实际工作中如何上手使用变得很头大。这篇指南通过总览公司团队中最常用的几种 Git 工作流让大家可以上手使用。在阅读的过程中请记住,本文中的几种工作流是作为方案指导而不是条例规定。在展示了各种工作流可能的用法后,你可以从不同的工作流中挑选或揉合出一个满足你自己需求的工作流。
工作流其实不是一个初级主题,背后的本质问题其实是有效的项目流程管理和高效的开发协同约定,不仅是 Git 或 SVN 等 VCS 或 SCM 工具的使用。这篇指南以大家在 SVN 中已经广为熟悉使用的集中式工作流作为起点,循序渐进地演进到其它高效的分布式工作流,还介绍了如何配合使用便利的 Pull Request 功能,体系地讲解了各种工作流的应用。
DevOps 一词源于 Development 和 Operations 的组合,即将软件交付过程中开发与测试运维的环节通过工具链打通,并通过自动化的测试与监控,减少团队的时间损耗,更加高效稳定地交付制品。
TitleLinkOfficial Git Sitehttp://git-scm.com/Official Git Video Tutorialshttp://git-scm.com/videosCode School Try Githttp://try.github.com/Introductory Reference & Tutorial for Githttp://gitref.org/Official Git Tutorialhttp://git-scm.com/docs/gittutorialEveryday Githttp://git-scm.
所有 Git 配置都保存在你的.gitconfig文件中。Git 命令自定义别名别名用来帮助你定义自己的 git 命令。比如你可以定义 git a 来运行 git add --all。要添加一个别名,一种方法是打开 ~/.
从工作区去除大量已删除文件当用 /bin/rm 命令删除了大量文件之后,你可以用下面一条命令从工作区和索引中去除这些文件,以免一个一个的删除:$ git rm $(git ls-files -d)例如:$ git statusOn branch masterChanges not staged for commit: deleted: a deleted: c$ git rm $(git ls-files -d)rm 'a'rm 'c'$ git statusOn branch masterChanges t…
相信大家对于 git 版本控制系统都不陌生,大部分同学在工作中都会使用到 git,他帮助我们管理我们的代码,让我们能够随心所欲的提交代码,进行不同的实验而不用担心将项目毁掉,同学们可以在工作中熟练的使用 git 进行代码提交,但是部分同学对于 rebase,merge 等等针对分支,合并的操作不十分自信,并且对目前腾讯视频客户端采用的主干开发模式背后的原理并不熟悉,在本文章中,我想通过介绍 git 的存储机制,来帮助大家更好的理解分支以及分支操作。
首先,当你读到这篇文章的时候,可能已经进入到这个需求的场景了,但笔者还是想构建一个常见的业务场景,以希望读者能够更快的进入到这个问题背景中:在一个岁月静好的一天,作为开发的你来到工位,看了看项目计划和待办事项,你发现,需要按顺序完成两个需求:
在 Git 中分开暂存步骤是直到你需要使用源码控制处理的协调解决哲学。你可以继续对工作目录做更改,然后当你想要与源码控制交互时,Git 允许你使用精确地记录你所作的小提交来记录你的更改。例如,假设你编辑了三个文件(a.rb、b.rb 及 c.rb)。现在你想提交所有更改,但你想要 a.rb 和 b.rb 中的更改作为单个的提交,而 c.
目的学习如何暂存更改以用于稍后提交。添加更改现在告诉 Git 暂存更改,并检查状态。$ git add hello.rb$ git status你应该看到:$ git add hello.rb$ git status# On branch master# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## modified: hello.rb#对 hello.rb 文件的更改已被暂存。
目的学习如何检查仓库的状态。检查仓库的状态使用 git status 命令检查当前仓库的状态。$ git status你应该看到:$ git status# On branch masternothing to commit (working directory clean)status 命令报告这儿没有什么要提交的。这意味着仓库具有工作目录的全部当前状态。这儿没有不同的更改要记录。
目的学习如何从零开始创建 Git 仓库。创建“Hello, World”程序在一个空的工作目录中开始,创建一个名为“hello”的空目录,然后创建一个名为 hello.rb 且包含如下内容的文件。$ mkdir hello$ cd hello文件:hello.rbputs "Hello, World"创建仓库你现在有一个包含单个文件的目录。要从该目录创建 Git 仓库,执行 git init 命令。
目的获得教程材料,并准备执行。获得教程包从以下地址获得 Git 教程包:http://gitimmersion.com/git_tutorial.zip解包教程包有一个主目录“git_tutorial”及三个子目录:html:HTML 文件。让你的浏览器打开 html/index.html。work:空的工作目录。你可以在这里创建仓库。repos:预先打包的 Git 仓库,这样你可以在教程中的任何地方跳转。
目的学习通过 WiFi 共享仓库。看看你的邻居是否在运行 git daemon。交换 IP 地址,并看看是否能够从其他人的仓库拉下更改。注意:gitjour gem 在共享 ad-hoc 仓库时真的有用。
目的学习如何设置 Git 服务器以共享仓库。有很多方式来通过网络共享 Git 仓库。此处是“急就章”方式。启动 Git 服务器# (From the work directory)$ git daemon --verbose --export-all --base-path=.现在,在分开的终端窗口中,转到你的工作目录。# (From the work directory)$ git clone git://localhost/hello.
目的学习如何将更改推到远程仓库。因为裸仓库通常共享在某种网络服务器上,所以一般很难转到仓库中并拉下更改。因此,我们需要将更改推到其它的仓库中。让我们通过创建更改来开始推送。编辑 README 并提交它。This is the Hello World example from the git tutorial.
关注时代Java