2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

gitでコミットする時に行ごとに無視(削除)できるようにする

Last updated at Posted at 2023-11-21

概要

普段チームでゲーム開発をしていると「この行はデバッグ用だから後で消そう」と思っていてもつい忘れてしまうことがありました。そこで、あらかじめ無視したい行には「gitignoreline」という文字列を入力しておき、Gitを利用してコミット(正しくはステージ)する際に、自動的にその行のコードを無視してくれる機能を作成しました。
応用すれば書き換えたりすることも可能です。

2023/12/18 追記

該当の行を削除してステージしますがローカル上にはその行は残ります。
そのため本文も削除ではなく無視と表現するよう変更しました。

目的

無視は.gitignoreファイルに記述すればできますがファイルごとの操作になります。ですが、やりたい事はファイルの中の任意の記述がある行のみを無視することです。
今回は例として「gitignoreline」とコメントで記述されている行を削除して実質的に無視するようにします。
gitのFilterという機能を使います

具体的には、これが

Hoge.cs
Debug.Log("この行は削除したくない");
Debug.Log("この行は削除してほしい");  // gitignoreline

コミットするときにはこうなるようにしていきます。

Hoge.cs
Debug.Log("この行は削除したくない");

この記事を参考にWindows環境で、Unityでゲーム開発することを前提に解説していきます。

1 フィルタの作成

まずは.gitconfigにフィルタを定義します。
C:\Users\<ユーザー名>\.gitconfigを開いて以下の内容を追記してください。

.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を開いて以下の内容を入力してください。

.gitattributes
*.cs filter=ignoreline

解説

*.cs はC#で書かれた全てのファイル(hoge.csなど)を対象にするという意味です。
filter=ignorelineignorelineという名前のフィルターを適用するという意味です。
つまり、C#で書かれたファイルがあったらignorelineというフィルターを適用してくださいという意味です。

これで設定が完了しました

使い方

コード内の消したい行でコメントで「gitignoreline」と記述するだけです。

Hoge.cs
Debug.Log("この行は削除したくない");
Debug.Log("この行は削除してほしい");  // gitignoreline

この状態でコミットすると以下のように「gitignoreline」と書いてある行のみ削除されます。

Hoge.cs
Debug.Log("この行は削除したくない");
- Debug.Log("この行は削除してほしい");  // gitignoreline

まとめ

このように案外簡単に実装することができました。
さらに応用すればDebug.Logは全てコメント化するなんてことも可能だと思います。
チーム内の管理が楽になると思うので是非やってみてください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?