2つのgit倉庫を統合
金曜日にロボットのオンライン監視スクリプトを整理して、突然このスクリプトがgithubの上で管理していることを思い出して、無料のユーザーのgithubの上のコードはすべて公開して、誰でも見ることができます.私と同僚の仕事のメールボックスはまだスクリプトの中に配置されています.爬虫類に捕まえられたらうんざりします.
最近やっと私有のgit倉庫を見つけたのでgithubの元のデータを移そうとしたが、以前のcommit記録を保存しなければならないので、簡単なmvほど簡単ではないので、振り回さなければならない.
結局、もちろんやっと成功したので、このブログを共有して記録します.
皆さんに理解してもらうために、caseを次のように再説明します.
git倉庫は2つあります:repo 1、repo 2;
repo 1のファイルをrepo 2に移動したい.
repo 1の履歴ログは保持します.
まず、2つの倉庫をすばやく作成します.
結果ディレクトリパスは次のとおりです.
もう一度注意して、欲しい効果は:
次に、5ステップのコマンドが必要です.
効果が見えます.ログは確かにあります.
完了しました.サーバーに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で解決してから、上記の操作を行うことをお勧めします.
最近やっと私有の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で解決してから、上記の操作を行うことをお勧めします.