Каков самый простой способ редактирования конфликтных файлов за один раз при использовании git и редактора, такого как Vim или textmate?

Я пытаюсь настроить немного

когда я набираю статус git в командной строке, я получаю список файлов, которые должны быть разрешены следующим образом:

# 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

но я не уверен, как вернуть это, используя только команды оболочки, или это проще всего перейдите в ruby или python, чтобы передать каждую строку через регулярное выражение, чтобы отфильтровать # both modified:.

конечный результат, который я хочу, что-то вроде этого:

vim #{space_separated_list_of_files}

как вы это делаете?

3 ответов


вот пара псевдонимов, которые у меня есть в моем 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`"

должны делать то, что вы хотите!


самое короткое, что я могу придумать:

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

знаете ли вы о команде git mergetool ? Это не открывает все файлы за один раз, но повторяет все необходимые файлы, которые могут быть только тем, что вам нужно. Вы даже можете использовать vim для слияния

git mergetool --tool=vimdiff