2つのGitリモートリモートリポジトリをできるだけ手間なく同期する方法を紹介します。
#検証背景
- 本番用の環境にもリモートリポジトリを作成する必要があった
- 開発用のリモートリポジトリとヒストリレベルでも同期させる必要があった
- 開発用と本番用の環境は物理的に異なるネットワークにあった
- 直接は繋がらない
- 中継用のPC(ローカルリポジトリ)を使ってコマンドだけでマージできないか。。。
#初回のみ
①~②は初回のみ実行すればOKです。
####①本番用リポジトリのclone
$ git clone [https://本番用のリポジトリ]
$ cd [本番用のリポジトリフォルダ]
####②開発用のURLリンク(リモートリポジトリ追加)
$ git remote add devlab [https://開発用のリポジトリ]
#2回目以降
####③開発用最新ソースをpull
$ git pull devlab
####④比較(任意)
$ git diff master devlab/master
####⑤開発用マージ(パラメータはおまじない)
$ git merge --allow-unrelated-histories devlab/master
※Already up to date.なら変更なし。何もしないでよい
####⑥プッシュ (上記でマージしているのでadd&commitは不要)
$ git push -u origin master
これで完了です。おつかれさまでした。
#おまけ(その他よく使うコマンド、備忘録です)
2回目以降(ブランチ作成版)です。
#(3) 開発用最新ソースをpull
$ git pull devlab
#(4) 開発用コードのブランチを作成
$ git branch [devlabYmd] devlab/master
#(5) 開発用マージ
$ git merge --allow-unrelated-histories [devlabYmd]
#(6) プッシュ
$ git push -u origin master
その他よく使うコマンド
# ブランチ一覧
git branch
# ブランチの比較
git diff master [devlabYmd]
# ブランチの削除
git branch -d [devlabYmd]
#コンフリクト時:開発用コードを優先(無条件上書きでよい場合のみ)
git checkout --theirs [対象ファイル]
#コンフリクト時:本番用コードを優先(無条件上書きでよい場合のみ)
git checkout --ours [対象ファイル]
# コンフリクト時エディタによる修正対応後
git add .
git commit -m "edit file commit“
# push後の確認用
git pull origin
##最後に
Gitはできることが多すぎて覚えるものじゃないですね。
RCSが懐かしいです。