『Git 干货』#4 GitHub合作开发(简明)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了『Git 干货』#4 GitHub合作开发(简明)相关的知识,希望对你有一定的参考价值。
参考技术A接上文,本文介绍了 Git 基于 GitHub 的使用,以及 合作开发 的注意事项。文章的最后还留下了一些待填的坑...
本文大部分内容参考了 RCY 同学的教程,部分参考了 廖雪峰教程-Git , 菜鸟教程-Git ,以及 Git 官网文档 Git-Documentation 。
以下内容也适用于不同的服务器平台,如 Gitee、GitLab 等。
从 GitHub 上创建一个空仓库后,通常有三个选择:
对于第一种方法,只需要 git clone 命令即可,对于第二种方法,GitHub 提供了一系列指引命令:
对于第三种情况,只需完成后面三步即可。
在通过 GitHub 新建仓库时,我们会发现有个 Add .gitignore 按钮,这有什么用呢?实际上我们知道,维护真正项目时可能有一次修改会涉及到多个文件,这个时候一般大家会倾向于使用 git add . 的简单操作。
但是,并非所有文件都应该被放入 Git 仓库中,如:
这和便利的命令形成了矛盾,为此出现了特殊文件 .gitignore ,它可以决定哪些的文件不需要添加到版本管理中。一个样例如下:
.gitignore 是以行为单位,一行写一个规则,决定什么不被添加,书写规则也很简单:
创建一个 .gitignore 文件最便捷的方法是,在创建仓库时勾选 GitHub 自动创建,并在选项中选择合适的 .gitignore 文件模板,再克隆到本地。当然,也可以选择手动创建,再到网上搜索配置模板。
如果你是在一个 大合作团队 中工作,很可能是 main 被 锁定 了(只有 Collaborators 有权限推送),其他人需要 Pull Request 流程来合并修改。
如果你直接提交到本地 main,然后试图推送修改,你将会收到这样类似的信息:
这里推荐一个做法: Fork 最新的仓库,此时你将拥有这个远程仓库的 从分支 ——你的用户名就是从分支名。再将你的修改提交到这条分支,最后通过 GitHub 网站来提交一个 PR,请求主分支 拉取并合并 你的从分支。
高端的操作往往意味着危险的操作,以下将介绍前文未提及的一些操作,同时也挖下一些坑以后来填。
有时候你可能希望放弃 Git 仓库中的一部分提交,退到其他某处,这种情况下可以:
这种情况下可以带着分支一起回退,然后重新 commit,走一条完全不同的道路,而放弃了部分数据。
但是,如果你 reset 完后又后悔了,该怎么办?没关系,只要你没玩 gc 这样的危险指令,那么你 Git 仓库中的数据总有机会找回来。
在看到后面的快照的版本号后,则可以 reset 回去。
一个相对高端的分支管理命令,将一些提交复制到当前所在的位置(HEAD)下面,这些提交可以来自其他分支,但不一定是顺序的!
用于将目前暂存区的东西移入一片额外空间,从而清空暂存区。
无论是本博客,还是网上的文档,甚至官方的教程,都未必能把每个指令的每个参数、用法提到,因此 Git 自带的帮助文档就很重要:
如何利用 Git 与 GitHub 进行多人协作开发
方法一:添加 Collaborators
Collaborators 类似于Team模式。
Repository的拥有者Owner 可以直接添加合作者到自己的仓库中, 让合作者拥有几乎等同拥有者的权限。
操作方法如图所示: Repository的Owner在自己的repo中点Settings添加想要合作的User。
添加成功后被邀请的合作者会收到GitHub发送的邀请邮件, 该邮件会发送到受邀人的github注册邮箱中。
Collaborators模式可以描述为:
1)Repository的拥有者A想要合作者B参与到该repo的团队开发中, 于是A邀请B并成功添加B到该repo合作中,这样B作为合作者便拥有了贡献代码到A仓库中的权利。
2)作为 B 所需要做的是 先Clone A的仓库到本地,这样B在自己的本地就拥有了向A仓库中提交代码(commit/push/merge/branch)的权限,就好比B拥有A的repo一样, 但是B操作 A repo仓库的时候使用的是 B 自己的github账号和密码。
3)同样此时B自己的github账号中并不会出现A的仓库Repo, 这也就完全不同于fork代码了(fork代码会把拥有者的代码复制一份到自己的github中)。
方法二:Organization & Team 的方式
如果你已经创建了一个组织,你可以在该组织中创建一个team进行合作开发。
管理者A可以在创建完的team中 add repo. 设置其权限, 添加team成员, 这样team成员间就可以合作开发这些项目了。
方法三:Fork & Pull request方式
对于开源项目间的合作一般都会使用Fork & Pull request的合作方式。
“Fork” 的名词是 “叉子” 的意思,不过这里取的是动词 “分叉,建一个分支” 的意思。
A拥有一个开源Repository,B想参与该开源项目。作为B,先要fork A开源项目的 Repository 到自己账号的Repository中,这样B就拥有了A开源项目的镜像repo。
这样B可以正常的修改自己账号下的 A的开源项目镜像(这里改的都是自己本地的),并不会影响A本身的开源repository, 如果哪天B觉得自己增加并完善了一个新功能, 或者fixed A repo的某个bug,就可以提一个pull request, 询问A是不是想要。
步骤一:进入你想参与合作开发的仓库界面,点击右上角的 “Fork” 图标,如下图所示。此时你已经复制了一个副本在你的 GitHub 仓库中了,或者是说一个新的代码仓库被创建了,可以打开你的 GitHub 主页看一看。
步骤二:在自己的Github中,将这个代码仓库 “Clone”(克隆)到你的本地。“Clone” 成功之后你就可以自主修改里面的内容。
步骤三:然后将所做的修改提交(Add+Commit+push)到自己的代码仓库,接着到仓库页面,点击 New pull request 按钮。如下图所示:
点进去之后,将你修改的内容和原本的内容作对比,并把不相同的地方显示出来。
步骤四: 点击“Create pull request” 按钮,如下图所示:
填写你的请求信息,说明你做了些什么之类的。这个请求是发给该项目的拥有者的,完成之后点击 “Create pull request” 按钮即可。
之后项目的拥有者会受到你的请求,只要他/她通过了你的请求,你所做的修改就会被整合到原项目的仓库里了。
左边是你的本地仓库,中间是你在 GitHub 上 Fork 建立的仓库,右边是项目的原仓库。
如何与原仓库保持一致?
在自己做开发的过程中,难免会遇到你 “Fork” 的项目已经有了新的更新,这时当然是希望自己仓库中的代码也能同步进行更新。
可是,你本地仓库所连接的远程仓库的是你自己的 GitHub 仓库,而不是原作者的仓库。
需要为你的本地仓库再添加一个远程仓库源。
步骤一:查看当前项目所连接的远程仓库,打开终端,进入到项目的 Git 仓库所在目录,一般就是项目目录,输入如下代码:
git remote -v
可以看到目前只连接了我自己的远程仓库。
步骤二:添加原作者的远程仓库连接,输入如下代码:
git remote add upstream [email protected]:lexiaoyao1995/weixin.git
注意替换链接。
查看连接情况,如下图所示:
现在已经成功添加原项目的远程仓库了。
步骤三:输入如下代码,从原项目的远程仓库中更新代码。
(1)从原仓库获取最新版本到本地 git fetch upstream master (2)保证当前位于 master 分支上 git checkout master (3)将最新版本整合到本地 master 分支上 git merge upstream/master (4)将更新发送到自己的 GitHub 仓库里 git push origin master
(1)(2)(3)步可以用如下命令代替 git pull upstream master 但是这样不太安全,因为你 fetch(获取)之后可以通过 gitlog--oneline --graph --decorate --all 来查看更新的情况,再决定是否 merge(整合)到一起
左边是你的本地仓库,中间是你在 GitHub 上 Fork 建立的仓库,右边是项目的原仓库。
以上是关于『Git 干货』#4 GitHub合作开发(简明)的主要内容,如果未能解决你的问题,请参考以下文章