作者简介:
郝健(Artist),目前就职于赛尔网络CERNET技术开发部,研发项目经理;以前在天融信Topsec软件平台部做防火墙核心系统开发。
本文简介:
这是网友Artist在看完王玉成老师的github视频直播后的笔记。他详细地记录了自己一步步在github上进行操作的过程。感兴趣的读者也可以按照他这个笔记一步步来做,这样github的功能也就学会七七八八了。
1. git特点
useful:
https://help.github.com/
分布式
提交同步不频繁
速度快, 灵活
2. 用git工具完成一个项目中间必须经过的几个环节
useful:
https://guides.github.com/introduction/flow/
0) 创建仓库
1) 添加分支
Eg. 甲, 乙, 丙三个人开发三个模块 a, b, c.
每个人一个分支, 分别为 a, b, c
2) 完成提交
3) pull request(管理员未审核代码的阶段)
4) review your code
5) deploy(部署代码测试)
6) Merge(测试发布后, 合并到主分支, 用于下次迭代)
3. 实践 演练使用git完成项目环节
Maintainer:step1创建库
Maintainer:step2 clone 库到本地
git clone https://github.com/YuchengWang/github-test.git
做一些代码修改,然后提交
Developer:step1 fork Maintainer库到自己的github
Developer:step2下载代码到本地(这时候一般用ssh模式)
git clone [email protected]:ArtistH/github-test.git
注:
使用ssh的方式是为了每次push时候方便,不用每次输入github账号的密码。
本地库通过ssh协议与github仓库进行传输需要如下设置:
i. 创建SSH key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,创建SSHKey:
ssh-keygen -t rsa -C [email protected]
执行成功后,在用户主目录下的.ssh目录中会生成id_rsa和id_rsa.pub两个文件,这两个文件就是SSH Key的秘钥对,id_rsa是私钥,id_rsa.pub是公钥。
ii. 登陆GitHub,打开“Personal settings” -> “SSH and GPG Keys”页面,然后点击“New SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
GitHub允许用户添加多个Key,方便同一账号在多台主机登陆push代码。
Developer:step3 修改本地代码并提交到自己库
Developer:step4 pull request
Developer提交修改到自己的库以后,发现其库的commit与Maintainer库的commit不再一致。
于是,Developer向Maintainer库发起pull request
注意Developer对此pull request是做不了任何操作的。
Maintainer:step3审核代码,处理pull request
可以看到代码的具体改动。
Maintainer:step4审核通过,Merge
i. Create a merge commit, Merge Developer 刚刚提交的代码
ii. Squash and merge 把 Developer commit 多次的代码合并成一个commit然后 Merge
iii. Rebase and merge 从最原始的分支上做 pull request
Maintainer merge pull request后,可以发现Maintainer库的commit再次领先于Developer库的commit。多出的commit即为Maintainer刚刚merge pull request的commit。
Developer:step5 再次与Maintainer库进行同步
git remote –v
git remote add upstream https://github.com/YuchengWang/github-test.git
然后再执行 git remote-v
然后把上游分支代码更新到本地:git fetch upstream
然后验证当前分支是否为master分支
可以看到本地分支为master,远程分支为origin/master。
然后git merge upstream/master,在本地merge上游分支,然后再执行git push origin master,可以发现Developer库的commit与Maintainer库一致,最终完成与Maintainer库代码同步。可以通过git log查看。
注:在merge pull request过程中可能遇到冲突,需要Maintainer解决冲突后,状态变为no conflicts,即可以 merge pull request。
产生冲突文件为 main.c
解决掉冲突后变为 no conflicts,可以 merge pull request。
4. Issues
GitHub的issue功能,对个人而言,就如同TODO list。你可以把所有想要在下一步完成的工作,如feature添加、bug修复等,都写成一个个的issue,放在上面。
每一次commit都可以选择性的与某个issue关联。比如在message中添加#n,就可以与第 n个issue进行关联。
commit message title, #1
对用户而言,你可以通过issue给别人的项目提bug。
5. Wiki
useful:https://github.com/gdsub/atdocs/wiki
wiki 库与开发库是分开的,如项目经理不参加开发只维护 wiki 库。
使用 Markdown 格式编写。
6. 管理
库本身操作:可以设置一些 Features
Branchs 操作:如导出branch,将某个分支保护起来不允许提交。
Collaborators:添加可以merge代码的普通用户。
附注:
Question:fork,star,watch
fork:服务端仓库克隆,pullrequest等操作都要在fork的基础上完成
star:代码受欢迎度
watch:库的更改都发邮件通知,可以具体设置
wiki:https://github.com/ArtistH/github-test.wiki.git
王玉成github视频免费观看:
(视频免费分享)王玉成:用github有效组织项目讲座