.classpath
をGitで管理しつつ変更は無視したい
JavaのプロジェクトをEclipseで扱っていると、 .classpath
というファイルが生成されます。
これがないとEclipseがうまく起動できないので、Gitの管理下には入れたいです。
ただ、ビルドかなんかのタイミングで、この .classpath
の中身がコロコロ変わるんです。この変更をコミットしたくはないので、変更を無視する方法を調べました。
--skip-worktree
ならできる
後輩いわく「skip-worktreeでできますよ。それ」
ん?なにそれ?
update-index
に --skip-worktree
というオプションがあるみたいで、それなら「Gitで管理しつつ変更は無視」が可能みたいです。
--skip-worktree
については、こちらの記事がとても参考になりました。
既に git 管理しているファイルをあえて無視したい
今回の場合、以下のコマンドを叩けばよいです。
git update-index --skip-worktree .classpath
すごい!できた!後輩に感謝。
SourceTreeのカスタムアクションに登録してみる
コマンドだとすぐに忘れちゃうので、できればGUIで操作したい。
ということで、SourceTreeのカスタムアクション(独自スクリプト)に登録します。
カスタムアクションについては、こちらの記事がとても参考になりました。
SourceTreeのカスタムアクションでマージ済みのブランチを消す
.classpath
がGitの作業ディレクトリのrootにあるとは限らないので、こんな仕様を考えました。
-
.classpath
という名前のファイルをサブディレクトリからすべて検索する - 見つかったすべての
.classpath
に対し、--skip-worktree
を適用する
Macの場合
こんなスクリプトを作ってみました。
# !/bin/bash
find . -name .classpath | xargs -I % git update-index --skip-worktree %
find
で .classpath
を検索しています。
xargs
で見つかったすべての .classpath
に対し、 --skip-worktree
を適用します。
これをカスタムアクションに登録すればOKです。
もし、実行時に launch path not accesible
というエラーが表示された場合、以下のコマンドで実行権限を与えてください。
chmod u+x SkipClasspath.sh
Windowsの場合
こんなバッチを作ってみました。
set fileList=`dir /s /b .classpath`
for /F "usebackq delims=" %%g in (%fileList%) do (
git update-index --skip-worktree %%g
)
dir
で .classpath
を検索しています。
for
で見つかったすべての .classpath
に対し、 --skip-worktree
を適用します。
これをカスタムアクションに登録すればOKです。
さいごに
カスタムアクションに登録できました!GUIで操作できて便利です。