git add没有找到目录中的所有文件。文件修改日期问题?

时间:2018-05-14 19:02:59

标签: git

我尝试使用少数先前创建的文件初始化新的git repo并且

git add .

未添加文件。我仔细检查了所有常见的嫌疑人.gitignore没有任何事情发生。然后我尝试对其中一个文件稍作修改,然后添加就可以了。我的假设是当我对文件进行更改时,它会收到一个新的修改日期。或者我的另一个假设是,我的细微更改,更改文件的哈希,以便git将其识别为要添加的新文件?

我真的不想触摸每个文件,所以git会把它拿起来。有谁知道另一种解决方案?

1 个答案:

答案 0 :(得分:2)

我怀疑发生的是git add .工作正常。这就是通常情况。

$ git init bar
Initialized empty Git repository in /Users/schwern/tmp/bar/.git/
$ cd bar
$ touch foo bar baz
$ git add .

请注意git add .没有说什么,它只是起作用。我们可以查看git status

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   bar
    new file:   baz
    new file:   foo

Changes to be committed中的任何内容都位于&#34;暂存区域&#34; (又名&#34;索引&#34;或&#34;缓存&#34;)。这是你构建下一个提交的地方,对于Git来说是相当独特的。

虽然其他版本控制系统会对任何跟踪文件提交任何更改,但Git只会使用git add提交您已复制到暂存区域的内容。当您git commit时,它将提交暂存区域的内容。

git add做了两件事:它告诉版本控制系统&#34;跟踪&#34;该文件,然后将整个文件复制到暂存区域。跟踪很棒,但副本只发生一次。

  

或者我的另一个假设是,我的细微更改,更改文件的哈希,以便git将其识别为要添加的新文件?

几乎。必须告诉Git跟踪文件。一旦跟踪,它将通过文件的散列/校验和注意到更改,但它不会自动添加这些更改。

这是一个例子。

$ echo 'Basset hounds got long ears' >> foo
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   bar
    new file:   baz
    new file:   foo

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   foo

请注意,foo都在暂存区域中,并且已经过修改&#34;没有为提交&#34;暂存。这是因为git addfoo复制到暂存区域,并且它不会自动复制新的更改。如果您git commit现在无法获得这些更改,则必须将它们添加到暂存区域。

$ git add foo
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   bar
    new file:   baz
    new file:   foo

这可能看起来很乏味,而且确实如此。在您跟踪文件后,您可以使用git commit -a提交所有更改。这将对所有跟踪文件进行所有更改。

暂存区域起初可能很烦人,但是一旦你学会了使用它,它就可以成为一个强大的工具,可以将大型提交分割成较小的提交。

让我们说你一直在工作,你发现你做了很多改变。单个提交太多了。也许你已经修复了一些文字拼写错误,修复了一些小错误,重命名了一个方法,并添加了一个功能。您可以使用暂存区域将其分成多个提交。

git add -p允许您按大块添加更改块。所以你可以只添加文档错字修复并提交它们。然后只是小错误修复并提交它们。然后添加方法重命名,并提交。最后,您只需将功能更改作为一个干净,易于理解的提交。