"git add" 中的 . 和 * 有什么区别?

5
在使用git add命令时,我可以使用.*来添加工作目录中的所有文件。它们之间有什么区别?

2
如果你真的想看到不改变任何东西的差异,请尝试使用 git add -nv 进行干运行,并打开详细选项。 - legends2k
1个回答

6

这两个都不是 git 的概念:

. 是当前工作目录的表示。因此,如果您说,例如,git add .,您实际上的意思是“git,请将当前工作目录添加到我的当前更改的暂存区”。大多数其他命令以相同的方式处理 .cd . 不会使您移动到任何地方。

另一方面,* 是一个 shell glob。这个特定的 glob 被扩展为“所有文件”。因此,当您说 git add * 时,首先发生的是您的 shell(您正在输入命令的程序)将其扩展为当前位置中的每个文件和目录,然后 git 得到了列表。所以 git 命令根本看不到 * - 它只看到您想要在当前工作目录中 add 所有内容。

净效果基本相同:工作目录中的所有内容都被添加。但是它发生的方式完全不同。git add . 可能是您想要做的 - 它在幕后执行的操作更接近于您的意图。


如果你有大量的文件,使用“git add *”可能会导致问题。这可能会导致“*”扩展成一个非常大的字符串,而这个字符串的长度可能会超过命令行缓冲区的限制。因此,该命令可能会被截断(最有可能是截断文件名)。因此,如果你使用“*”,该命令可能会失败。 - Matthias J. Sax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接