[心得] 我在 GitHub 上学习 Open Source-git remote 远端多人

楼主: huei90 (huei90)   2017-07-30 17:02:05
原文同时刊登于:https://goo.gl/hrB1R2
[先说]
这纯属是我个人以及工作上开发专案的经验,主要是希望透过分享推坑大家多多使用 git 提供的 remote 功能,如果你现在正在使用 git remote 或执行 git remote 后得到除了 origin 的字样、不是使用 GitHub/Bitbucket/… 来放置你的专案、你是进阶神等级 git 的使用者的话,那你可以直接跳过这篇,又或是阅读后 补充 纠正 错误的使用观念。
[从前]
我在 GitHub 上开发专案目前为止遇过以下两种情境
情境一:我拥有专案的所有权(Owner/Member/Collaborator 的概念),不需要得到任何人的同意(或者是与所有开发者们达到共识),能够新增删除修改说有自己正在负责的功能分支(Branch)。
情境二:我没有专案的所有权,但我有该专案的读取权限(Read Only),要修改任何原专案的内容就得下载分支专案(Forked Repo)并提交 PR。这就是一般在 GitHub 上开发 Open Source 的流程。
一开始开发公司专案的时候,就直接采用情境一,反正公司专案开发的人不就我们这几位,直接开发就好啦何必搞得那么复杂制定一些规则,大家使用得开心最重要。过了几个月后,偶然之下打了这句 git branch -a,我就开始捏上眼睛一个一个找到底我的分支叫哪个名字,大家取的名字风格都不太一样让我找得更加困难。
说到这里,我们规定一个分支名字的规则吧,再来规定何时把分支移除等等的。可是说实在这没有解决我们的问题,git branch -a 还是印出一大堆无理取闹的名称。再后来,公司导入 CI 环境整合测试,每动辄一个分支 CI 就会跑一遍,可想而知 CI 的负担有多大。
那好,我们来采取第二个情境,你爱怎么取分支的名称也没人可以拒绝,你胡乱 commit 也没关系只要在最后送上 PR 的时候是干干净净文字叙述清楚就好了,这时候 CI 只需要跑一次检查这一个 PR 即可。
流程大概是这样,
在 GitHub UI 上点 forked 按钮选择自己的帐号、到自己的 repo 页面取下 git 连结并 git clone 到自己的电脑、开了分支并 commit push、最后到 GitHub UI 上点选 Pull Request 送上自己的成果到原专案。
其实说到这里我并还没有 git remote 的概念,而是完全透过 GitHub UI 提供的功能来达成情境二,但有些问题一直困扰着我,
我需要同步原专案的 master 到我的分支、
我需要从原专案的 A 分支继续开发并开新的分支 B、
我需要从同事 C 那取分支 D(C 分支尚未合并在原专案内)
我尝试了很多方法有时成功有时失败,直到我开始了解 git remote,才发现这才是真正使用情境二远端多人合作模式下真正该有的样子啊。
[一步一步使用 Git Remote]
git clone <你已经 forked 好的 git 专案>
git remote add <remote 名称> <专案网址>
把 remote 专案 fetch 下来
git fetch <remote 名称>
同步原专案的 master 到我的分支
git pull <remote 名称> master
我需要从原专案的 A 分支继续开发并开新的分支 B
git checkout -b B <remote 名称>/A
检查所有 remote 的专案使用名称和网址
git remote -v
官方文件
https://git-scm.com/docs/git-remote
其实不多,就只有这样而已…
[最后]
老实说,你用情景二一定会有机会搭配到 git remote 就是了
其实不管你用哪种方法都行,找到最适合自己或者团队的开发模式即可。但如果有一个大家都能够接受且解决现有问题的方法,把他学起来并且实用他,这是一种对于使用工具尊重的哲学概念,不好好地使用它就无法达到使用该工具的最佳效益。
使用 git GitHub 的方法千奇百种,这也是这么多种中的其中一个小点点而已。我也想要听听大家到底是如何执行远端多人合作模式的开发方式。
大家也来分享自己是如何执行远端多人合作模式的开发方式吧~
作者: now99 (陈在天)   2017-07-30 19:10:00
作者: dreamnook (亚龙)   2017-07-30 20:21:00
多点说明都是好事
作者: evan176 (clown)   2017-07-30 22:19:00
作者: kiki86151 (鲁饭)   2017-07-30 23:48:00
有git rebase可以用
作者: Napoleon (无)   2017-07-31 04:24:00
push
作者: JackLeeing (纯粹爬爬文)   2017-07-31 08:07:00
推!
作者: content71 (罗莉饲养中...)   2017-08-02 11:44:00

Links booklink

Contact Us: admin [ a t ] ucptt.com