为什么不“git add *”在根目录中添加文件?

时间:2014-01-25 19:31:13

标签: macos git bash

编辑:执行以下步骤实际上会重现该行为。是的,该文件名为stuff.txt,并且不以文件名中的.开头。当我echo *时,确实会打印stuff.txt

命令git add *通常类似于git add .,但有一个主要的例外:git add *不会在Git存储库的根目录中添加文件。它不会添加新文件(??)或修改现有文件(M)。以下是重现所需的步骤:

mac$ mkdir myrepo
mac$ cd myrepo
mac$ git init
mac$ touch stuff.txt
mac$ git add *
fatal: no files added

mac$ git status -s
?? stuff.txt
# It looks like 'git add *' totally dropped the ball.

mac$ git add .
# Nothing prints. Success?
mac$ git status -s
A  stuff.txt
# Yes, success.

知道问题是什么吗?只要添加或修改的文件位于子目录(例如git add *)中,myrepo/mydir/就可以正常工作。该问题仅发生在存储库顶层的文件中。

我的设置:
Mac OS X 10.9.1小牛队
Git版本1.8.3.4(Apple Git-47)
我通过安装Apple Xcode获得了那个版本的Git。
Apple终端版本2.4(326)

我应该指出,我纯粹是出于好奇而要求。使用git add .是一种100%令人满意的解决方法。

1 个答案:

答案 0 :(得分:1)

正如Mat的评论所暗示的那样,*与以.开头的任何内容都不匹配。这就是shell的工作方式(与git无关)。您可以通过在shell中运行echo *来对此进行测试。

要匹配dotfiles,您必须使用.[!.]*。 (使用echo .[!.]*对其进行测试。)简单地使用.*也会匹配...,而您git add则不想这样做。