git、gitflow、github学习心得

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, 相比很多功能类似,不过有一个免费的私人版本库的空间。

你可能感兴趣的:(Linux,git,branch,版本控制系统,mercurial,facebook,项目管理)