使用git和像Vim或textmate这样的编辑器时,一次编辑冲突文件的最简单方法是什么?

时间:2010-07-04 07:49:26

标签: git editor conflict

我正在尝试调整一下

当我在命令行输入git status时,我得到一个需要解析的文件列表,如下所示:

# Unmerged paths: #
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add <file>..." to mark resolution)
#
#   both modified:      apache2/templates/default/apache2.conf.erb
#   both modified:      bootstrap/attributes/default.rb
#   both modified:      iptables/metadata.rb
#   both modified:      kickstart/templates/default/ks.cfg.erb
#   both modified:      openssl/metadata.json
#   both modified:      postfix/metadata.json
#   both modified:      postfix/templates/default/main.cf.erb

是否有一种简单的方法可以将此文件路径列表传递到文本编辑器中,以便您可以一次编辑它们?

我可以通过简单地通过grep:

进行管道来达到这个目的
[17:37]:git status | grep "both modified"
#   both modified:      apache2/templates/default/apache2.conf.erb
#   both modified:      bootstrap/attributes/default.rb
#   both modified:      iptables/metadata.rb
#   both modified:      kickstart/templates/default/ks.cfg.erb
#   both modified:      openssl/metadata.json
#   both modified:      postfix/metadata.json
#   both modified:      postfix/templates/default/main.cf.erb

但是我不确定如何使用shell命令返回它,或者是否最简单的方法是放入ruby或python,通过正则表达式传递每一行,以过滤掉# both modified:

我想要的最终结果是这样的:

vim #{space_separated_list_of_files}

你们会怎么做?

3 个答案:

答案 0 :(得分:11)

以下是我在gitconfig中的一对别名,取自git wiki

edit-unmerged = \
    "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; vim `f`"
add-unmerged = \
    "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; git add `f`"

应该做你想做的事!

答案 1 :(得分:2)

我能想到的最短:

vim `git status|grep 'both modified'|cut -d: -f2`

答案 2 :(得分:2)

你知道git mergetool命令吗?这并不是一次性打开所有文件,而是迭代所有需要的文件,这可能只是你需要的。你甚至可以使用vim进行合并

  

git mergetool --tool = vimdiff