20 分钟教你搞懂 Git!

  • 时间:
  • 浏览:8

当当让当当我们来看看该文件的内容。

$ git checkout c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

当当让当当我们再来看看文件内容。

索引保存处于了变化的文件信息。等到修改完成,所有你这人信息全是被写入版本的历史记录中,这要花费生成一一个多 多当前项目的快照。

commit 785f188674ef3c6ddc5b516507884e1d551f53ca (HEAD -> master)

Author: jam

Date: Sun Oct 7 13:38:00 2018 +050

$ git log

first commit

tree c3b8bb102afeca85037d5b5dd89ceeb0090eae9d

author jam 1538889134 +050

committer jam 1538889134 +050

针对每个文件执行上述一一个多 多步骤非常繁琐。可是Git提供了git add命令来复杂化你这人操作。

$ git cat-file -p c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

$ git update-index test.txt

$ git write-tree

当当让当当我们创建一一个多 多项目的目录,怎么能会让进入该目录。

在上述代码中,目录社会形态保存成了二进制对象,而对象的名字是哈希值。它也保处于.git/objects目录中。

下列所有“快照”的引用指的全是 提交。

git init只做了一件事情,那可是在项目的根目录下创建.git子目录来保存版本信息。

c90c5155ccd6661aed956510f5bd57828eec9ddb

原文发布时间为:2018-12-10

本文作者:机器学习算法与Python学习

本文来自云栖社区媒体企业合作伙伴“ 机器学习算法与Python学习”,了解相关信息可不还都可以关注“guodongwei1991”微信公众号

$ echo "second commit" | git commit-tree 1552fd52bc14497c11313aa91547255c95728f37 -p c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

肯能原文件为空,可是上述命令你这人都只有显示。现在当当让当我们往test.txt文件中写点东西。

上述命令记录了文件名test.txt、二进制对象名(哈希值)以及索引中文件的访问权限。

首先,当当让当当我们要设置用户名和邮件地址。在你保存快照的如果,Git都要记录是谁执行的提交。

上述代码显示索引中只一一个多 多多新文件test.txt,该文件正等待图片图片图片写入版本的历史记录中。

肯能你看过看该文件原始的文本内容,只有应该使用git cat-file。

$ git log --stat c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

在这篇文章中,我将用一一个多 多例子来解释Git的运行过程,帮助你理解Git的工作原理。

上述代码输出的文件内容是有些二进制字符。你肯能会问既然test.txt是空文件,又怎么能会会有你这人内容呢?这是肯能该二进制对象中还存储了有些元数据。

$ echo 785f188674ef3c6ddc5b516507884e1d551f53ca > .git/refs/heads/master

你这人文件的内容肯能改变了,可是你都要再次把它保存为Git对象。

上述代码显示索引中只一一个多 多多test.txt文件,还显示了该文件的二进制对象名和访问该文件的权限。肯能你知道该二进制对象名,就可不还都可以查看.git/objects子目录中该文件的内容。

$ git show c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

如上述代码所示,.git/objects目录下又多出了一一个多 多子目录,怎么能会让你这人子目录名是上述哈希值的前一一个多 多字符。在你这人子目录下一一个多 多多文件,文件名是上述哈希值中其余的38个字符。

git status命令可不还都可以输出更多可读的结果。

test.txt | 1 +

1 file changed, 1 insertion(+)

git ls-files命令可不还都可以显示索引中当前的内容。

在上述代码中,git hash-object命令将test.txt现有的内容压缩成二进制文件,并保存到Git中。该压缩文件叫做Git对象,保处于.git/objects目录中。

项目的历史记录由不一块儿间点的项目快照组成。Git可不还都可以将项目恢复成任何一一个多 多快照。在Git中“快照”一一个多 多多专门的术语,即“提交”(commit)。可是生成快照也可不还都可以称之为完成提交。

785f188674ef3c6ddc5b516507884e1d551f53ca

上述命令要花费针对当前项目中所有处于了变化的文件执行上述一一个多 多步骤。

尽管每天你全是用到Git,但全是 肯能搞不懂它的工作原理。为你这人Git可不还都可以管理版本?基本命令git add和git commit到底在干你这人?

c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

$ echo "first commit" | git commit-tree c3b8bb102afeca85037d5b5dd89ceeb0090eae9d

肯能想管理项目的版本,只有当当让当我们应该做的第一件事情可是通过git init初始化。

commit c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

Author: jam

Date: Sun Oct 7 13:12:14 2018 +050

上述命令显示了.git子目录中的内容。

当当让当我们可不还都可以通过你这人命令根据对象的文件名获取当前内容,并计算成SHA1 哈希(长度为40的字符串)。当当让当当我们看看下列新生成的Git对象文件。

当文件保存成二进制对象如果,你都要告诉Git哪个文件处于了变化。Git会在一一个多 多全名是“索引”(或阶段)的区域记录所有处于了变化的文件。怎么能会让等到所有的变更都开始英文英文英语 后,将索引中的你这人文件一块儿写入正式的版本历史记录中。

$ git commit -m "first commit"

git write-tree命令可不还都可以根据当前目录社会形态生成一一个多 多Git对象。

$ echo "hello world again" > test.txt

怎么能会让把你这人文件去掉 到Git代码库中,你这人步将创建test.txt现有内容的一一个多 多副本。

如上述代码所示,test.txt的哈希值肯能随着文件内容的改变而处于了变化。一块儿还生成了新文件.git/objects/3b/18e512dba79e4c850dd08aeb37f8e728b8dad。现在愿意看过你这人文件的内容了。

1552fd52bc14497c11313aa91547255c95728f37

commit c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

Author: jam

Date: Sun Oct 7 13:12:14 2018 +050

接下来当当让当当我们创建一一个多 多新的空文件test.txt。

$ git hash-object -w test.txt

接下来,保存现有的目录社会形态。在本文的前面当当让当我们讨论了保存对象只会保存一一个多 多文件,不让会记录文件之间的目录社会形态。

$ git log