はじめに
EclipseでGit(EGit)を使っているのですが、「変更なしを想定」と「アントラック」という操作があることに気が付きました。
名前からすると似たような操作に思えたのですが、どう違うのか調べてみました。
ざっくり結論
- ローカルだけで一時的に変更を無視したい→「変更なしを想定」
- リポジトリからそのファイルを外したい(でもローカルは残したい)→「アントラック」と.gitignoreの追記
基本の考え方
Gitにおけるファイルの基本的な状態は主に次の3つです。
- すでに管理している(tracked): Gitがバージョン管理しているファイル
- まだ管理していない(untracked): Gitがまだ一度もバージョン管理していないファイル
- 管理したくない(ignored): Gitがバージョン管理から明示的に除外しているファイル(.gitignoreで指定)
参考
「変更なしを想定」とは?
ファイルを右クリックして「チーム」→「拡張」→「変更なしを想定」をクリックすると、以下のコマンドと同じ操作が実行されます。
git update-index --assume-unchanged "ファイル名"
わかりやすく言うと
自分のパソコンだけに「このファイルは当分触らないよ」と教える設定です。
この操作をしたファイルは変更してもEclipseのGitステージングビューに表示されなくなり、見た目上は「変わってない」扱いになります。
こういう時に使う
- 設定ファイルをローカルでだけ変えて一時的に動かしたい場合
- ローカルだけライブラリを最新化したい場合
注意点
- あくまで自分のパソコンのローカル設定です。チームの他の人やリモートには影響ありません
- 長期間これを使うと、他の人の変更とぶつかる(マージで困る)ことがあります。短期間の一時的な利用が良いです
- 元に戻すには、ファイルを右クリックして「チーム」→「拡張」→「変更なしを想定しない」をクリックすると、再度変更検知の対象になります
参考
「アントラック」とは?
ファイルを右クリックして「チーム」→「拡張」→「アントラック」をクリックすると、以下のコマンドと同じ操作が実行されます。
git rm --cached "ファイル名"
わかりやすく言うと
リポジトリ(プロジェクトの管理対象)からそのファイルを外します。ただし、自分のパソコンのファイル自体は消えません。
つまり「すでに管理している(tracked)状態からまだ管理していない(untracked)状態に変更する」操作です。
コミットしてプッシュすると、そのファイルはリモートリポジトリから消えます。
こういう時に使う
- 誤ってプッシュしてしまったファイルを、リポジトリから外したいがローカルには残したい場合
注意点
- 「アントラック」したファイルはGitステージングビューの「ステージされていない変更」欄に表示されます
- 「ステージされていない変更」欄に表示したくない(=管理したくない(ignored)状態にしたい)場合は.gitignoreに記載が必要(参考URLを参照してください)
- 元に戻すには、ファイルを右クリックして「チーム」→「索引に追加」をクリックすると、再度リポジトリにファイルが入ります
参考
違いを比較
| 項目 | 変更なしを想定 | アントラック |
|---|---|---|
| 目的 | ローカルだけで一時的に変更を無視する | リポジトリからファイルを外す(ローカルは残る) |
| 実行コマンド | git update-index --assume-unchanged [ファイル名] | git rm --cached [ファイル名] |
| ローカルファイル | 残る | 残る |
| リモートリポジトリ(他の人)への影響 | なし | コミットしたらリモートから削除される |
| 元に戻す方法 | 「変更なしを想定しない」を実行 (--no-assume-unchanged) | 「索引に追加」を実行 (git add) |
まとめ
それぞれ用途が違うので、使い分けていこうと思います。
参考


