有时候,需要把git仓库(包括当前状态和历史记录)共享给车间工友,而你和工友之间又不能通过git服务器进行交互时,网上邻居共享便成为了最原始也最有效的手段。那具体怎么操作呢?
-
打包整个目录
即把工作区和.git一起打成一个压缩包共享。解压之后即形成完全一样的工作环境。
毋庸置疑,这是最差的方式,不解释。 -
打包.git目录
即只把.git目录打成压缩包共享。这样解压之后,去.git的同级目录执行git checkout,即可生成整个工作区。
这里利用了git最重要的特性:.git目录包含了所有信息。
已经很好了,但并不完美。 -
直接共享.git目录
这是正解。它与打包.git目录的区别在于:被共享的.git目录可以直接被用作远程仓库。
也就是说,如果你的机器名是Machine,被共享的.git目录的共享名为Rep,则 //Machine/Rep 可以直接作为仓库URL来使用。(1) 克隆
git clone //Machine/Rep <dir>
(2) 在现有仓库中添加为远程仓库
git add <name> //Machine/Rep git fetch <name> git checkout master git merge <name>/master git push <name> master:mymaster
可以被添加为远程仓库,是直接共享.git目录的最大优势。由于git fetch会寻找双方共同的分支树(common commits),只更新不同的部分,这样在两个git仓库源至同宗时,能大大减少网络传输。
上面的代码获取了远程的master分支,与本地master分支合并之后,再推送到远程的mymaster分支。
当然,最后一个操作(使用了git push)需要.git目录在共享时开放了写权限。 -
单中心P2P协作
如果厂里没有git专用的服务器,而车间同事又想使用git,可以将.git目录开网上邻居共享作为服务器使用,当然这需要开读写共享并配置好权限。如果只能开只读共享,或者懒得配权限,也可以采用下面的协作流程:
-
选定一人在本地建立官方仓库,开只读共享
-
其他人克隆官方仓库,开只读共享
-
采用Pull Request的方式提交代码和彼此协作
对于“Pull Request的方式”,小解释一下: 如果你是官方仓库维护人,直接提交代码就可以了。
如果你不是官方仓库维护人,又想把代码提交到官方仓库中,就需要先把代码提交在一个本地分支上,然后向官方仓库维护人发一个“Pull Request”。
然后官方仓库维护人收到“Pull Request”后,把你的仓库加为远程,把分支取下来merge即可。
作为一个良好的习惯,在发“Pull Request”之前,先要把官方仓库的最新更新取下来,然后本地分支做rebase操作,处理完冲突。这个“Pull Request”其实就是一个通知,在车间工作环境里,发邮件或大吼一声,都是有效的实现方法。 它不仅可以用于向官方仓库提交代码,也可以更广义地用于任意两个人之间的代码同步。
-
Related Posts
- 16 Feb 2013 » git merge —— 为什么比diff + patch好
- 15 Feb 2013 » Git Flow, Why and How
- 14 Feb 2013 » 对Git Flow做点微创新 (3)
来源:oschina
链接:https://my.oschina.net/u/987964/blog/109085