如何使用git为开源社区贡献力量

来源:互联网 发布:数据库故障应急预案 编辑:程序博客网 时间:2024/05/01 11:35

        git现在使用的人越来越多,和传统的cvs,svn等工具相比有很多的优势和特性。当你开始使用起来之后,你会发现自己逐渐的爱上她。基本的git操作这里就不赘述了,查阅参考文档,或者一些简明教程,就能大致的了解,最关键是自己建一个自己的库,多加练习。

         GitHub,是全球最大的社交编程及代码托管网站,GitHub可以托管各种git库,并提供一个web界面,但与其它像SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性而且主要是使用git作为管理工具。

         在github上可以找到很多优秀的开源软件,这是一个学习的好机会,我们也可以坚持拿来主义,大量的优秀软件帮助我们解决开发中遇到的难题。同时这也是一个共享与交流的平台,你不仅仅可以学习和使用别人的代码,还能创建自己的库,向别人的库中提交代码,为开源社区贡献自己的力量。这里就说一下一般是如何向已有的库提交代码的。


1. Fork 你想要贡献代码的库

fork a repo
         找到你想要贡献代码的库的主页,点击图中标出来的fork按钮,这样就会在你自己的库中添加一个和你fork的库(我们叫它upstream)同名的库(我们叫它mystream)。

2. 克隆你fork的库

         使用git clone命令将mystream克隆到本地。  
      git clone git@github.com:<username>/<repo-name>.git
         这个克隆出来的库只是你github上面的库在本地一个副本,你可以对它任意的操作,只要不push你的改动,是不会对你github上面的代码产生任何影响,同时也体现了git离线提交的好处。

3. 在remote列表中添加你要贡献代码的库

         既然要贡献你的代码给别人,就要先把别人的地址给记下来吧,使用git remote add命令来添加upstream。
     git remote add upstream <original repo git url>
         到这里主要的准备工作就做完了。可以使用git remote命令查看你的remote列表。

4. 创建一个工作分支,在上面完成你的工作

         使用git和别人协同工作一个很重要的原则是不要在主分支上进行修改这个原则和后面提到的原子性提交以及pull request 都是有关系的,后面会说到。首先确认你在主分支上
     git checkout master
         创建并且切换到一个新的工作分支
     git checkout -b <new-branch-name>
          在这个工作分支上你就可以为所欲为了,你可以添加,修改代码,并且进行正常的commit提交

5. 保持你的代码和fork的代码同步

         因为我们的开发和修改是独立的,和我们fork的代码库是并行进行的,所以在我们fork后,或者上次同步一段时间后,我们本地的代码已经不是最新的了。当你完成了修改并且想向主库提交代码时,首先要做的事情就是同步你的代码。
确认你工作在主分支上
     git checkout master
         从upstream的主代码库获取最新的代码并且与本地的主分支合并
     git pull upstream master
         这是懒人的做法,你也可以选择使用git fetch和git merge,选择性合并主分支的代码,这里有它们的区别
另外,你也可以将你自己在github上的mystream主分支更新,当然这个是可选的。
     git push origin master
         一般默认你克隆下来本地对应的远端mystream被命名为origin

6. 同步你想要提交的分支代码

         到这里你本地的主分支已经和upstream的主分支同步了,真正的好戏才刚刚开始。前面提到提交的原子性,那什么是提交的原子性呢?我们都知道乐高积木,这个提交的原子性就是保证我们使用乐高积木拼装成的艺术品,随时可以进行调整。每一次提交就像一个积木块一样,可以随时拔掉或者插上。
your code
         但是当我们在本地为了添加一个功能或者修复一个bug,很多时候不会只做一次提交,而是可能会进行多次commit提交。如果直接将这些改动与upstream主分支合并,那么以后如果希望撤销这次的操作或者将这次的改动合并到其他分支上就会很麻烦。
确保你工作在你一直辛勤工作的分支
     git checkout <working-branch-name>
          将你本地的工作分支与master主分支“合并”
     git rebase -i master
         这里用到的rebase命令不是简单的合并,这里有rebase与merge的区别,-i参数会引导我们一步一步解决冲突,你也可以选择先解决冲突再使用rebase。使用rebase命令会将你原来多次的提交合并成一次提交。具体冲突以后的情况看这里
解决冲突后
     git add <modified files>
     git rebase --continue


7. 提交本地分支代码

         以上的一切操作都是发生在本地,为了能够发送pull request,你需要将本地的改动提交到github。
     git push origin <working-branch-name>
         到这里我们的一个工作流程就完成了,如果我们有一个CI系统,我们可以选择我们提交的这个分支跑一下CI,确保不会让我们的系统挂掉。最后就是使用github来发送一条pull request,这个官网介绍的很详细啦。
         最后说明一下为什么要创建分支而不直接在主分支上操作。其实主要是为了保证一个干净的主分支。随时让我们可以基于这个干净的分支创建新的分支,所有的操作和修改都是与主分支隔离开的。主分支只负责和upstream进行同步。如果在本地提交了有问题的代码那还好,大不了就是删掉本地的库,重新再克隆一个。一旦提交到github上,主分支就污染了,为了保证减少无意义的提交(revert之前的commit)就需要重新fork了。
         就说到这里,现在开始行动为开源社区贡献力量吧。

原创粉丝点击