2012年11月4日日曜日

Gitでコンフリクトしたファイルを素早く開きたい

gitでコンフリクトするとこんな風にboth modifiedって出てきますよね.

% git status
# Not currently on any branch.
# Unmerged paths:
#   (use "git reset HEAD ..." to unstage)
#   (use "git add/rm ..." as appropriate to mark resolution)
#
#       both modified:      file1
#       both modified:      file2
#
no changes added to commit (use "git add" and/or "git commit -a")

この場合,file1とfile2を開きたいです.
ファイル名をコピペしたり,一個一個開いていくのは面倒なので,一発で開けるようにしました.




僕はファイル名をbothlist.pyにしています.これに実行権限をつけて,シンボリックリンクをパスの通ったディレクトリから張っています.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import popen2
import re

def extractBothModifiedFileName():
    r, w, e = popen2.popen3('git status')
    for line in r:
        if not line.find('both modified:') is -1:
            yield re.split('[\t ]*', line.strip())[-1]
    r.close()
    w.close()
    e.close()

if __name__ == '__main__':
    print(' '.join(extractBothModifiedFileName()))

Gist

このように使います.
% bothlist | xargs emacsclient

Pythonで書きましたが,Unixのコマンドを組みわせても達成できます.
Zshのコマンドとして呼び出せるようにしました.
.zshrcに以下を加えてください.
gbmec() {
  git status | awk '/both modified:/{print $4}' | xargs emacsclient
}
Gist

加えた後に
% source .zshrc
を行えばgbmecコマンドが使用可能になります.

両コマンドとも,emacsclientの部分は好きなエディタに変更してください.

この状態で,bothlist | xargs emacsclient,もしくはgbmecを実行すると
こうなります.

0 件のコメント:

コメントを投稿