2014.04.15

ご飯が白いのよ!〜git branch

サイトを更新していて失敗することってありますよね。実験的に書いてみたスクリプトが動かなかったり、変更したレイアウトが気に入らなかったり。
今までは元に戻すためにこの地点までのバックアップをデスクトップに置くなどしてました。
しかし、居間でヌクヌクするためにgitを導入してから、元に戻すことを想定したバックアップが不要になりました。

なんとなく使えるようにはなった。けどなんかルールがいるよね?

色んな入門サイトをはしごして、なんとか自分のサイトをgitで管理できるようになりました。感謝。
しかし、2台のマシーンで開発するにあたってコンフリクトが多発w。ちょっと覚えたてのrebaseをいい気になってpush済みに使ってぐっちゃぐっちゃになってみたりもしました。
一人でやることといえ運用方針を決めておかないと「あれ?どっちのマシーンで何をしたっけ?あーコンフリクトぉぉぉぉ!」という泥沼に時間を吸い取られることになってしまいます。
そんで、こちらを参考に運用してみることにしました。

参考サイト:
見えないチカラ: A successful Git branching model を翻訳しました
ご飯が白いのよ!

とりあえず常時使うブランチは3つほどにして緩い感じで慣れて行こうと思います。

  • masterブランチには完全版しか上げません。
    常にdevelopブランチからしかmergeしません。
    常設のブランチ。
  • developブランチを開発に使います。
    常設のブランチ。
  • featureブランチは不安要素がある場合、もしくは進行してる作業に別案が出た時の比較をmaster,developからブランチを切り行う。
    mergeはdevelopのみに行う。臨時のブランチ。

A successful Git branching modelはもっと複雑で目的に応じた多くのブランチを扱います。こんな簡単じゃないです。やって行くうちにこのbranching modelの言わんとしてることが分かってくるかなと自分に理解できる必要な所だけ端折ったり統合したりしてみました。
でも、これだけ簡単な応用でもcheckoutとmargeの経路というか制限は非常に役に立つのではないかと思っています。
では、ひよこで想定してみたいと思います。

へびちゃんはdevelop界でひよこにごはんと納豆とネギとしょうゆを与えました。
nevaneva
失敗です。ねばねばです。しかもネギを可愛いがっています。ひよこに納豆ごはんの作り方を教えなかったからです。
neverboo
納豆だけを先に食べてしまったひよこは、ごはんが白いと食べられないと文句を言いますがへびちゃんは別にいいんじゃね?と思います。
何事も経験です。おなかが空いたら白いごはんもおいしいのです。

へびちゃんはdevelop界をそのままmaster界という現実にするつもりでしたが、ししちゃんは納豆は手で食べると大変な事になるということを学んだ上で正しい納豆ごはんを食べる世界にするべきだと思いました。
だいたい弟ひよこは納豆食べてませんし、かわいそうです。

しかし、もうdevelop界に納豆はありません。

そこで納豆を食べる前に戻る事にしました。なんたってししちゃんとへびちゃんは神様なのですから。

ししちゃんは納豆だけを食べる前の世界masterから亜空間featureを作りました。ここではまだ納豆は無事です。この地点から納豆を料理します。
nevacook
ひよこはなっとうごはんをたべました。
nevemogu
望ましい結果になったので、develop界の失敗をreset –hardの呪文でなかったことにしてもいいのですが、やはり記憶commitとして残しておくことにします。面白いし。
develop界で、記憶を残しつつ時を戻す呪文revertを唱え納豆を手づかみする前に戻り、時が戻ったdevelop界に正しい納豆ごはんを食べているfeature亜空間を融合mergeします。

develop界の納豆ごはんにもうまちがいは無いか確認して、完全な納豆ごはんを食べた世界を確定します。管理人的にはmasterにdevelopをmergeです。
ひよこはおいしく納豆ごはんを食べることができました。
ねばねばはもうかんべんです。

図にしてみる。
nebazu
結果(ひよこブーイング)が微妙なので、別の過程へ(納豆調理)進路をとり、結果(もぐもぐ)を比較して採用の流れ。

もし、masterにマージしてないコミットがあり、developからしか戻れない場合は

としてdevelopブランチの納豆が無事な所まで戻ってでfeatureブランチにチェックアウト。

蛇足ですが、最初このcheckoutが理解できませんでしたw
だって、checkoutってなじみ深い単語ですよね。ホテルの部屋をチェックアウトする。とかoutなんです。出てゆくんです。
masterブランチに切り替える時に『masterブランチをcheckoutします』という説明がけっこうあります。
えっ?今、masterに居ないんだけど?masterを出てゆくの?
ってなりません?

と脳内補完して覚えましたw

本家modelでは、リモートリポジトリに上げるのはmasterとdevelopだけなのですが、私一人用のシステムなのでfeatureもリモートに上げて、別マシーンでpullして作業の続きをしたりしてます。
実はローカルな構築でhooksを使う際にちょっと不便な点があったりして始めたmodelなのですが、なかなかいい感じです。

コメントをどうぞ



PageTop