600词说清Git

2015-06-11  本文已影响61人  windgo

作者: Mary Rose Cook
原文地址
git操作的涉及的位置:
“working-copy”<————>”index”<————>”database”
“working-copy”<—————————-————>”database”

  1. 创建目录 ”alpha”, 在”alpha”目录下创建文本文件 ”number.txt”, 设置文件内容为 “first”.
  2. 到 ”alpha” 目录下执行 “git init”.

该命令将 “alpha” 设置为 Git仓库.

  1. 执行命令 “git add number.txt”, 将 “number.txt” 加入到 “index”.

“index” 是Git所管理之文件之列表. “index” 映射文件名到文件内容. 此时它包含一个映射 “number.txt -> first”. 这个命令的执行也在Git的对象数据库里增加了一个blob对象, blob对象里包含了”first”文本.

  1. 执行命令 “commit -m first”. 这个命令导致了三件事:
  1. 在Git的对象数据库里创建了一个”tree”对象. 这个对象代表了”alpha”目录顶层的 ”items”的列表. 这个对象有一个指针指向之前通过 ”git add” 创建的包含了first的blob对象.
  1. 创建了一个”commit”对象, 代表了你刚刚 ”commit” 的仓库的版本.
  2. 将 ”master” 分支指向了刚刚创建的 ”commit” 对象.
  3. 执行命令 ”git clone . ../beta”.

这条命令创建了一个新的目录, 目录名为”beta”. “beta” 已经被初始化为一个Git仓库. “alpha” 对象数据库中的对象被复制到了”beta”中. “beta”仓库里的“master”分支和”alpha”中指向相同的”commit”对象. “beta”中的”index”被设置为”first commit”中的内容. 文件“number.txt”从index中得到更新.

  1. 进入”beta”目录. 将”number.txt”的内容修改为”second”. 执行”git add number.txt”和”git commit -m second”.

commit对象被创建, 并且有一个指针指向它的parent— “first” commit. commit命令将master分支指向”second commit”.

  1. 回到”alpha”目录. 执行”git remote add beta ../beta”命令.

这个命令将beta仓库设置为一个远程仓库.

  1. 执行命令 “git pull beta master”
    一条pull命令相当于多条命令:
  1. 执行 “git fetch beta master”. 这条命令找到”beta”仓库里的“socond commit”的对象们, 把它们拷贝到”alpha” 仓库. 命令将alphpa中的beta的的记录的master指向第二个commit对象. FETCH_HEAD被更新, 用来显示master brach取自beta仓库.
  1. 执行命令 ”git merge FETCH_HEAD”. FETCH_HEAD被读出. 它显示beta仓库上得master brach是最新获得的分支. 可知alpha的记录中的beta的master指向的commit对象, 正是第二个commit. alpha的master brach指向第一个commit. 这意味着, 要完成这次合并, merge命令只要将master分支指向第二个commit. merge命令更新index, 将第二个commit的内容映射入. 将工作备份从index镜像.
  2. 执行命令 “git brach red”.

命令创建一个名为”red”的分支, 指向第二个commit object.

  1. 执行 “git checkout red”.

checkout前, HEAD指向 master分支. 现在HEAD指向了red分支. 命令使red分支成为了”当前分支”.

  1. 设”number.txt”内容为”third”. 执行”git add numbers.txt”, 再执行“git commit -m third”
  2. 执行”git push beta red”.

此命令寻第三个commit的对象, 并从alpha仓库复制至beta仓库. 并将beta仓库的red分支指向第三个commit对象.

  1. 若你想学习Git的内里和细节, 可以读文章: Git由内到外.

(If you would like to learn about the internals of Git in detail, you can read my essay, Git from the inside out.)

上一篇下一篇

猜你喜欢

热点阅读