私はOrphanブランチが大好きだ。ドキュメントや資料やウェブページなどはぜひそこで管理していってほしい。
いきなりやり方
クローンして checkout --orphan
するのではなく git remote add origin
して git push origin master:orphan-doc
しちゃうと楽。
例) project
というディレクトリとリポジトリで運用しているところに orphan-doc
というブランチを追加する
$ git clone https://github/project.git # これで projectディレクトリができ、普段はこっちで作業
$ mkdir ./project-orphan-doc # ここがドキュメント用ディレクトリ
$ cd project-orphan-doc
$ git init
$ git remote add origin https://github/project.git
$ touch document.doc
$ git add .
$ git commit -m '1st orphan-doc commit'
$ git push origin master:orphan-doc # ←これでリモートにはブランチ名が orphan-doc でプッシュできるのでエラーがおきない
Orphanブランチとは
Orphan
とは孤児のこと。普通gitリポジトリといえば基本となるコミットがあるそれを親として差分で管理していく。ブランチをわける、切るというのはこの親から枝分かれすることを指す。親と差分が基本な構造な中、突如として「何も親にもたないブランチ」を実は作ることができる。これが Orphanブランチ である。
この赤矢印に注目。どのブランチを親にももたないブランチが突如現れている。
動機
本質の管理対象であるソースコードをgitリポジトリで管理する以外に、管理したいドキュメントや他リソースというのは必ずでてくる。仕様書やドキュメント、宣伝ページ、密接なデプロイツールなどなどである。これらを別リポジトリ、別エクセル、別フォルダ・・・などで管理してもいいが、だいたいでてくるのは「これ、どの時点の話だ?」というのがわからなくなってしまうという問題である。更新日付を目で追いかけ、脳でソートしながら追いかけないといけないのは大変だ。
これの1つの解決策として「それも同一gitで管理しちゃえばいいじゃん?」という策があるが、自動テストのある昨今、本質の管理対象以外の更新でブランチが伸びることは非常に業務コストがあがってしまうことがある。つまり、余計なコミットはmasterブランチには入れたくない。
そこで出てくるのが「ドキュメント専用ブランチの運用」である。こういったときにOrphanブランチは用いられる。
問題
Orphanブランチを作成するのは実は結構ややこしい。その手順は簡単で作業ディレクトリで git checkout --orphan
でブランチはできるが、孤立したブランチを作ったはいいものの、作業ディレクトリに既存ファイルが残っているので git rm -rf .
しなくてはならない。
これがコワイのである。
恐怖を克服したとしても、ブランチを移動するとファイルがどーんと消えたり復活したりでとてもコストがでかい。
運用
そういうのがコワイので、運用としては例えば『project』というリポジトリだと
project
project-orphan-doc
とこのように2つのディレクトリに分けて運用し、各ディレクトリではorphanブランチにはスイッチしないという運用をしている。前述したようなタイミングを調べるときにはremoteを経由してfetchしたりし、ツールで確認する。
やり方
最初に書いた「いきなりやり方」をご参照ください。