LoginSignup
36
36

More than 3 years have passed since last update.

Git 2つのリモートリポジトリを同期する

Posted at

2つのGitリモートリモートリポジトリをできるだけ手間なく同期する方法を紹介します。

検証背景

  • 本番用の環境にもリモートリポジトリを作成する必要があった
  • 開発用のリモートリポジトリとヒストリレベルでも同期させる必要があった
  • 開発用と本番用の環境は物理的に異なるネットワークにあった
    • 直接は繋がらない
  • 中継用のPC(ローカルリポジトリ)を使ってコマンドだけでマージできないか。。。

処理イメージ

このやり方で同期できました。
gitlab2.png

初回のみ

①~②は初回のみ実行すれば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が懐かしいです。

36
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
36