Gitを用いて構成管理をしている、システムAから一部機能を亜種サイトであるシステムBにマージする方法です。
GitクライアントであるTortoise Gitを用いて、効率よく行います。
やりたいこと
システムAに追加開発された機能のうち、一部機能をシステムAをベースに作られた亜種サイトシステムBにマージする。
ここで、画面や一部機能はシステムB独自のものであるため、システムAとシステムBの単純なファイル比較では、不要な機能の取り込みや必要機能の削除などの危険性があるため、不可。
以下の図でいうと、追加機能D,E,Fのうち、Eのみを適用するような場合
環境
- OS(ローカル):Windows10
- 構成管理ツール:Git
- Gitクライアント:Tortoise Git(コチラよりDLできます)
手順
システムA(マージ元)のmasterブランチを参照して実施します。
以下の手順では、test_branch2の変更のみシステム(マージ先)Bのmasterブランチに取り込むこととします。
1.システムAとシステムBをそれぞれローカル環境にcloneします。
2.システムAのmasterブランチでpullして最新の状態にします。
Tortoise Gitを用いる場合は以下の通り。
①対象フォルダ上で右クリック > Git Sync
②pullをクリック
3.Tortoise Gitで差分を比較します。
①対象フォルダ上で右クリック > Tortoise Git > Show log
②Ctrlキーを押しながら、取り込みたい機能(ブランチ)の最初のコミットの直前のコミットと、最後のコミットを選択し、Compare revisionsをクリック
③変更のあったファイルが表示されるので、うちひとつをクリック
④差分が着色されて表示されるので、その部分をコピーし、システムBの対象ファイルに取り込みます。
⑤③で表示されたファイル全てに対し、④の作業を実施します。
できればやっておくといいこと
主にシステムA側の開発時にやっておくとシステムBへのマージがより安全かつラクになる方法です。
1. コミットメッセージにチケット番号を入れる
コミットメッセージの内容や作業実施者の名前から、だいたいどの機能(ブランチ)に関するコミットか判別できるかと思います。
しかし、間違って別のブランチの内容を取り込む危険性もなきにしもあらず。
なので、コミットメッセージの冒頭などに、チケット番号を入れておくとより安全性が増してベターです。
2. マージ時にSquashする
Squashすることにより、複数のコミットを1つにまとめることができ、システムマージをスムーズに進められます。
コミット毎にどんな変更を行ったかがわからなくなるので、そもそもNGな現場もあるかとは思いますが、問題ないようであれば実施しておくと、システムマージをかなり楽に行えるかと。
終わりに
初期の頃は取り込み機能(ブランチ)に関する変更をコミット毎に取り込むという非効率な方法でやっていましたが、上記の手順にしたことで、安全性と効率がよくなり、負担も減りました。
担当外になったので、なかなか機会ないですが、今後できれば自動化の方法も考えてみたいところ。
実現できたらその内容についても書きたいと思います。