在git仓库中,git add用来将文件添加到暂存区,git init用来初始化一个新的git仓库,git commit用来将暂存区的文件提交到仓库

我想确认一下在进行git管理时,大家都会执行的三个命令——git init、git add和git commit——会产生什么动作。

创建一个存储库

首先创建一个作为存储库基础的目录。

% mkdir gitstudy 
cd gitstudy

创建一个名为”gitstudy”的目录,并进入该目录。

我们使用tree命令来查看目录树,添加选项 -a 可以查看隐藏文件。

% tree -a                                                                                                                     9:12:17
.

0 directories, 0 files

我只是创建了一个目录,所以当然还没有任何文件。

运行 “git init” 命令,将其注册为一个 git 仓库。

% git init                                                                                                                   9:16:31
Initialized empty Git repository in /Users/guai3/MyDevelopment/StudyWorkshop/gitstudy/.git/

我们在这里尝试使用与之前相同的tree命令来确认目录树。

% tree -a                                                                                                     
.
└── .git
    ├── HEAD
    ├── config
    ├── description
    ├── hooks
    │   ├── applypatch-msg.sample
    │   ├── commit-msg.sample
    │   ├── post-update.sample
    │   ├── pre-applypatch.sample
    │   ├── pre-commit.sample
    │   ├── pre-push.sample
    │   ├── pre-rebase.sample
    │   ├── pre-receive.sample
    │   ├── prepare-commit-msg.sample
    │   └── update.sample
    ├── info
    │   └── exclude
    ├── objects
    │   ├── info
    │   └── pack
    └── refs
        ├── heads
        └── tags

9 directories, 14 files

创建了一个名为.git的隐藏目录,并且在其中创建了这么多文件。
看起来,git init命令会在执行的目录中创建一个名为.git的目录,以及创建这么多的文件,就像是命令在做的事情一样。
现在让我们尝试创建一个文件。
由于git擅长管理文本文件,所以让我们创建一个空的文本文件试试看。

% touch gittest1.txt
% tree -a                                                                                                     (git)-[master] 9:38:41
.
├── .git
│   ├── HEAD
│   ├── config
│   ├── description
│   ├── hooks
│   │   ├── applypatch-msg.sample
│   │   ├── commit-msg.sample
│   │   ├── post-update.sample
│   │   ├── pre-applypatch.sample
│   │   ├── pre-commit.sample
│   │   ├── pre-push.sample
│   │   ├── pre-rebase.sample
│   │   ├── pre-receive.sample
│   │   ├── prepare-commit-msg.sample
│   │   └── update.sample
│   ├── index
│   ├── info
│   │   └── exclude
│   ├── objects
│   │   ├── info
│   │   └── pack
│   └── refs
│       ├── heads
│       └── tags
└── gittest1.txt
9 directories, 15 files

只是创建了一个文件,所以文件数量从14增加到15。
这次将此文件加入git进行管理,使用命令git add .。

% git add .
% tree -a                                                                                                    
.
├── .git
│   ├── HEAD
│   ├── config
│   ├── description
│   ├── hooks
│   │   ├── applypatch-msg.sample
│   │   ├── commit-msg.sample
│   │   ├── post-update.sample
│   │   ├── pre-applypatch.sample
│   │   ├── pre-commit.sample
│   │   ├── pre-push.sample
│   │   ├── pre-rebase.sample
│   │   ├── pre-receive.sample
│   │   ├── prepare-commit-msg.sample
│   │   └── update.sample
│   ├── index
│   ├── info
│   │   └── exclude
│   ├── objects
│   │   ├── e6
│   │   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   │   ├── info
│   │   └── pack
│   └── refs
│       ├── heads
│       └── tags
└── gittest1.txt

10 directories, 17 files

在object目录下创建了一个名为e6的子目录。
该子目录中的文件看起来像是gittest1.txt的实体。

我这次要尝试一下git commit。

% git commit -m "first commit"                                                                                        (git)-[master] 12:33:16
[master (root-commit) 538dd7f] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 gittest1.txt

我们来使用tree命令进行确认。

% tree -a                                                                                                             (git)-[master] 12:33:29
.
├── .git
│   ├── COMMIT_EDITMSG
│   ├── HEAD
│   ├── config
│   ├── description
│   ├── hooks
│   │   ├── applypatch-msg.sample
│   │   ├── commit-msg.sample
│   │   ├── post-update.sample
│   │   ├── pre-applypatch.sample
│   │   ├── pre-commit.sample
│   │   ├── pre-push.sample
│   │   ├── pre-rebase.sample
│   │   ├── pre-receive.sample
│   │   ├── prepare-commit-msg.sample
│   │   └── update.sample
│   ├── index
│   ├── info
│   │   └── exclude
│   ├── logs
│   │   ├── HEAD
│   │   └── refs
│   │       └── heads
│   │           └── master
│   ├── objects
│   │   ├── 53
│   │   │   └── 8dd7fed7a1afcdd63117550cfb4edae61dd579
│   │   ├── d8
│   │   │   └── b9eacedc71403b061cacff5eaa3955515392c5
│   │   ├── e6
│   │   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   │   ├── info
│   │   └── pack
│   └── refs
│       ├── heads
│       │   └── master
│       └── tags
└── gittest1.txt

15 directories, 23 files

当我执行 git commit 命令后,目录和文件出现了新的添加。

我们来检查一下git log。

% git log                                                                                                             (git)-[master] 12:41:12
commit 538dd7fed7a1afcdd63117550cfb4edae61dd579
Author: xxx xxxx <example@gmail.com>
Date:   Mon May 8 12:33:28 2017 +0900

    first commit

提交的是 538dd7fed7a1afcdd63117550cfb4edae61dd579,如果仔细看,它与对象下的文件名相同。
我写到这里就力不从心了…
请参考以下网站获取更详细的信息。

尽可能准确地理解Git存储库的内容。

广告
将在 10 秒后关闭
bannerAds