いきなり本番で使ってます

いいんだろうか < 自分
それは良いとしてログを以下に。

昨日したこと

  • 前提
    • 前日の K さん作業について
      • K さん patch あり (共用への push はしていない
      • 共用リポジトリの master から clone したものが元
    • 作業リポジトリにはスデに修正がはいっているが add してない状態

上記をマージして retain/assign 関連の修正を開始したい

まず試験

共用リポジトリから clone してパッチあててみる。

$ git am ~/Desktop/0001-xxxx.patch
$ git diff
  • patch は正常終了している模様だが diff は何も出力しない
  • branch は基本的に master に merge するのがデフォルトな模様
  • ちなみに git checkout master したら元に戻ってる
    • 無論、branch 側にいけば patch があたってる

凄いな Git ってコトで本番に盛り込みを。

作業リポジトリへの盛り込み

スデに変更盛り込み中なだけに失敗は許されない、と言いつつ前日の作業で大失敗していた事が後に判明します。とりあえずやる事てきには以下。

  • 作業リポジトリに branch 作成
  • git am でその branch にパッチをあてる
  • master 側の作業中のソレを add して commit
  • merge する
  • commit して共用リポジトリに push

うまくいきますように、と神さんに祈りつつ作業開始しましたが色々ハマりました。

branch 作成

作成した branch に master 側の修正しかけな情報も盛り込まれてました。入門Git を見つつ

$ git stach

でナニ。で、git am したら微妙なメセジ (保管してません) にて終了。よく考えたらこの作業リポジトリで前日 patch を間違えてあてていて、エラーが戻ってきてたのを思いだす。これはマズいんじゃね? って言いつつ .git/release-apply が云々とのメセジだったので、その中身を覗く。
色々な情報が残されてるみたいですが、ディレクトリ自体のタイムスタンプが前日だったのとか、他のリポジトリ見てみたらそんなディレクトリは無かったりしたので、元気よくディレクトリを削除。
で、git am したら見事にパッチがあたりました。わはは。
ここで git stash pop するのを忘れずに。

master 側

次に master 側に移動して diff 見ながら add して commit してます。マージの準備完了ってコトで

$ git merge xxxx-update

# xxxx-update はブランチの名前ッス
したんですが、conflict との事。基本的に同じ場所はいぢくってないのにおかしいな、と言いつつ該当ファイルを見てみたら見事に同じ箇所に手を入れてました。
git diff で確認できる衝突部分は手動にて適度に修正して対象ファイルを add して commit。これを共用リポジトリに push して事無きを得ております。

それにしても

patch ベースで色々やるのであれば非常に便利です。patch をどうやって流通させるのか、な課題はあるとは思いますがなかなか素晴しい。