在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存储库的内容。