“git add”使用通配符不能正常工作,我希望 – 我必须cd到特定的目录?

当我尝试做一个基本的git add * .erb (或任何简单的通配符expression式)git不认识它(他们)。 作为一个侧面说明,我从来没有这样做过,所以我敢肯定,这是一个新手的错误,但我没有find其他SO职位或我校的校友名单服务没有帮助,所以我觉得这个职位可能是合适的。

对于(不同的)例子, git status给了我:

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

我只想登台路线文件,所以我尝试了git add * s.rb而不是骰子。 我在应用程序的根…我是否需要在包含文件的目录我试图应用通配符expression式? 这将是痛苦的,但是…实际上…它只是工作。

希望这不必是一个单独的post,但有没有更容易的方式来使用通配符,你不必cd到特定的目录?

把它放在单引号左右。 这应该工作。

git add '*s.rb'

UPDATE

经过更多的testing,我发现,我甚至可以做不带引号的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 # 

现在我做没有引号的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 

由于我的bash版本太旧,我无法获得recursion的function。 所以我做的是

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

作品,我可以添加其他filter,如果我需要 – 所以如果我想添加除了一个文件,我可以做到这一点。

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

还有其他一些可能有用的情况。

如果你只是想添加已经存在于你的回购的文件,你可以

 git add -u . 

如果你想添加每一件事情

 git add . 

根据我的经验(我可能会遗漏一个选项或其他东西),git只会查看当前目录和子目录中的文件。 所以,如果你想添加一切,去回购的根目录。 虽然如果回购真的很大,这可能需要一段时间,特别是如果你不通过-u标志。