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