「親のないブランチ」を作るには --orphan
オプションを付与します。
「親のない」というとちょっとわかりづらいのかも?ですが、要は「全く新しい歴史(コミット履歴)から始める」ということ。関連はしているものの、事実上、親のブランチも存在しない。という事です。
Git: 親のないブランチを作成してみる
git clone git@github.com:yourdomain/sample . git checkout --orphan mock-html git rm -rf . // 手元にあるファイルたち (master由来) は全て削除 // 初期コミットする際の必要ファイル作るを作成 git add . git commit . git push origin mock-html
① git clone
で普段通りにクローンする
② git checkout
に --orphan
を付与。独立したブランチを作成
③ 親ブランチの存在しているファイル群は不要だったので全て削除(ここはケースによる)
④ 初期コミットする際に 必要なファイルを用意
⑤ git add
し、コミット
⑥ 最後に git push
してリポジトリへ
これでプロジェクト配下でありつつ、独立したブランチがいっちょ出来上がりです。
疑問: --orphanってなんじゃあああ
以下は git checkout --orphan
オプションに対する引用です。
--orphan <new_branch>
新しい 親のいない(orphan) ブランチを <new_branch> という名前で、 <start_point> を開始点として作成し、そこに切り替えます。 この 新しいブランチ上に対して作られる最初のコミットは、親コミットが なく、その他のすべてのブランチおよびコミットから切り離された、 新しい歴史の root コミットとなります。インデックスとワーキングツリーは、直前に "git checkout <start_point>" を 実行したかのように調整されます。 これにより、単に "git commit -a" の 実行で root コミットを作成することで、 <start_point> と同様のファイル を記録した新しい歴史を開始できます。
このオプションはあるコミットのツリーを、その完全な歴史を晒さずに 公開したい場合に便利です。 現在のツリーは "クリーン" でも、その完全な 歴史にはプロプライエタリまたは公開するのに邪魔なコード片を含むような プロジェクトにおいて、オープンソースなブランチを公開したい場合が あるかもしれません。
<start_point> とは完全に異なるファイルを記録した、切り離された歴史を 開始したい場合、orphan ブランチを作成した直後にワーキングツリーの 一番上のディレクトリで "git rm -rf ." を実行することで、インデックスと ワーキングツリーを綺麗にしてください。その後、ファイルを他の場所から コピーする、tarball を展開する、等によりワーキングツリーを再作成することで 新しいファイルを準備することになります。
引用元: http://ktateish.github.io/git-doc-ja_JP/Documentation/git-checkout.html
まあ、冒頭でお話した通り、独立したイメージができればOK。同じリポジトリとしては管理しておきたいけど、別途独立はさせたい、という痒い所に手が届くが仕様ですね。かしこ。
疑問②: --orphanの意味はわかったけど、どんな時に役立つの?
自分の場合、上記のブランチ名を見れば大体想像はできると思いますが、モックのHTMLをまっさらな状態から作成したいケースがあり、かつ、プロジェクトには関連付けておきたい。という状況がありました。
プロジェクト自体はWEBシステムですから、素のHTMLをゼロからだと、通常全て不要なはず。
なので、--orphan
で独立させつつ、全てのファイルを削除。たとえば、index.html
だけを作成して、初期コミットにすれば、期待する環境のできあがり。ということになります。
デザイナーさんとの協業などに重宝すると思います。
CircleCI: git push したら CircleCI に激オコされたんだが
ここは完全に開発環境によるので同じ環境の人(自動ビルドにCircleCIを利用している)なら読む価値ありです。
独立したブランチを用意できても、関連する親プロジェクトはもちろん稼働しています。
git push
をフックに自動ビルドが走る場合(テストケースなど)、コケます。だって、config
で必要になる実行ファイルもろとも宇宙の彼方ですから。
なので、初期コミット時に git push
しても自動ビルドをスルーする方法があります。
CircleCI: 自動ビルドをスルーする方法
vi .circleci/config.yml
# PHP CircleCI 2.0 configuration file # # Check https://circleci.com/docs/2.0/language-php/ for more details # version: 2 jobs: build: branches: ignore: - /mock-.*/
という感じで、おもっくそ開発環境に依存しますが、上記のような「名前ベース + *」で、該当するブランチ名のものを git push
しても自動ビルドを走らないようにすることが可能です。
とはいえ、Jenkis
など、他の自動ビルドツールでも同じような設定は場合によっては必要なはず。
そうした考慮ができれば、独立ブランチを作成した際も、躓く時間は短縮できそうですね。