Git 吉特元';不要添加某些glob

Git 吉特元';不要添加某些glob,git,bash,Git,Bash,这件事让我抓狂。因此,在OSX上的git中,您可以添加如下文件: git add *.java 它将添加所有扩展名为*.java的文件。对于.txt、json等也一样。但是,当我执行 git add *.xml 什么也没发生。它没有在我的gitignore中指定,所以git用一个git status将其报告为已更改,但我似乎无法使用globbing模式进行添加 我不是问如何按模式递归添加文件,git(或bash?)已经这样做了,正如我在第一个示例中所解释的 系统: OSX 10.10.5

这件事让我抓狂。因此,在OSX上的git中,您可以添加如下文件:

git add *.java
它将添加所有扩展名为*.java的文件。对于.txt、json等也一样。但是,当我执行

git add *.xml
什么也没发生。它没有在我的gitignore中指定,所以git用一个
git status
将其报告为已更改,但我似乎无法使用globbing模式进行添加

我不是问如何按模式递归添加文件,git(或bash?)已经这样做了,正如我在第一个示例中所解释的

系统:

  • OSX 10.10.5
  • GNUBash,版本3.2.57(1)-发布版(x86_64-apple-darwin14)
  • git版本2.3.8(苹果git-58)
它们是嵌套的,所以有些在根目录中,有些在子文件夹中,等等

git add*.xml
将只在当前目录中添加xml文件。Shell globbing不包括子目录。这是一个普通的外壳

如果您将文本glob传递给
git add
,它将递归地应用它

git add '*.xml'
这是git add的一项功能。如果你总的来说想要这样的东西,你可以

或者您可以使用
find
xargs

find . -name '*.xml' | xargs git add

引用glob,以便将其传递给git进行处理,而不是通过shell进行扩展

git add '*.xml'

ls*.xml
(或
dir*.xml
)是否显示所有文件?只需验证是否没有尾随字符(如空格或无法打印的字符)。是的,这与预期的效果相同。这是您试图添加到存储库根目录下的xml文件,或向下几个目录级别的xml文件?它可能位于全局忽略文件
git add-f*.xml
中。发生了什么事?啊,我认为这与壳牌的扩张有关。谢谢但是你知道为什么它(递归地,甚至)对*.java(不带引号)@BrDaHa有效吗?如果当前目录中没有
.java
文件,shell将把
*.java
传递给
git add
,就像编写
git add'*.java'
一样。这假设您没有设置
nullglob
,在这种情况下,
git add
将不会得到任何参数。太好了,谢谢@Schwern!您不必使用
globstar
指定两次模式:
git add**/*.xml
就足够了……
find
本身包含循环:
find-名称'*.xml'-exec git add{}\+
,另外,请不要像这样使用
xargs
find
has
-exec
来避免类似这样的(坏的)诡计:
find-名称'*.xml'-exec git add{}+
。顺便说一句,这两者有着微妙的区别:
find
将查找隐藏文件,但shell glob不会,除非设置了
shopt-s dotglob
。另外,使用
find
,您可以(也可能应该)指定
-type f
;使用shell globs,您无法避免目录被全局化。事实上,仔细想想:
find
将在
.git/
文件夹中递归(除非您告诉他不要这样做,这会变得更棘手)…这是最好的选择,真的,就是让git用git add'*.xml'@gniourf\u gniourf你说得对,我用的是旧版本的bash。至于
find
进入
.git
目录,你是对的,但它基本上是无害的。
git add '*.xml'