Gitで既に管理されているファイルをローカルで無視する方法

git

Gitでファイルを管理しない方法としては.gitignore.git/info/excludeに記述する方法があります。
これらの方法はGitでまだ管理されていない(Untracked)ファイルに対して行うものです。

しかし、既にGitで管理されているファイルをローカルで修正しても無視してもらいたいときがないでしょうか?
例えば、アプリケーションの設定ファイルをローカル用に少しだけ変更するときなど、Gitの管理から除外したいですよね。

今回は既にGitで管理されているファイルをローカルで修正しても無視できるような設定と確認方法について説明します。

方法は2つあります。

  • git update-index –skip-worktree
  • git update-index –assume-unchanged

それぞれについて説明します。

git update-index –skip-worktree

まずはgit update-index --skip-worktreeについてです。

どんな時に使う?

--skip-worktreeはローカルでファイルが変更されるものに対して実行します。

つまり「Gitで管理されているファイルをローカルで修正した(もしくは自動で更新された)けど、その変更はGitで管理してもらいたくない」という場合に使います。

ローカルでの変更をGitで管理されないようにするものですので、基本的にこちらのコマンドを利用することが多いと思います。

Gitの管理から除外する

$ git update-index --skip-worktree path/to/file

確認方法

$ git ls-files -v | grep ^S
  • git ls-filesでgitで管理しているファイル全てが表示されます。
  • -vで無視されているファイルを確認します。
  • --skip-worktreeの場合はSで表示をされます。

Gitの管理下に戻す

$ git update-index --no-skip-worktree path/to/file

git update-index –assume-unchanged

次にgit update-index --assume-unchangedについてです。

どんな時に使う?

--assume-unchangedはローカルでファイルが変更されるべきではないものに対して実行します。

つまり「ローカルで変更する必要がない(変更するべきではない)ファイルを無視する」という場合に使います。

--assume-unchangedは管理が不必要なファイルを無視することでGitの動作を高速化したい場合などに利用されます。

また、ローカルの変更は無視するという考えなので、git reset --hardを実行するとローカルの変更データがなくなるので要注意です。

Gitの管理から除外する

$ git update-index --assume-unchanged path/to/file

確認方法

$ git ls-files -v | grep ^h
  • assume-unchangedhで表示されます。

Gitの管理下に戻す

$ git update-index --no-assume-unchanged path/to/file

さいごに

Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!

参考