“git add * .js”没有在子目录中添加文件

时间:2012-08-15 19:46:21

标签: git github

试图提交一些更改。我使用git add添加了我可能使用通配符*.js创建的任何新javascript文件。然后我提交了更改并推送到github:

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

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

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

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

# 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 *.js时需要查看几个目录:

git add src/static/directory1/*.js

这似乎有效,因为在我再次提交之后文件就在那里然后推送到github:

git commit -m "stuff"
git push github master

这里发生了什么,为什么我必须在几个目录中导航才能使外卡工作?

谢谢!

3 个答案:

答案 0 :(得分:32)

您需要使用

git add '*.js'

你必须使用引号,所以git会在你的shell之前收到通配符。如果没有引号,shell将只在当前目录中进行通配符搜索。

答案 1 :(得分:12)

  

即使我刚刚使用通配符添加了它们:git add *.js

Shell通配符扩展递归到子目录中。在Git有机会看到它之前,通配符已经扩展。

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

答案 2 :(得分:8)

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

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

在没有exec的情况下运行它将为您提供正在处理的文件列表;所以,很容易根据自己的喜好调整这个命令。