“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标志。