七、将新文件添加到Git版本库
1、文件的状态
现在我们的电脑上已经有了一个Git仓库:如果是新创建的仓库,则默认是一个空库,没有任何文件;如果是从远程克隆到本地的仓库,则远程仓库中的所有文件均已克隆到本地,并在本地仓库中检出了所有文件的工作副本。
通常,当我们在版本库工作时,每当完成了一个阶段的目标后,想要将记录下它,就将它提交到到仓库。
请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪 或 未跟踪。
已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录。初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们。在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。
未跟踪文件就是工作目录中还未纳入到版本控制的文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。当你在版本库中新添加文件时,此时文件还未纳入到版本控制,就属于未跟踪文件。
在Git仓库中,不管是新添加的文件还是修改的文件, 在工作时,你可以选择性地将这些文件放入暂存区,然后所有已暂存的修改提交版本库,如此反复。
2、跟踪新文件
在版本库的工作目录新建一个README.txt文件,并在该文件里输入任意一些内容。
第一步:使用命令 git add 开始跟踪一个文件。这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“精确地将内容添加到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。
所以,要跟踪 README.txt 文件,运行:
$ git add README.txt
此时再运行 git status 命令(该命令用于查看哪些文件处于什么状态),会看到 README.txt 文件已被跟踪,并处于暂存状态:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.txt
只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件在你运行 git add 时的版本将被留存在后续的历史记录中。 git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。
第二步:用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "添加readme文件"
[master (root-commit) a235818] 添加readme文件
1 file changed, 1 insertion(+)
create mode 100644 README.txt
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的README.txt文件);1 insertion:插入了一行内容(README.txt有一行内容)。
为什么Git添加文件需要add,commit一共两步呢?因为commit是一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."