11

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

混帐添加 *.js
git commit -m "东西"
git push github 大师

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

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

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

# 在分支master上
# 未为提交暂存的更改:
# (使用 "git add/rm ..." 更新将要提交的内容)
# (使用 "git checkout -- ..." 丢弃工作目录中的更改)
#
# 修改:src/static/directory1/js/module1/file1.js
# 修改:src/static/directory1/js/module1/file2.js
# 修改:src/static/directory1/js/module2/file1.js

为了解决这个问题,我在执行以下操作时必须查看几个目录git add

git add src/static/directory1/*.js

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

git commit -m "东西"
git push github 大师

这里发生了什么,为什么我必须向下导航几个目录才能让通配符起作用?

谢谢!

4

3 回答 3

34

你需要使用

git add '*.js'

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

于 2012-08-15T19:51:53.467 回答
16

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

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

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

于 2012-08-15T19:52:01.313 回答
8

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

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

在没有 exec 的情况下运行它会给你正在处理的文件列表;因此,很容易根据自己的喜好调整此命令。

于 2012-08-16T04:33:33.180 回答