画布 1
Git
  简介
    Git 是什么
      Git 是一个开源的分布式版本控制系统。
    为什么使用 Git
      工作时不需要联网
        首先，分布式版本控制系统根本没有“中央服务器”，每个人的电脑上都是一个完整的版本库，这样，你工作的时候，就不需要联网了，因为版本库就在你自己的电脑上。
      更加安全
        集中式版本控制系统，一旦中央服务器出了问题，所有人都无法工作。
        分布式版本控制系统，每个人电脑中都有完整的版本库，所以某人的机器挂了，并不影响其它人。
    原理
      版本库（.git）
      工作区（WORKING）
      暂存区（STAGING）
      本地仓库（LOCAL）
      REMOTE（远程仓库）
  使用
    创建
      init
        # 通过 SSH 复制一个已创建的仓库
$ git clone ssh://user@domain.com/repo.git
      clone
        $ git clone ssh://user@domain.com/repo.git
        # 通过 HTTP 复制一个已创建的仓库
$ git clone http://domain.com/user/repo.git
    本地修改
      add
        # 添加名为 xxx 的文件到暂存区
$ git add xxx
        # 添加当前目录所有修改内容到暂存区
$ git add .
        # 添加所有修改内容到暂存区
$ git add -A
      commit
        # 提交之前已标记的变化
$ git commit
        # 附加消息提交
$ git commit -m 'message here'
        # 提交本地的所有修改
$ git commit -a
    查看
      status
        # 显示工作路径下已修改的文件
$ git status
      diff
        # 显示与上次提交版本文件的不同
$ git diff
      log
        # 从最新提交开始，显示所有的提交记录（显示hash， 作者信息，提交的标题和时间）
$ git log
        # 显示某个用户的所有提交
$ git log --author="username"
        # 显示某个文件的所有修改
$ git log -p <file>
  git-flow
    关键分支
      master(主分支)
        说明：源码库应该有且仅有一个主分支。主分支应该对应着软件的生产环境。
        生命周期：始终存在。
        命名规则：master
      develop(开发分支)
        说明：用于日常开发，当源码到达一个稳定的状态，就可以将所有代码合并到master。
        生命周期：始终存在。
        命名规则：develop
        命令
          # Git创建Develop分支的命令：
git checkout -b develop master
# 切换到Master分支
git checkout master
# 对Develop分支进行合并
git merge –no–ff develop
      说明：核心分支可视为是两条一直延续的平行线。
    辅助分支
      feature(功能分支)
        说明：为了开发某种特定功能，从develop分支上面分出来的。通常应该在开发者本地代码库，而不应该在源码库。
        生命周期：从develop而来，向develop合并。
        命名规则：feature/*。eg: feature/uploadfile
        命令
          # 创建一个功能分支：
git checkout -b feature/xxx develop
# 开发完成后，将功能分支合并到develop分支：
git checkout develop
git merge –no-ff feature/xxx
# 删除feature分支：
git branch -d feature/xxx
      release(发布分支)
        说明：发布正式版本之前（即合并到master分支之前），往往需要有一个预发布的版本进行测试，就可以使用release版本。
        生命周期：可能从develop分支分离而来，但是一定要合并到develop和master分支上。
从develop分支创建新的Release分支的关键时刻是develop分支达到了发布的理想状态。
至少所有这次要发布的features必须在这个点及时合并到develop分支。
对于所有未来准备发布的features必须等到Release分支创建以后再合并。
        命名规则：release/*。eg: release/1.0.0
        命令
          # 创建一个预发布分支：
git checkout -b release/1.0.0 develop
# 确认没有问题后，合并到master/develop分支，并且做一个标签
git checkout master
git merge –no-ff release/1.0.0
git checkout develop
git merge –no-ff release/1.0.0
git tag -a 1.0.0
# 最后，删除预发布分支：
git branch -d release/1.0.0
      hotfix(补丁分支)
        说明：用来修复master分支上发现的bug。
        生命周期：从Master分支上面分出来的。修复结束以后，再合并进Master和Develop分支。
        命名规则：hotfix/*。eg: hotfix/1.0.0
        命令
          # 创建一个修补bug分支：
git checkout -b hotfix/1.0.0 master
# 修补结束后，合并到master/develop分支，并且做一个标签
git checkout master
git merge –no-ff hotfix/1.0.0
git checkout develop
git merge –no-ff hotfix/1.0.0
git tag -a 1.0.1
# 最后，删除hotfix分支
git branch -d hotfix/1.0.0
      说明：与关键分支不同，这些分支总是有一个有限的生命期，因为他们最终会被移除。
    模型图
    参考文章
      http://www.oschina.net/translate/a-successful-git-branching-model
  安装
    Linux
      Debian/Ubuntu
        $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
> libz-dev libssl-dev
$ apt-get install git-core
$ git --version
git version 1.8.1.2
      Centos/RedHat
        $ yum install curl-devel expat-devel gettext-devel \
> openssl-devel zlib-devel
$ yum -y install git-core
$ git --version
git version 1.7.1
    Windows
      在 https://git-scm.com/downloads 下载 exe 安装包。按照安装向导安装即可。
    Mac
      在 https://git-scm.com/downloads 下载 mac 安装包。按照安装向导安装即可。
  工具
    SourceTree(推荐使用)
      推荐理由：这个工具可以自动创建符合分支策略的工作流。
    Git Bash
    IDE自带的git插件