2012-08-15 125 views
9

正试图提交一些更改。我用git add添加了我可能使用通配符*.js创建的任何新JavaScript文件。然后我承诺更改并推送到github:“git add * .js”未添加子目录中的文件

 
git add *.js 
git commit -m "stuff" 
git push github master 

当我检查github时,我所编辑的所有文件都是空白的。他们在那里,只是空着。

然后我试图再次提交,但GIT说,一切都是最新的。

然后我回去注意到,在我做了git commit -m "stuff"之后,GIT显示了一条消息,说我的一堆“.js”文件没有上演,即使我刚刚使用通配符添加它们:git add *.js。这是我尝试提交时显示的消息。

 
# On branch master 
# Changes not staged for commit: 
# (use "git add/rm ..." to update what will be committed) 
# (use "git checkout -- ..." to discard changes in working directory) 
# 
#  modified: src/static/directory1/js/module1/file1.js 
#  modified: src/static/directory1/js/module1/file2.js 
#  modified: src/static/directory1/js/module2/file1.js 

为了解决这个问题,我不得不走下来几个目录做时,我的git add

 
git add src/static/directory1/*.js 

这似乎工作,因为这些文件都在那里后,我再次承诺,然后推到github:

 
git commit -m "stuff" 
git push github master 

这是怎么回事,为什么我必须导航几个目录才能使通配符工作?

谢谢!

回答

8

另一种方法是使用find命令:

find . -name '*js' -exec git add {} \; 

运行,如果没有EXEC会给你,你正在处理的文件列表;所以,很容易根据你的喜好调整这个命令。

+0

这实际上是唯一能在我的机器上运行的东西,非常感谢! – 2012-08-17 00:43:00

30

您需要使用

git add '*.js' 

你有这么混帐收到您的外壳程序之前,通配符使用引号。如果你没有引号,shell只会在当前目录中进行通配符搜索。

+0

我似乎无法找到任何证据表明Git将递归到子目录中时给出通配符(我试过了)。 – 2012-08-15 19:55:24

+2

http://try.github.com/levels/1/challenges/7 – 2012-08-15 19:55:36

+0

好吧,它似乎在那里工作,但不是在我的本地机器上。这可能是Git最近添加的功能吗? – 2012-08-15 19:57:18

12

即使我刚刚加入他们使用通配符:git add *.js

壳牌通配符扩展确实递归到子目录。 Git有机会看到它之前扩展通配符。

如果您使用的是git add '*.js',那么Git将会看到通配符,并将匹配所有以.js结尾的路径名。由于*处于初始位置,因此最终将递归添加包括子目录中的所有.js文件。

+1

请不要偷我的答案。 :-)我试图获得积分,并且在我们讨论了我的答案30分钟后,我将答案添加到了您的答案中。 – 2012-08-15 20:45:20

+0

@AaronGray:不用担心,一旦我了解了发生了什么事情,以及为什么发挥作用,我也赞同你的回答。 – 2012-08-15 20:46:27