LoginSignup
7
5

More than 5 years have passed since last update.

.classpathをGitで管理しつつ変更は無視したい

Posted at

.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の場合

こんなスクリプトを作ってみました。

SkipClasspath.sh
#!/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の場合

こんなバッチを作ってみました。

SkipClasspath.bat
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で操作できて便利です。

7
5
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
7
5