不安なくOrphanブランチを作る方法 by GitHub(リモートgit)

私はOrphanブランチが大好きだ。ドキュメントや資料やウェブページなどはぜひそこで管理していってほしい。

いきなりやり方

クローンして checkout --orphan するのではなく git add remote 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 add remote 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ブランチ である。

スクリーンショット 2017-12-08 15.12.27.png

この赤矢印に注目。どのブランチを親にももたないブランチが突如現れている。

動機

本質の管理対象であるソースコードをgitリポジトリで管理する以外に、管理したいドキュメントや他リソースというのは必ずでてくる。仕様書やドキュメント、宣伝ページ、密接なデプロイツールなどなどである。これらを別リポジトリ、別エクセル、別フォルダ・・・などで管理してもいいが、だいたいでてくるのは「これ、どの時点の話だ?」というのがわからなくなってしまうという問題である。更新日付を目で追いかけ、脳でソートしながら追いかけないといけないのは大変だ。

これの1つの解決策として「それも同一gitで管理しちゃえばいいじゃん?」という策があるが、自動テストのある昨今、本質の管理対象以外の更新でブランチが伸びることは非常に業務コストがあがってしまうことがある。つまり、余計なコミットはmasterブランチには入れたくない。

そこで出てくるのが「ドキュメント専用ブランチの運用」である。こういったときにOrphanブランチは用いられる。

問題

Orphanブランチを作成するのは実は結構ややこしい。その手順は簡単で作業ディレクトリで git checkout --orphan でブランチはできるが、孤立したブランチを作ったはいいものの、作業ディレクトリに既存ファイルが残っているので git rm -rf . しなくてはならない。

これがコワイのである。

恐怖を克服したとしても、ブランチを移動するとファイルがどーんと消えたり復活したりでとてもコストがでかい。

運用

そういうのがコワイので、運用としては例えば『project』というリポジトリだと

project
project-orphan-doc

とこのように2つのディレクトリに分けて運用し、各ディレクトリではorphanブランチにはスイッチしないという運用をしている。前述したようなタイミングを調べるときにはremoteを経由してfetchしたりし、ツールで確認する。

やり方

最初に書いた「いきなりやり方」をご参照ください。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.