Git WEB開発

[Git]親のないブランチを作る方法

※本サイトはPR表記を含みます。

親のないブランチ」を作るには --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 など、他の自動ビルドツールでも同じような設定は場合によっては必要なはず。

そうした考慮ができれば、独立ブランチを作成した際も、躓く時間は短縮できそうですね。

 

-Git, WEB開発
-,