Какой самый простой способ редактировать конфликтующие файлы за один раз, используя git и такой редактор, как Vim или textmate? - PullRequest
8 голосов
/ 04 июля 2010

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

Когда я набираю 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

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

Конечный результат, который я хочу, выглядит примерно так:

vim #{space_separated_list_of_files}

Как бы вы, ребята, сделали это?

Ответы [ 3 ]

11 голосов
/ 04 июля 2010

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

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

2 голосов
/ 04 июля 2010

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

git mergetool --tool = vimdiff

2 голосов
/ 04 июля 2010

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

vim `git status|grep 'both modified'|cut -d: -f2`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...