繁体   English   中英

为什么在提交之前必须添加要跟踪的文件?

[英]Why do I have to add the files being tracked before committing?

我是git的源代码控制新手。 我想确保自己对所有事情都了解,并且很早就发现了一些奇怪的东西。

这是我在做什么:

  1. 在GitHub上创建一个新的存储库。 它提供了一个“标准” C#.gitignore文件的功能,听起来不错,所以我同意。
  2. 我看到使用存储库创建了自述文件和.gitignore。
  3. 我使用git clone [repo location] [local folder]将这个仓库克隆到我的机器上
  4. 我编辑.gitignore文件以添加一些其他被忽略的文件和文件夹。
  5. 我输入git commit ,这会产生一条消息,内容为“未针对提交进行更改”,但列出了被修改的.gitignore。

所以最终我将其添加,提交并推回原点,这显示了我在GitHub上所做的更改。 一切都很好。

这让我有些困惑。 如果未跟踪.gitignore,那么世界上如何使用git clone将其下拉? 为什么在允许我提交更改之前,我必须手动添加它?

这是git查看您的存储库的方式:

repository  ---  staging area  ---  working directory

在存储库中,您可以在所有本地分支或fetch远程分支中获取所有提交的信息。 在工作目录中,您已从某些提交中检出了所有文件,这些文件可能已被修改。 暂存区是您添加要提交的文件但尚未提交的位置。 这是因为在git中,您可以选择要提交的内容(例如,与svn不同,您可以提交任何已修改的内容)。

我强烈建议您阅读这篇文章 ,尽管该文章主要关注git reset ,但它对git的工作原理进行了很好的概述。

这是它的一幅小图:

repository  ---  staging area  ---  working directory
    |                  |                    |
    |                  |                    |
    |              Check out                |
    |-------------------------------------->|
    |                  |                    |
    |                  |         add        |
    |                  |<-------------------|
    |                  |                    |
    |      commit      |                    |
    |<-----------------|                    |

结帐非常明显。 后两个意味着您有选择地将文件添加到暂存区,然后提交它们。 例如:

$ touch file1 file2 file3 file4  # modify files
$ git add file1
$ git add file2
$ git commit

即使file3file4也被修改, file4也仅提交file1file2

有时候,您想要做的就是承诺您拥有的一切。 有一个快捷方式:

$ touch file1 file2 file3 file4  # modify files
$ git commit -a

git commit -a选项自动将所有修改过的文件添加到提交中。

您甚至可以git add -p文件的一部分,这是由git add -p完成的,它基本上向您显示提交补丁的各个部分,并让您选择要暂存哪些更改以及不进行哪些更改。 稍后,使用git commit可以提交任何已暂存的内容。

这不是特定于.gitignore 除非您使用git commit -a自动提交所有更改,否则您始终必须先使用git add登台修改过的文件,然后才能提交它们。

有关跟踪和暂存的更多信息,请参见Git书。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM