Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
44
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

SourceTreeでコミット間の差分ファイル一覧をテキストファイルに出力する方法

SourceTreeの「カスタムアクション」を使って、コミットの履歴から差分ファイルを抽出する方法は、以下のエントリーで紹介しました。

ただし、納品ファイルとして提出する際には、同時に差分のファイルリストを求められるケースも多いでしょう。

そこで、今回は同様にSourceTreeの「カスタムアクション」を使って、変更した差分ファイルの一覧を作成する方法を紹介します。
(下記の説明はMac OS 10.10.4での操作を前提としています)

バッチファイルの作成

差分を表示するには git diff コマンドを使いますが、以下のように --name-status オプションを付けると、変更されたファイルの名前とステータスだけを抽出することができます。

さらに、 > に続けてファイル名を指定することで、コマンドの表示結果をテキストファイルなどに書き出して保存することができます。

list_diff.sh
#!/bin/sh
git diff --stat --name-status $2 $1 > filelist.txt

カスタムアクションの登録

上記テキストファイルを list_diff.sh 等のファイル名で保存し、「指定された差分でファイルリスト作成」という名前でカスタムアクションとして登録しました。
(パラメータには $SHA を入力)

また、作成したシェルスクリプトに実行権限を追加しないと、カスタムアクションの実行時に「launch path not accessible」というエラーが発生してしまうので、ターミナルから以下のコマンドを実行しておきます。

chmod +x list_diff.sh

カスタムアクションの実行

SourceTreeの「ログ表示」画面で、Commandキーを押しながら2つのリビジョンを選択し、右クリックから「カスタムアクション」→「指定された差分でファイルリスト作成」を実行します。

すると、プロジェクトのルートディレクトリに filelist.txt というファイルが作成され、変更されたファイル名とステータスの一覧が書き出されます。

ファイルリストの加工・編集

filelist.txt に保存されたファイルリストの形式は、以下のような形になります。

filelist.txt
M   common/img/img01.jpg
A   img/banner_a.png
D   index.html

M=変更ファイル、A=追加ファイル、D=削除ファイル、と覚えておけばいいでしょう。

このままだと、さすがにちょっと味気ないので、EXCELやCSVに加工して適宜編集して使用します。

置換やソート機能を使って加工すれば、好みに合わせて見やすいリストを作成できると思います。

git diff コマンドで書き出したファイルリストは、タブ区切りテキストになっているので、EXCEL等にコピー&ペーストする分にも問題ありません。

応用

こちらのカスタムアクションも、シェルスクリプトを書き換えることで様々な応用が可能です。

前回と同じように、gitの管理下にならない上階層にフォルダを作って、その都度日付名を付けてリストを保存するようにしたサンプルは以下になります。

他にもシェルスクリプトを使えば、プロジェクトごとにフォルダやファイル名を振り分けることなども可能なので、ニーズに応じて色々とアレンジしてみてください。

一階層上の/archive/ディレクトリに日付名でファイルリストを作って書き出す場合

list_diff2.sh
#!/bin/sh
today=`date +"%Y%m%d"`
git diff --stat --name-status $2 $1 > ../archive/$today.txt
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
44
Help us understand the problem. What are the problem?