2つのgit倉庫を統合

20024 ワード

金曜日にロボットのオンライン監視スクリプトを整理して、突然このスクリプトがgithubの上で管理していることを思い出して、無料のユーザーのgithubの上のコードはすべて公開して、誰でも見ることができます.私と同僚の仕事のメールボックスはまだスクリプトの中に配置されています.爬虫類に捕まえられたらうんざりします.
最近やっと私有のgit倉庫を見つけたのでgithubの元のデータを移そうとしたが、以前のcommit記録を保存しなければならないので、簡単なmvほど簡単ではないので、振り回さなければならない. 
結局、もちろんやっと成功したので、このブログを共有して記録します.
皆さんに理解してもらうために、caseを次のように再説明します.
git倉庫は2つあります:repo 1、repo 2;
repo 1のファイルをrepo 2に移動したい.
repo 1の履歴ログは保持します.
まず、2つの倉庫をすばやく作成します.
1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir repo1
cd repo1
git init
echo "repo1.txt" > repo1.txt
git add repo1.txt
git ci -m "init repo1"
 
mkdir repo2
cd repo2
git init
echo "repo2.txt" > repo2.txt
git add repo2.txt
git ci -m "init repo2"

結果ディレクトリパスは次のとおりです.
1
2
3
4
5
6
7
repo1/
repo1/repo1.txt
repo1/.git
 
repo2/
repo2/repo2.txt
repo2/.git

もう一度注意して、欲しい効果は:
1
2
3
4
repo2/
repo2/repo1.txt
repo2/repo2.txt
repo2/.git

次に、5ステップのコマンドが必要です.
1
2
# 1、 repo1      ,   repo2 ,     other
[jot@myhost repo2]$ git remote add other ../repo1/
1
2
3
4
5
6
7
8
# 2、 repo1           
[jot@myhost repo2]$ git fetch other
warning: no common commits
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../repo1
 * [new branch]      master     -> other/master
1
2
3
4
# 3、 repo1     master       checkout   ,       repo1
[jot@myhost repo2]$ git checkout -b repo1 other/master
Branch repo1 set up to track remote branch master from other.
Switched to a new branch 'repo1'
1
2
3
# 4、   repo2 master  
[jot@myhost repo2]$ git checkout master
Switched to branch 'master'
1
2
3
4
5
6
# 5、 repo1   master  
[jot@myhost repo2]$ git merge repo1
Merge made by recursive.
 repo1.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 repo1.txt

効果が見えます.ログは確かにあります.
完了しました.サーバーにpushできます.
発生する可能性のある問題:
1.マージ時に2つのブランチが同じファイルを修正した可能性があります.この場合、衝突を解決する必要があります.テキストファイルにとっては簡単です.必要に応じて衝突の位置を処理すればいいです.バイナリ・ファイルでは、次のコマンドが必要です.
git checkout --theirs YOUR_BINARY_FILES//統合するブランチの修正を保留
//git checkout --ours YOUR_BINARY_FILES//自分の修正を保留
git add YOUR_BINARY_FILES
git comm
まとめ:
大体の構想は遠隔のrepo 1倉庫をrepo 2の1つの分岐に偽造して、それから合併します;
ファイルが競合している場合、またはサブディレクトリを作成する場合は、repo 1で解決してから、上記の操作を行うことをお勧めします.