概要
普段チームでゲーム開発をしていると「この行はデバッグ用だから後で消そう」と思っていてもつい忘れてしまうことがありました。そこで、あらかじめ無視したい行には「gitignoreline」という文字列を入力しておき、Gitを利用してコミット(正しくはステージ)する際に、自動的にその行のコードを無視してくれる機能を作成しました。
応用すれば書き換えたりすることも可能です。
2023/12/18 追記
該当の行を削除してステージしますがローカル上にはその行は残ります。
そのため本文も削除ではなく無視と表現するよう変更しました。
目的
無視は.gitignoreファイルに記述すればできますがファイルごとの操作になります。ですが、やりたい事はファイルの中の任意の記述がある行のみを無視することです。
今回は例として「gitignoreline」とコメントで記述されている行を削除して実質的に無視するようにします。
gitのFilter
という機能を使います
具体的には、これが
Debug.Log("この行は削除したくない");
Debug.Log("この行は削除してほしい"); // gitignoreline
コミットするときにはこうなるようにしていきます。
Debug.Log("この行は削除したくない");
この記事を参考にWindows環境で、Unityでゲーム開発することを前提に解説していきます。
1 フィルタの作成
まずは.gitconfigにフィルタを定義します。
C:\Users\<ユーザー名>\.gitconfig
を開いて以下の内容を追記してください。
[filter "ignoreline"]
smudge = cat
clean = sed -e '/.*(?i)gitignoreline/d'
解説
ここではignoreline
というフィルタを定義しました。
この名前は自由に設定できます。
smudge
はcheckoutするとき、clean
はステージするときにフィルタを適用します。
今回はcheckoutするときは何もせず、ステージするときにはsed -e '/.*(?i)gitignoreline/d'
というフィルタを適用します。
このsed -e '/.*(?i)gitignoreline/d'
とは「gitignoreline」という文字列が見つかればその行を削除するというものです。
gitignorelineの部分は自由に変更できますが他の単語に含まれない文字にしてください。
あまり短い単語にすると文字列が被っていつの間にか必要なコードが消えてるなんてことが起こる可能性があります。
もっと高精度の正規表現を使用して回避するのもいいでしょう。
2 .gitattributesの追加
次に、gitのルートディレクトリ(<project root>/
)に.gitattributes
を作成してください。
作成したら.gitattributes
を開いて以下の内容を入力してください。
*.cs filter=ignoreline
解説
*.cs
はC#で書かれた全てのファイル(hoge.csなど)を対象にするという意味です。
filter=ignoreline
はignoreline
という名前のフィルターを適用するという意味です。
つまり、C#で書かれたファイルがあったらignoreline
というフィルターを適用してくださいという意味です。
これで設定が完了しました
使い方
コード内の消したい行でコメントで「gitignoreline」と記述するだけです。
Debug.Log("この行は削除したくない");
Debug.Log("この行は削除してほしい"); // gitignoreline
この状態でコミットすると以下のように「gitignoreline」と書いてある行のみ削除されます。
Debug.Log("この行は削除したくない");
- Debug.Log("この行は削除してほしい"); // gitignoreline
まとめ
このように案外簡単に実装することができました。
さらに応用すればDebug.Log
は全てコメント化するなんてことも可能だと思います。
チーム内の管理が楽になると思うので是非やってみてください。