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

当我尝试执行基本的git add *.erb(或任何简单的通配符表达式)时,git无法识别它们(它们)。 附带说明一下,我之前从未做过此事,所以我确定这是一个菜鸟错误,但是我在其他SO职位或我学校的校友列表服务中找不到任何帮助,因此我认为此职位可能是合适的。

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

#   modified:   config/routes.rb
#   modified:   spec/models/question_spec.rb

我只想暂存路由文件,所以我尝试了git add * s.rb并且没有骰子。 我在应用程序的根目录中...是否需要在包含要将通配符表达式应用到的文件的目录中? 那会很痛苦,但是……实际上……它确实起作用了。

希望这不必是一个单独的文章,但是有没有一种更简单的方法可以在不需要cd进入特定目录的情况下使用通配符?

RudyOnRails asked 2020-06-27T15:31:35Z
3个解决方案
71 votes

用单引号引起来。 这应该工作。

git add

更新

经过更多测试后,我发现我什至可以不用引号括起git add。 这可能仅对我的git版本1.7.10.4(Mac OSX Lion,自制)有效。 我的解释是,如果Shell通配符扩展名与任何文件都不匹配,它将为git add提供原始的未扩展参数'* s.rb'。

sh-3.2$ git status
#
#   modified:   config/routes.rb
#   modified:   spec/models/products_spec.rb
#

现在我做没有引号的git add

sh-3.2$ git add *s.rb

出乎意料的是它有效!

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
#

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

sh-3.2$ git add *x.rb
fatal: pathspec '*x.rb' did not match any files
user673207 answered 2020-06-27T15:32:16Z
6 votes

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

find . -name "*.rb" | xargs git add

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

find . -name "*.rb" | grep -v "not_me.rb" | xargs git add

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

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

git add -u .

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

git add .
Michael Anderson answered 2020-06-27T15:32:54Z
0 votes

以我的经验(我可能缺少一个选项或某些东西),git add仅查看当前目录和子目录中的文件。 因此,如果要添加所有内容,请转至存储库的根目录。 尽管如果存储库确实很大,则可能要花一些时间,特别是如果您未通过-u标志。

Antimony answered 2020-06-27T15:33:14Z
translate from https://stackoverflow.com:/questions/12066184/git-add-using-wildcard-is-not-functioning-as-i-hoped-must-i-cd-into-specific