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

Chr*_*ams 8 git conflict editor

我试着调整一下

当我在命令行输入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
Run Code Online (Sandbox Code Playgroud)

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

我可以通过简单地通过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
Run Code Online (Sandbox Code Playgroud)

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

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

vim #{space_separated_list_of_files}
Run Code Online (Sandbox Code Playgroud)

你们这样做怎么样?

Cas*_*bel 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`"
Run Code Online (Sandbox Code Playgroud)

应该做你想要的!

  • 我认为这真的很有帮助而且很棒。但是,它不能正确处理空格。这是我(最终)提出的一个版本,它不会因遇到名称中带有空格的文件而中断:`!f() { git ls-files --unmerged | 切-f2 | 排序 -u | sed -r 's/ /\\\\ /g' ; }; f | xargs vim` (2认同)