gpt4 book ai didi

regex - 使用两个星号在git中添加一个文件

转载 作者:IT王子 更新时间:2023-10-29 01:01:58 28 4
gpt4 key购买 nike

我想添加一个具有唯一文件名但前面有很长路径的文件(例如 a/b/c/d/filename.java)。通常我会通过做将其添加到我的存储库中

git add *filename.java.

但是我以前也这样做过:

git add a/b/c/d/filename*

所以我尝试将两者结合起来:

git add *filename*

但这做了一些奇怪的事情。它添加每个未跟踪的文件。我可以看到失败的可能原因,但它们都应该出现在前两个命令之一中,所以我不知道为什么会这样。

我的问题不是关于如何仅使用文件名将文件添加到 git 存储库(尽管这很有用)。我的问题是我对 * 操作的误解是什么让我认为上面的操作应该有效。

信息:

我正在使用 Git Bash for Windows , 这是基于 minGW .

最佳答案

您正在查看 globs(不是正则表达式,它们是一种不同的模式匹配语言),它们由您的 shell 而不是 git 扩展。

如果您想查看它们将如何匹配,只需将相同的 glob 传递给另一个命令,例如。

$ ls -d *filename.java

对比

$ ls -d *filename*

(我刚刚添加了 -d 所以 ls 不显示任何匹配目录的内容)


由于您使用的是 git bash,并且 glob 扩展的行为可能与常规 shell 不同,请尝试

$ git add --dry-run --verbose -- *filename*

例如:这应该向您展示它是如何真正扩展 glob 的,以及它产生的影响。

请注意 -- ... 如果您使用的 glob可能 匹配具有前导 - 的文件名,重要的是确保 git 知道它是一个文件名而不是一个选项。

不幸的是,这只会向您显示既匹配 glob,又在索引和工作副本之间存在一些差异的文件。


作者的回答:试运行很有帮助,这是我的发现:

我忘记了我没有添加的 bin 文件夹,所以当我执行空运行时我意识到它找到了两个匹配项:filename.java 和 filename.class。当我将 glob 更改为 *filename.j* 时,它起作用了。

我的下一步是删除 .class 并再次尝试该命令:成功了!仍然无法解释为什么 git bash 在找到两个匹配项时添加了所有内容...因为空运行的行为与实际运行不同我认为一定有错误,但我认为讨论将在其他地方进行(除非有人认为它不是错误)。

关于regex - 使用两个星号在git中添加一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11968747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com