git的两个闭环
git与svn不同,git是分布式版本控制工具,有本地仓库以及远程仓库之分
本地仓库闭环分析:
首先我们要初始化一个git的本地仓库,一般来说我们可以直接在一个文件夹下 git init 便可以得到我们的本地仓库
而工作区就是我们要使用git进行管理的代码区域,
当我们在工作区进行了代码的修改之后,就可以通过 git add 来先将我们的代码添加到缓存区,然后再commit到本地仓库
当然我们也可以将本地仓库的代码检出(check out)到我们的工作区,这样就形成了一个本地仓库所在的闭环
整个流程
当我们的代码提交到了本地仓库之后,由于是分布式开发,我们需要与其他人进行代码的分工协作,所以我们需要将代码
在远程仓库中进行协作,即共享到远程仓库
此时我们就需要执行 push 将代码推送到远程仓库.当我们需要与远程仓库保持一致的时候,需要pull(这个过程相当于
fetch获取 与 merge合并)
而当我们作为新加入项目的人时候,我们第一次从远程仓库获取代码的时候,可以直接执行git clone ,这就是远程仓库
与本地的闭环
个人理解
在每次准备写代码的时候,要首先进行git pull(这个过程是 fetch and merge 的过程)
把项目从远程仓库中拉取到本地的工作区,再进行编码,在push的时候再进行一次pull,进行冲突的解决.
这样会一定程度的减少提交之后对代码的冲突
一个比较好的流程思路
在网上看到一个问答,觉得很有道理,就记录下来了
git支持很多种工作流程,我们采用可以是这样,
远程创建一个主分支,本地每人创建一个功能的分支,流程如下:
每个人在自己的工作分支
$ git checkout self
编码
提交工作分支的修改
$ git commit -a
回到主分支
$ git checkout master
获取远程最新的修改,此时不会产生冲突
$ git pull
回到工作分支
$ git checkout work
用rebase合并主干的修改,如果有冲突在此时解决
$ git rebase master
回到主分支
$ git checkout master
合并工作分支的修改,此时不会产生冲突。
$ git merge work
提交到远程主干
$ git push
这样做的好处是,远程主干上的历史永远是线性的。每个人在本地分支解决冲突,不会在主干上产生冲突。