在了解了Git的基本用法后(如果你还未了解 Git 的基本使用方法,建议你先话点时间阅读下《 Pro Git 》这本书),相信你已经开始跃跃欲试了,那么我就说下如何正确的使用 Github。下面的图描述了使用 Github 的基本流程:
Fork 项目其实就是在 Github 上拷贝一份他人项目的副本作为自己的项目。当你进入一个项目页面后,会在右上方看见一个Fork的按钮,点击它就可以 Fork 一个项目。
需要注意的是Fork项目后,你自己的项目并不会和源项目保持自动同步,所以你需要手动进行更新,如何更新请看:第五步:拉取源项目的更新。
Fork 项目后,我们就可以把代码 Clone 到本地以便我们修改。Github 提供两种 Clone 项目的方式,SSH/HTTPS。如果选用SSH模式,你需要先在本地生成一对SSH Key并上传到Github用于身份识别,具体请参考 Github 的帮助文档:Generating an SSH key。如果选用HTTPS模式,在更新和提交时就要输入 Github 的用户名和密码。一般来说使用 SSH 模式,在一次配置后,就可以免输密码提交代码,比较方便,但使用 HTTPS 模式更具备通用性,所以各有利弊,随意选择~
# 使用 ssh clone 项目到本地$ git clone git@github.com:rvm/rvm.git# 使用 https clone 项目到本地$ git clone https://github.com/rvm/rvm.git |
---|
每次开发新功能,都应该新建一个单独的分支(这方面可以参考《Git分支管理策略》)。
# 获取主干最新代码$ git checkout master$ git pull# 新建一个开发分支myfeature$ git checkout -b myfeature |
---|
分支修改后,就可以提交commit了。
$ git add --all$ git status$ git commit --verbose |
---|
需要注意的是 Commit 代码必须给出简明扼要的提交信息,下面是一个范本,第一行是不超过50个字的提要,然后空一行,罗列出改动原因、主要变动、以及需要注意的问题。最后,提供对应的网址(比如Bug ticket)。
Present-tense summary under 50 characters* More information about commit (under 72 characters).* More information about commit (under 72 characters).http://project.management-system.com/ticket/123 |
---|
当我们在修改代码的时候,源项目肯定也会发生变化,所以在我们向源项目推送代码之前,需要先将源项目的代码更新拉取下来。
先查看我们的 Remote 配置
$ git remote -vorigin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) |
---|
将源项目添加为 upstream
$ git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git |
---|
检查配置是否生效
$ git remote -vorigin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push) |
---|
拉取源项目的变更
git fetch upstreamremote: Counting objects: 75, done.remote: Compressing objects: 100% (53/53), done.remote: Total 62 (delta 27), reused 44 (delta 9)Unpacking objects: 100% (62/62), done.From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY * [new branch] master -> upstream/master |
---|
切换到 master 分支
$ git checkout master |
---|
将源项目的修改合并到本地 master 分支
git merge upstream/master |
---|
接着我们切换到之前的开发分支 myfeature,并同 master 分支进行同步
$ git checkout myfeature$ git rebase master |
---|
有时我们会和主干发生冲突,那么我们需要在本地把所有冲突解决掉后才能继续合入代码。如何解决冲突,请阅:Resolving a merge conflict from the command line
同步好本地分支后,我们就可以将代码推送到Github了
git push -u origin myfeature |
---|
点击项目页面上方的pull request按钮
我们自己的项目选择之前的开发分支,源项目选择 master 分支
在下面的页面上填写上描述,然后点击发送即可,接着下来就是原作者的事儿了,如果他同意合入我们会在项目的 master 分支看到我们刚刚贡献的代码。