Git 吉特元';不要添加某些glob
这件事让我抓狂。因此,在OSX上的git中,您可以添加如下文件: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
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'