【Git】gitでファイルを置いておきたいが、変更は無視して欲しい時の対応

git

こんにちは、しきゆらです。
今回は、タイトルの通りGitにファイルを置いておきたいが、そのファイルの変更自体は管理しなくてよい場合にどうすればいいかをメモしておきます。

どんな状況か

そもそも、なんでこんなことが必要になったのかを簡単に書いておきます。
状況としては、Jiraにある未完了チケットを取得し、特定のものをチャットに飛ばす、というスクリプトを作っていました。
この時、前回実行時に取得したチケットのIDを保持するようにしていました。
これは、定期実行で動かしていて、最初に実行したときに未完了のものが、次に実行したときも未完了なチケットが通知されないようにするためのものです。
(そもそも、このチケットIDを記録するファイルは、もしかしたらGitに置いておかなくてもよいかもしれません)

さて、このような状態でチケットIDを記録していたファイルは、そこに存在してくれていればOKであり
ファイルの中身が実行されるたびにgitの変更差分として出てきてしまいます。
これは鬱陶しいですよね。
これを回避する方法をメモしておきます。

対応策

調べてみると、Gitさんは管理下にあるファイルの更新を無視するような設定をいくつか用意してくれていました。
ドキュメント:Git – git-update-index Documentation | https://git-scm.com/docs/git-update-index

assume-unchangedskip-worktreeというものが、この状況に使えそうなものです。
それぞれの違いとしては、正確にはドキュメントを参照してほしいのですが、印象としては以下のように感じました。

  • assume-unchanged
    • マージ、リセット等するとき、リポジトリの状態が正
  • skip-worktree
    • マージ、リセット等するとき、手元の状態が正

今回の状況的には、リポジトリにおいてある内容に特に重要な意味はなく、手元の環境でIDがガシガシ更新されているので
手元の状態を保持してくれるskip-worktreeを設定しました。
git update-index --skip-worktree ファイル名

これにて、手元にあるファイルの更新をGit側で無視しつつ、マージ等で変更がある場合に上書きされないようにできました。
解決です。

検索時のメモ

今回、このような状況で検索するときになんというキーワードで検索すれば出てくるのかわかりませんでした。
そこで、適当に英単語を並べていく作戦をとってみました。
gitkeepで空フォルダをGitの配下にすることを知っていたので、「gitkeep file」とキーワードを検索欄に入力してみました。
すると、「gitkeep file but ignore changes」とサジェストしてくれました。
まさにほしい情報はこれです。
さすがはグーグル先生、感謝です。

何が言いたいかというと、ほしい状況は分かっているが、それをどう探せばいいかわからないとき
それっぽい単語をGoogle先生の検索欄に並べると、もしかしたらサジェストしてくれるかもしれません。
困ったときは、それっぽい単語をGoogle先生に並べてみましょう。

 

まとめ

今回は、Git管理下にあるファイルの変更を無視する方法をメモしました。
やはりというかなんというか、Gitさんはきちんとこういう状況の設定も用意してくれていました。

今回は、ここまで。
おしまい

git

Posted by shikiyura