开发者

What's the simplest way to edit conflicted files in one go when using git and an editor like Vim or textmate?

开发者 https://www.devze.com 2023-01-05 11:25 出处:网络
I\'m trying to tweak a little When I type in git status on the commandline,开发者_开发百科 I get a list of files that need to be resolved like so:

I'm trying to tweak a little

When I type in git status on the commandline,开发者_开发百科 I get a list of files that need to be resolved like so:

# 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

Is there a simple way to pass this list of file paths into a text editor, so you can edit them all in one go?

I can get to this for example, by simply piping it through 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

But I'm not sure how to return this using just shell commands, or whether it's simplest to drop into ruby or python, to pass each line through a regexp, to filter out the # both modified:.

The end result I want is something like this:

vim #{space_separated_list_of_files}

How would you guys do this?


Here are a pair of aliases I have in my gitconfig, taken from the 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`"

Should do what you want!


Shortest I can think of:

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


Are you aware of the git mergetool command ? That doesn't open all the files in one go, but iterate on all needed files, which might be only what you need. You can even use vim to do the merge

git mergetool --tool=vimdiff

0

精彩评论

暂无评论...
验证码 换一张
取 消