【Git】特定のフォルダやファイルを追跡対象外にする方法

Git

よく忘れるのでメモ。

プロジェクトのベース(リモート)リポジトリからローカルにクローンしてきて、Gitの管理配下には置いておきたいけど、ローカル用に修正して、ベース(リモート)リポジトリには反映させたくない場合の手段のメモです。

Laravelでは.envに認証設定とかSMTPの接続設定を書いたりすると思いますが、普通はGitの管理対象外になっていますよね。

そうではない場合、config/database.php や config/mail.php なんかに記述されていて、ひどい時には個別の処理ロジック側に直書きなんてケースもあります。

下手にいじって動かなくなるのは避けたいので、Git管理下には置いておきますが、ローカルでは修正しないといけないケースがあります。かといって、.gitignoreに追記したり、そのままpushするとベースリポジトリ側に反映されて皆が影響受けるので、それは避けたいです。

なので、.gitignoreに追記することなく、Git管理下のファイルを修正するけど、追跡しないでねという設定を施します。

考えられる手段

1.「変更は見なかったことにして」とGitに指示する

 ⇒ git update-index –assume-unchanged [FILE_PATH]

2.「worktreeから除外してね」とGitに指示する

 ⇒ git update-index –skip-worktree [FILE_PATH]

挙動と用途の違いは次の記事の「2. 比較表」が参考になると思います。

用途別に使い分け方をまとめると次のような感じですかね。

▼リモートの変更は受け入れる:ビルド成果物、一時ファイル、設定直書きのロジック等

 ⇒ assume-unchanged

 ※設定直書きのロジックは上書きされるので(そんな作りが悪いのだけど)、pullで上書きされたファイルの一覧をチェックして、後で設定修正が必要。

▼リモートの変更は取り込まない:設定ファイル

 ⇒ skip-worktree

 ※リモートの変更は一切反映されないので、それはそれで要注意。

もちろん、上記のどちらも、リストを出すこともできるし、追跡対象に戻すこともできます。

assume-unchangedの使い方

▼単一ファイルを追跡対象外にする

git update-index --assume-unchanged FILE_PATH

▼フォルダ配下の全ファイルを追跡対象外にする

find FOLDER_PATH/ -type f -exec git update-index --assume-unchanged {} \;

▼assume-unchanged の対象一覧抽出

git ls-files -v | grep '^h'

▼単一ファイルを追跡対象に戻す

git update-index --no-assume-unchanged FILE_PATH

▼フォルダ配下の全ファイルを追跡対象に戻す

find FOLDER_PATH/ -type f -exec git update-index --no-assume-unchanged {} \;

skip-worktreeの使い方

▼単一ファイルを追跡対象外にする

git update-index --skip-worktree FILE_PATH

▼フォルダ内のファイルをまとめて追跡対象外にする

find FOLDER_PATH/ -type f -exec git update-index --skip-worktree {} \;

▼skip-worktree の対象一覧抽出

git ls-files -v | grep '^S'

▼単一ファイルを追跡対象に戻す

git update-index --no-skip-worktree FILE_PATH

▼フォルダ内のファイルをまとめて追跡対象に戻す

find FOLDER_PATH/ -type f -exec git update-index --no-skip-worktree {} \;

  • 0
  • 0
  • 0
  • 0

コメント

タイトルとURLをコピーしました