版本控制

Via :udacity.com 用 Git 进行版本控制

Version Control and Git

什么是版本控制?

版本控制是帮助控制或管理某个事物(通常是源代码)的不同版本。

  • 三大流行版本控制系统:

  1. Git
  2. Subversion
  3. Mercurial

  • 两种版本控制系统模型主要类型

  1. 集中式模型(Centralized Model),所有用户都连接到一个中央的主仓库(master repository)
  2. 分布式模型(Distributed Model),每个用户都在自己的计算机上拥有完整的仓库。Git就是如此

Git与Github是完全不同两个东西,Git是版本控制工具,而GitHub是托管Git项目的服务。

  1. 工作目录是我们当前进行操作的目录,也是Shell的当前工作目录。
  2. 当我们在工作目录中创建新文件或对文件进行修改后,更改不能直接传到仓库区,而是先要把所有更改放到暂存区,然后再从暂存区提交(commit)到远程仓库。
  • 创建Git仓库

  1. git init:创建全新仓库
    • 运行 git init 命令会初始化 Git 跟踪所有内容会用到的所有必要文件和目录。
    • 所有这些文件都存储在叫做 .git的目录下。这个 .git 目录是一个库!Git 会将所有 commit 记录在这里,并跟踪所有内容!
      1. description 文件 – 此文件仅用于 GitWeb 程序,因此可以忽略
      2. hooks 目录 – 我们会在此处放置客户端或服务器端脚本,以便用来连接到 Git 的不同生命周期事件
      3. info 目录 – 包含全局排除文件
      4. objects 目录 – 此目录将存储我们提交的所有 commit
      5. refs 目录 – 此目录存储了指向 commit 的指针(通常是“分支”和“标签”)
  2. git clone:从其他地方复制东西到本机
  3. git status:查看仓库状态
  • 查看仓库历史记录

  • git log:显示有关现有提交的信息。
    • git log –oneline
      1. 每行显示一个commit
      2. 显示commit的SHA前七个字符
      3. 显示commit的消息。
    • git log –stat:显示commit中更改的文件,添加或删除的行数
    • git log -p:显示当前文件之前的实际更改。例如
  • git show:显示特定的提交信息,需要ID(SHA)git log -p fdf5493 = git show fdf5493
  • 向仓库中添加commit

  1. git add:将文件从工作目录添加到暂存区中。
    git add <file1> <file2> … <fileN>
  2. git commit:将文件从暂存区提交到仓库区。
    • 使用-m 绕过编辑器,直接输入提交说明。git commit -m “commit message”
    • 良好的提交说明应:
      1. 消息篇幅简短
      2. 解释提交的作用(不是为何更改或如何更改)
  • 禁忌:
    1. 不要解释为何做出这些更改
    2. 不要解释做出了哪些更改
    3. 不要用单词 and
    4. 提交说明应保持一致性
  1. git diff:显示两个版本之间的差异。输出与git log -p相同。
  2. 使用.gitignore确保某些文件不被提交
    • 将不想要提交的文件名添加在.gitignore中即可
    • 可使用通配符来批量代表文件。
      1. 空白行作为空格
      2. # 将行标记为注释
      3. * 与0~多个字符匹配
      4. 与1个字符匹配
      5. [abc] 与a或b或c匹配
      6. ** 与嵌套目录匹配
  • 标签、分支与合并

  1. git tag:为commit添加标签,将某个commit与其他提交区分出来。例如1.0版本的commit给tag v1.0
    1. git tag -a tag-tag:-a选项说明这是创建一个带有注释的标签。带有注释可包含标签创建者,创建日期,标签消息等。不带-a 选项的tag是轻量级标签。
    2. git tag -d tag-tag,使用选项 -d删除标签 tag-tag
    3. git tag -a tag-tag SHA,为以前的commit添加标签。
  2. git branch:创建分支,并行开发项目的不同功能
    1. git branch,列出仓库中所有分支的名称。活跃的分支前会有个*号
    2. 创建新的分支 git branch branch2,创建名为branch2的新分支
    3. 删除分支 git branch -d branch2,删除branch2分支
    4. git branch branch2 42a69f,创建branch2,并使其指向SHA为42a6f9的commit
  3. git checkout:在不同的分支与标签间进行切换
    1. 如果内容存储在一个分支上,而commit在另一个分支上,这些提交是看不见的。
    2. git checkout -b another-branch 使用-b 选项一句话创建另一分支,并切换过去。
  4. git merge:将不同分支上的更改自动合并在一起
    1. git merge <name-of-branch-to-merge-in>
    2. 发生合并时,git 将:
      1. 查看将合并的分支
      2. 查看分支的历史记录并寻找两个分支的 commit 历史记录中都有的单个 commit
      3. 将单个分支上更改的代码行合并到一起
      4. 提交一个 commit 来记录合并操作