使用通配符的"git add"无法正常运行 - 我必须进入特定目录吗?

Rud*_*ils 48 git bash wildcard

当我尝试做一个基本的git add*.erb(或任何简单的通配符表达式)时,git无法识别它们(它们).作为旁注,我之前从未这样做过,所以我确定这是一个新手的错误,但我在其他SO帖子或我校的校友列表服务中找不到任何帮助,所以我觉得这篇文章可能是合适的.

对于(一个不同的)示例,git status给了我:

#   modified:   config/routes.rb
#   modified:   spec/models/question_spec.rb
Run Code Online (Sandbox Code Playgroud)

我想只播放路由文件,所以我尝试了git add*s.rb而没有骰子.我在应用程序的根目录中...我是否需要位于包含我正在尝试应用通配符表达式的文件的目录中?那会很痛苦,但......实际上......它只是奏效了.

希望这不一定是一个单独的帖子,但有没有更简单的方法来使用通配符,你不必cd进入特定的目录?

use*_*207 73

把它放在单引号上.这应该工作.

git add '*s.rb'

UPDATE

经过更多的测试,我发现我甚至可以git add *s.rb不用引号.这可能适用于我的git版本1.7.10.4(Mac OSX Lion,自制软件).我的解释是,如果shell通配符扩展与任何文件都不匹配,它会提供原始的未扩展参数'*s.rb' git add.

sh-3.2$ git status
#
#   modified:   config/routes.rb
#   modified:   spec/models/products_spec.rb
#
Run Code Online (Sandbox Code Playgroud)

现在我git add没有引号.

sh-3.2$ git add *s.rb
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是它有效!

sh-3.2$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   config/routes.rb
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   spec/models/products_spec.rb
#
Run Code Online (Sandbox Code Playgroud)

如果通配符模式与任何文件都不匹配,git将发出此错误.

sh-3.2$ git add *x.rb
fatal: pathspec '*x.rb' did not match any files
Run Code Online (Sandbox Code Playgroud)

  • 添加到你的答案:这是因为你的shell在执行git命令之前扩展了通配符.如果您输入单引号,则会阻止shell扩展通配符. (8认同)

Mic*_*son 6

由于我的bash版本太旧,我无法获得递归glob来为我工作。所以我要做的是

find . -name "*.rb" | xargs git add
Run Code Online (Sandbox Code Playgroud)

工作正常,我可以在需要的地方添加其他过滤器-因此,如果我想添加除一个文件以外的所有文件,则可以执行此操作。

find . -name "*.rb" | grep -v "not_me.rb" | xargs git add
Run Code Online (Sandbox Code Playgroud)

还有其他两种情况可能会有用。

如果您只想添加存储库中已经存在的文件,则可以

git add -u .
Run Code Online (Sandbox Code Playgroud)

如果您想添加所有东西,那么

git add .
Run Code Online (Sandbox Code Playgroud)


Ant*_*ony 1

根据我的经验(我可能缺少一个选项或其他东西), git add 只查看当前目录和子目录中的文件。因此,如果您想添加所有内容,请转到存储库的根目录。不过,如果存储库真的很大,这可能需要一段时间,特别是如果您不传递 -u 标志。