理解Git——Repository(仓库)

      原文出处:http://www.sbf5.com/~cduan/technical/git/,感觉对Git讲解的比较好,翻译下来,便于自己学习和参考。对一些名词保留了英文。

1、Repository(仓库)包含的内容

    Git的目标是管理一个工程,或者说是一些文件的集合,以跟踪它们的变化。Git使用Repository来存储这些信息。一个仓库主要包含以下内容(也包括其他内容):

    (1) 许多commit objects

    (2)到commit objects的指针,叫做heads

    Git的仓库和工程存储在同一个目录下,在一个叫做.git的子目录中。


2、Commit objects

    commit objects包含 三个部分:

    (1) 一组文件的集合,代表工程在特定时间点上的一个状态。

    (2)到父commit objects的指针

    (3)一个SHA1名,一个40个字符的字符串,用来唯一标示commit object。这个名字是通过与commit objects相关的内容通过哈希运算得到的,因此,相同的commits具有相同的名字。  

    通常,一个commit object具有唯一的父commit object。但是在特殊情况下(如分支合并时),一个commit  object也可能有多个父 commit object。

    一个工程总是会有一个commit object没有任何的父commit object,这是对仓库的第一次 commit。

   Git的核心思想就是操作所有的commit构成的图结构。


3、Heads

     Heads仅仅是指向一个commit的指针。每个Head都有一个名字。默认情况下,在每个仓库下都有一个head,叫做master。一个仓库可以包含任意数量的heads。在任何时候,一个Head被选为“当前head”。这个head的别名为HEAD,每个字母都是大写。

    "head"(全部小写)可以指仓库中的任意一个head,而"HEAD"(全部大写),仅仅指的是当前有效的head。


4、一个简单的仓库

    要创建一个仓库,为该工程创建一个目录,进入该目录,运行命令 git init,这个目录不必是空目录。

    mkdir [project]

    cd [project]

    git init

    这样,就在[project]目录下创建了一个 .git目录


    要建立一个commit,你要做以下事情:

    (1)告诉Git这个commit包含那个文件,使用git add命令。如果一个文件在前一次commit之后没有改变,Git自动将这个文件添加到你要执行的commi中去。因此,你只需要添加你要添加或者是修改的文件。要注意,对目录的添加是递归进行的,因此git add将会添加任何的改变。

    (2)调用git commit来创建一个commit object。新的commit object将会把当前的HEAD作为它的父亲(新的commit执行后,HEAD将会指向新的commit object)

    使用git commit -a命令会自动添加所有修改的文件(新建的文件不包含在内)

    要注意的是,如果你修改了文件,但是没有添加它,那么Git将会把之前版本的文件包含到这个commit中。


    例如你创建了三个commit,你的仓库将会是这个样子:

    ----> time ---->

    (A) <-- (B) <-- (C)

                             ^

                            master

                            ^

                            HEAD

     (A)、(B)、(C) 分别为第一个、第二个和第三个commit。


    其他的比较有用的命令:

    (1)git log:列出所有从HEAD到初始commit的日志。(当然它的功能不止这些)

    (2) git status:列出当前工程的状态和HEAD之间的那些文件发生了改变。文件有三中状态:新的没有被添加的文件(使用git add命令)、修改的但是没有被添加的文件、已经被添加的文件(即表明文件状态已经被记录)。

    (3)git diff:列出HEAD和当前状态之间的差别。使用--cached选项,它可以比较新添加的文件之间的区别,否则,它比较没有被添加的文件。

    (4)git mv和git rm分别用来标记要被删除或者重命名的文件,与git add类似


    我的个人工作流程通常是这个样子:

    (1)进行编程

    (2)git status来查看我更改了哪些文件

    (3)git diff [file]来查看我到底进行了哪些更改

    (4)git commit  -a -m [message]来创建commit


5、引用Commit:

    现在你已经创建了一些commits,怎样引用一个特定的commit?Git提供了许多中不同的方法:

    (1) 通过它的SHA1名字,你可以通过git log查看

    (2)通过SHA1前面的几个字符

    (3) 通过一个head。例如,HEAD指向当前commit。你也可以使用名字,如master。

    (4)通过^符号。如HEAD^指向当前commit的父commit。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值