LoginSignup
1
1

More than 5 years have passed since last update.

gitのmerge commitから、automergeが発生しているファイル一覧を出力

Last updated at Posted at 2013-04-18

改良版を作成しました。 2013/05/12


mergeの時にautomergeが発生してたら知りたいよねー と思って一発で出すコマンドを探していたんですが見つけられませんでした。

gitの標準機能に有りそうな気はしたけど、gitのサブコマンドを作ってみたかったというのもあって、シェルスクリプトで書いてみました。

変数をうまく利用すればファイルに出力しないでもいけそうでしたが、ちょっとその辺なれてないので、~/tmp/ に何回か書き込んでます。

引数なし、または、コミットのハッシュ値か HEAD ORIG_HEAD 等の入力を一つ受け付けます。

・・・それ以外の引数が入ってきた時の動作は気にしてません(`・ω・´)

git-automerged
#! /bin/bash
#引数としてコミットの ハッシュ HEAD HEAD^ 等のmergeコミットを一つ入力
#automergeが起きたファイルを全て表示

#入力されたコミットの親の数を確認
PearentNum=$(echo $(git log $1 -1 --pretty=format:"%P" | wc -w))

#mergedファイルの初期化
echo -n "" > ~/tmp/merged

#merge commitかチェック
if [ $PearentNum -gt 1 ] ; then
    #親が2以上(merge commitの場合)
    #入力されたコミットとその親との差分が存在するファイル名からmergeが行われたファイルを列挙

    #親の数だけループ
    i=1
    for Pearent in $(git log $1 -1 --pretty=format:"%P")
    do
        #一応親のハッシュを出力しておく
        echo "Pearent $i : $Pearent"
        git diff --name-only $1 $Pearent >> ~/tmp/merged
        i=$(expr $i + 1)
    done

    #mergeされたファイルのソート
    sort ~/tmp/merged > ~/tmp/merged-sorted

    #重複しているファイルの出力
    uniq ~/tmp/merged-sorted --repeated > ~/tmp/automerged
    cat ~/tmp/automerged

else
    #親が2以上いないなら処理を終了
    echo "$1 is not MergeCommit"
fi

パスが通った場所において、こんなかんじでコマンドを打つと

$ git automerged HEAD
Pearent 1 : fb484c0d2939be2830efa24aff3de67c0ee5aff8
Pearent 2 : 77dbb4993c5ec6302426f7fe28d11763fdfe61ea
ますたー.txt

こんなかんじでautomergeが発生したファイルを出力します。(~/tmp/automerged にはファイル名の一覧のみのファイルが出力されてます)

書いている途中で、
いや、やっぱこの機能は標準であるでしょ?
という気はしましたが、とりあえずgitのサブコマンドを作ってみたかったということもあったので突っ走りました。

こう書いたほうがいいよ とか 標準機能であるよ とかありましたらぜひ教えて下さい
(´・ω・`)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1