Published on

"Remote Work Via Git"的正确打开方式

Authors
  • avatar
    Name
    Pursue
    Twitter

写在前面

git pull -r origin branch是程序员最常用的Git指令之一了。可现今为了保证安全性,许多公司的Git Server并不像访问Github那样容易,往往得通过VPN才能进行访问。那么问题来了,假如你在家里办公,连不上VPN肿么办?别懵逼,往下看。

场景一

小王,小宋和小马都是同一个公司的程序员,它们都在同一个项目上工作,本地都有同一个Git Repository。今天轮到小宋和小马结对编程了,小宋在家,小马和小王在公司。由于只能通过客户提供的VPN,并且在公司的网络下进行连接才能 pull 到代码,所以小宋无法获取最新的代码,十分沮丧。这时,小马安慰小宋说:“我可以搭建一个本地Git Server让你来 pull 代码。”

1.首先,小马查看了自己的 IP 地址

ifconfig

2.小马让小宋在家里 ping 一下自己的 IP

ping xx.xx.xx.xx

⚠ 良心提示:如果 ping 不通,就关闭此页面,洗洗睡吧

3.小马搭建一个本地 Git 服务器

小马有一个名叫xinjibiaoRepository,在/project/xinjibiao路径下。 由于小马可以连接上客户的VPN,所以她先 pull 了下代码,确保自己的代码是最新的,然后进入project目录下后:

git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose

如此小马就将自己的本地Git Server建起来了,并且以当前路径/project作为localhost

4.小宋可以 pull 小马的代码啦

因为小宋的remote只有origin,为了让小马的Git Server作为自己的新remote,小宋需要:

git add remote xiaoma git://xx.xx.xx.xx/xinjibiao

其中xx.xx.xx.xx为小马的 IP,xiaoma为新的remote的别名,如此,小宋就可以把小马的电脑当作Git Repository的服务器,开始 pull 代码啦:

git pull -r xiaoma master

此时小宋在自己master分支上成功的 pull 到了小马master上的代码,也就是最新的代码,小宋很开心,呵呵。

场景二

小宋成功 pull 到最新代码后,在自己的电脑上与小马结对编程完成了 3 个 commit 需要提交,这时才发现,自己是连不上VPN的,代码都是从小宋那里 pull 的,更何谈去 push 代码呢?这时,聪明的小马又给小宋出了高招:“你可以把你的提交在本地做成 patch 文件,然后发给小王,他就能帮你 push 了。”

于是在小宋的指导下,小马找到了小王。

1.首先,小马在本地将自己的 3 个 commit 打成 patch 文件

git format-patch -3 --stdout > wo_he_xiaoma_do_something.patch

指令很简单,小马将 HEAD 中的前 3 个 commit 的 changes 放入一个名为wo_he_xiaoma_do_something的新的 patch 文件里。

2.小宋把 patch 文件发送给了小王

git apply --stat wo_he_xiaoma_do_something.patch

这样小王就将小马和小宋写的代码放入到了自己的Reposity中,并且 push 到了远端。

⚠ 良心提示:--check 可以检查文件名

写在最后

其实,本文主要讲了两个常用的 Git 操作:在无法连接国外Git Server的时候如何 pull 别人的代码和 push 自己的代码,相信大家看完本教程一定能有所收获。