1

我是 git 的源代码控制新手。不过,我想确保自己理解所有内容,并且很早就遇到了一些看起来很奇怪的东西。

这就是我正在做的事情:

  1. 在 GitHub 上创建一个新的存储库。它提供了制作一个“标准”C# .gitignore 文件,这听起来很棒,所以我说是的。
  2. 我看到存储库中同时创建了自述文件和 .gitignore。
  3. 我使用克隆这个 repo 到我的机器上git clone [repo location] [local folder]
  4. 我编辑 .gitignore 文件以添加一些其他被忽略的文件和文件夹。
  5. 我输入git commit,这会产生一条消息,上面写着“更改未暂存以进行提交”,但将 .gitignore 列为正在修改。

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

这让我有点困惑。如果 .gitignore 没有被跟踪,它到底是如何被使用的git clone?为什么我必须在它允许我提交更改之前手动添加它?

4

2 回答 2

8

这是 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

只提交file1file2即使file3file4也被修改。

有时,你想要的只是提交你所拥有的一切。它有一个快捷方式:

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

git commit给定-a选项会自动添加所有修改的文件以提交。

您甚至可以暂存部分文件,git add -p这基本上会向您显示提交补丁的各个部分,并让您选择要暂存的更改和不暂存的更改。稍后,git commit您可以提交任何已上演的内容。

于 2012-05-05T01:18:24.267 回答
6

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

Git 书中有关跟踪和暂存的更多信息。

于 2012-05-05T01:10:50.327 回答