よく忘れるのでメモ。
プロジェクトのベース(リモート)リポジトリからローカルにクローンしてきて、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


コメント