git のブランチ名を取得する方法でパッと思いつくのは、 C# からターミナルを利用してコマンドを叩きブランチ名を取得する方法だと思います
この方法ではOSごとに違う処理を書く必要があり結構面倒です
しかし、現在のブランチ名は .git ディレクトリ内部にあるファイルを見ることで知ることができます
.git/HEAD
それは HEAD
というファイルで中身は以下のようになっています
ref: refs/heads/develop
見て分かる通り現在は develop
ブランチにいることが分かります
例えば master
に切り替えた場合は
ref: refs/heads/master
直接ハッシュに切り替えた場合はそのハッシュ値になります
8bdf4f7f8c661b07c4b4a1bb5a303bf2ea34d1e5
これを利用して現在のブランチ名を取得します
コード
public static string GetBranchName() { var gitDirPath = string.Empty; var path = Application.dataPath; // 3ディレクトリたどって無ければ諦める for (var i = 0; i < 3; i++) { var dirs = System.IO.Directory.GetDirectories(path, ".git"); if (dirs.Length > 0) { gitDirPath = dirs[0]; break; } // ディレクトリを一つ上げる path = System.IO.Path.GetDirectoryName(path); } if (string.IsNullOrEmpty(gitDirPath)) return string.Empty; var headPath = gitDirPath + "/HEAD"; var refs = string.Empty; using (var reader = new System.IO.StreamReader(headPath)) refs = reader.ReadLine(); // ref: refs/heads/ で始まっていない場合はハッシュチェックアウト if (!refs.StartsWith("ref: refs/heads/")) return string.Empty; var branch = refs.Substring("ref: refs/heads/".Length); return branch; }
サンプル
public class SampleEditorWindow : EditorWindow { private string _branch; private void OnGUI() { if (GUILayout.Button("Update Branch")) { _branch = GetBranchName(); } EditorGUILayout.LabelField(_branch); } }