惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
Cyberwarzone
Cyberwarzone
Schneier on Security
Schneier on Security
I
Intezer
Cisco Talos Blog
Cisco Talos Blog
Cloudbric
Cloudbric
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
NISL@THU
NISL@THU
博客园 - Franky
F
Fortinet All Blogs
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
T
Troy Hunt's Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Project Zero
Project Zero
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
美团技术团队
D
Docker
PCI Perspectives
PCI Perspectives
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
L
LINUX DO - 最新话题
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
人人都是产品经理
人人都是产品经理
月光博客
月光博客
D
DataBreaches.Net
The Hacker News
The Hacker News
爱范儿
爱范儿
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
SecWiki News
SecWiki News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
A
About on SuperTechFans
Latest news
Latest news
GbyAI
GbyAI
T
Tor Project blog
L
LINUX DO - 热门话题
Security Latest
Security Latest
博客园 - 聂微东
Y
Y Combinator Blog
AI
AI
M
MIT News - Artificial intelligence

Inno' Blog

将 what-digit-you-write 部署到 Heroku上 | Inno' Blog 论文浅析:GpSense: A GPU-friendy method for common-sense subgraph matching in massively parallel architectures Github项目clone速度过慢?试试这招 | Inno' Blog Hadoop分布式搭建全流程记录 | Inno' Blog Shell编程学习记录 | Inno' Blog 重学MySQL之视图 | Inno' Blog 重学MySQL之查询练习 | Inno' Blog 重学MySQL之事务 | Inno' Blog 重学MySQL之范式 | Inno' Blog 重学MySQL之基本操作和约束 | Inno' Blog 为你的Web应用提供HTTPS服务 | Inno' Blog 一个关于切片的小问题 | Inno' Blog Go语言学习笔记 | Inno' Blog 关于英译中的个人技巧 | Inno' Blog 不知不觉已经写够了十万行代码 | Inno' Blog YARN 架构 | Inno' Blog HDFS 架构 | Inno' Blog 正则中关于环视(lookaround)的小例子 | Inno' Blog 设计模式(十八):访问者模式 | Inno' Blog
如何借助Github进行协同开发 | Inno' Blog
Inno Fang · 2018-03-17 · via Inno' Blog

平常都是自己一个人在开发,一直都没有机会接触协同开发,平常使用 Github 时也就是简单的 add, commit, push,并由体会到 Git 带给我们
更多的好处,那么如何借助 Github 进行协同开发,现在来简单的尝试一下

准备工作

如果你想只是想简单的尝试下协同开发,而不像基于参与真正的开发,那么创建一个测试项目来实验一下是最合适不过的了

首先打开 Github ,接着点击 New repository,创建一个空项目,简便起见,我们在创建新项目时顺便勾选 Initialize this repository with a README 这个选项,这样我们的项目至少还有一个 README 文件,而不至于什么也没有

为了便于后文进行描述,这里约定

  • 把拥有原始仓库的操作者称为 master
  • 把 fork 了原始项目的操作者称为 follower

那么现在 master 已经创建好仓库了,接着 follower 也想和 master 一起开发这个项目,那么 follower 要做的就是在 Github 上 fork master 的这个项目

那么 follower 的 Github 上也有了一份这个项目的副本

接下来 follower 把项目 clone 到本地,复制项目的 ssh

打开 Git Bash,输入下面的命令 (请用复制的 ssh 替换掉 )

1
$ git clone <follower ssh>

稍等片刻,即可进行项目的开发了

对本地项目进行更新

follower 已经把项目 clone 到本地了,这里要注意的就是,每次进行开发时要保持跟 master 项目一样的进度,也就是把 master 的代码更新到本地

那么在更新之前, follower 要做的就是添加 master 的远端连接,这里需要 master 远端的 ssh,操作参考上一节,命令如下

1
$ git remote add upstream <master ssh>

添加成功过后就可以更新本地代码

1
$ git remote update

接着合并 master 的分支,(这里的 master 是指 upstream 的 master, 即远端的 master,而不是本地的)

1
$ git merge upstream/master

现在 follower 本地的代码已经更新完了,接下来就是进行项目的开发

对项目进行开发

因为 follower 是作为 master 合作者的,所以 follower 在开发时最好能建立一个分支,然后在分支上进行开发

1
2
$ git banch dev
$ git checkout dev

上面两个命令分别是创建一个 dev 分支,并且把本地分支切换至 dev 分支

也可以使用下面的命令,创建加切换一起完成

1
$ git checkout -b dev

现在就已经到 dev 分支上了,那么我们就在这个分支上进行开发,因为项目很简单,所以简单修改下 README 即可,接着就可以 add、commit、push 三部曲更新 follower 的代码了

1
2
3
$ git add .
$ git commit -m ":memo: update"
$ git push -u origin dev

这时候 follower 进入 Github 就会发现在该项目下多了一行下面的东西

点击 Compare & pull request ,然后填写一些必要信息再点击 Create pull request 即可

至此, follower 的代码编写与提交就算完成,接下来就是 master 的任务了

合并分支

此时 master 在 Github 就可以看到在项目顶部栏上多了一个 pull request

那么点击去找到这个 pull request 请求就可以看到下面的信息

点击 Merge pull request 然后 confirm 就可以把 follower 更新的代码合并到自己的项目里。

此时 master 再在本地使用下面的命令就可以把远端的代码更新到本地了

1
$ git pull

同步本地代码

这里要注意的就是,如果 master 更新了代码,就会导致 follower 的本地与 master 的远端不一致,那么 follower 就没办法提交 pull request 了,所以 follower 在开发前最好进行代码的更新

1
2
$ git remote update
$ git merge upstream/master

同之前的更新操作是一样的。或者使用下面的命令进行更新也是可以的

1
2
$ git fetch upstream
$ git merge upstream/master

尽量减少冲突

用 Github 进行协同开发我觉得实在所难免,但要尽量的减少冲突,那么就需要在进行开发的时候做好一个约定,大家在进行开发的时候就按照这个约定进行开发。

其次,在 Github 上开发的项目最好不要上传一些不必要的文件,比如 IDE 的配置文件( Intellij IDEA 的 .idea、*.iml) 等,那么如何忽略这些文件,或者如果你已经开始了一些项目,怎么把 Github 上的不必要的文件去掉而不影响本地,可以参考我的另一篇文章 如何管理你Github上的开源项目

多说一句

因为平常都是一个人在写代码,所以还没有机会尝试如何去进行真正的协同开发,但是这又是一个必备的技能,所以在简单的实践过后,分享了一下自己的经验。因为没有实际合作经验,难免有疏漏和不足,所以在实际开发中遇到了问题还需要自己去查阅,具体情况具体分析,这样协同合作才能游刃有余。