source link:  http://blog.csdn.net/yeahugo/article/details/7232380


Git 是 Linux 的创始人 Linus Torvalds 开发的开源和免费的版本管理系统,利用底层文件系统原理进行版本控制的工具。Git是目前为止最著名运用最好最受欢迎的分布式的配置管理工具
       早期的版本控制系统以svn为代表属于集中式版本库模式,每个chengxvyuan在本地有一个工作目录树,其内容是该版本库仲最新代码。当他们在工作目录树中完成代码修改后,把改动提交回版本库中。这类集中式版本控制系统的局限性在于,如果查询历史修改记录,必须与服务器上的版本库通信。
       以git为代表的分布式版本控制系统,客户端不需要从一个单一的中央代码库同步代码,每个断电代码的拷贝都是真正的代码库。这种方式决定了分布式系统与集中式系统的优势在于:
       1.由于不需要与中央服务器进行通信,因此一般的操作(如提交,查看历史和还原修改等)的执行速度非常快.只有在向其它端点push代码更改或者从其它端点pull代码更改的时候才会需要进行通信.
     2.每一份代码拷贝都可以作为代码库及其更改历史的一份远程备份,这就为数据丢失提供了天然的保护.
鼓励测试性的branch - 创建或者销毁branch的操作简单而且快速.
      Mercurial是与git类似的分布式版本管理系统。通常来讲,Git相比Mercurial在处理branching方面表现更好,尤其是用于试验和检查点的短期branch.

     Git有一个被称为"staging area"的区域.在你向代码库提交之间, 你可以在这个中间区域中构建你的提交.更为重要的是,你可以只提交部分的修改,而不是将所有修改的文件都进行提交.你甚至可以只提交一个文件中修改的一部分.
     使用git init 命令后,就会创建一个.git目录,git add 添加到staging area区域,
    git commit 提交修改,
    git branch RB1.0 master,在主分支上创建RB1.0的分支,
    git check ***,切换不同分支。
    git tag1.0 RB_1.0 为RB_1.0的分支打上1.0的标签。
    git rebase,顾名思义,就是重新定义(re)起点(base)的作用,即重新定义分支的版本库状态。
    假如现在我们的版本库如下:
master0(初始化后的版本)
||
master1===test0==>test1===>test2
||
master2===>master3
     如果我要让test分支从test0到test2之间所有的改变都添加到master分支来,使得master分支包含test分支的所有修改。这个时候就要用到git rebase。
我们切换到master分支,然后运行下面的命令,即可实现我们的要求:
       git rebase test
      git reset         回退到某次提交后的为暂存状态
      git diff            查看文件差异
      git clone        创建远程版本库的本地拷贝,从一个远程叫做“origin”的主分支上,创建一个本地的分支,也跟踪远程的其他所有分支。
      git pull           需要加入远程版本库名称和远程分支名。可以顺序完成两件事,取来,然后合并。
      git fetch         和pull 类似,不过不会做任何合并。
      git push         可以指定推入版本库推入。

gitflow
·     git flow是一套管理基于git 的管理branch的模型流程,屏蔽了git的底层命令,向用户提供更高一级的命令用于源码的版本管理。它把branch分为两个主要分支,三个支援分支。
      主要分支:
       master:永远在production-ready状态。
       develop:最新的下次发布开发状态。
      支援分支:
      feature branches:开发新功能从develop分支出来,完成后meger回去develop。
      release branches:准备要release的版本,只修bugs。从debelop分支出来,完成后merge回master和develop。
      hotfix branches:等不及release版本就bixv马上修复master赶上线。从master分支出来,完成后merge回master和develop。

      在mac下命令行输入brew install git-flow安装。
      使用git flow init 初始化。
      初始化会自动生成上述的分支。
      有任何开发,先开branch
      git flow feature start feature1
      完成后输入 git flow feature finish feature1 会自动合并回develop并删除这个branch
      push 一个feature branch到远端
      git flow feature publish feature1 或git push origin feature/feature1
      追踪一个远端branch  
      git flow feature track feature1 或git checkout -b feature/feature1 -t origin/feature1 
      如果你在’追踪分支''(Tracking Branches)上执行推送(push)或拉取(pull)时, 它会自动推送(push)或拉取(pull)到关联的远程分支上.

      github的使用原则是:

      1.任何在master分支上的都是可以部署的。
      2.开发任何新功能,要创建一个不在主干上的自己命名的分支。
      3.当你需要反馈或者帮助,或者你觉得准备好可以融合到主干上, 打开一个pull request。
      4.当其他人都审核新代码之后,你可以把它融入master上。
      5.一旦融合和推入到master上, 你可以而且应该立即部署下来。

      与gitflow类似的工作流或者版本管理工具还有
      redmine 基于ROR的项目管理工具,需要插件
      DOTProject 基于LAMP项目管理工具 
      phabricator 开源的code review+repository browser+bug tracker+wiki facebook开源出来
      gerrit 成熟的代码review流程
      youtrack 问题跟踪,bug跟踪
      trakr        提供直观的工作流
      上述都没有亲自对流程使用,并不能提供每个优劣比较。

github
      GitHub 是一个用于使用Git版本控制系统的项目的基于互联网的存取服务
      GitHub可以托管各种git库,并提供一个web界面, 但与其它像 SourceForge或Google Code这样的服务不同, GitHub的独特卖点在于从另外一个项目进行分支的简易性。 为一个项目贡献代码非常简单︰首先点击项目站点的“fork” 的按 钮,然後将代码检出并将修改加入到刚才分出的代码库中, 最後通过内建的“pull request”机制向项目负责人申请代码合并。 已经有人将GitHub称为代码玩家的Facebook。
      在GitHub进行分支就像在Facebook进行交友一样, 在社会关系图的节点中不断的连线。
      开源项目可以免费托管,但私有版本库则并不如此。
      githup的安装参见github的主页,需要安装git, 本地生成公钥和私钥,打开本地生成的公钥, github网站上账号添加相应的公钥串。
       类似的社区化代码托管网站bitbucket, 相比很多功能类似,不过有一个免费的私人版本库的空间。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐