2016-07-21 5 views
1

this questionの逆数を行う必要があります。2つのGitリポジトリを結合するにはどうすればよいですか?

ほとんどの1年前に、私たちはGitリポジトリを新しいリポジトリに両方のブランチの現在の状態をコピーすることで自分自身から切り離しました。それを簡単にするには:

<== 2015 Dec    1 Jan     2016 Jan ==> 
Past history, till SVN New Repo First Commit All commits to present 

我々はすぐに、独自のGitリポジトリにこのリポジトリ内のプロジェクトのそれぞれをオンにするサブツリーを使用することになりますが、私は長い間、我々は5年が欠けているとことを行うにはしたくありません中央リポジトリのコミット履歴ここで私はこれまでに試した手順は以下のとおりです。

cd ProjectFull/ 
git reset --hard # Project was in a branch 
git checkout master # Go to master before trying to rebase 
git remote add ProjectSplit ../ProjectSplit # New repository is in another directory 
git fetch ProjectSplit # Fetch new repository 
git cherry-pick <initial commit hash> --strategy-option theirs 
git pull --rebase -s recursive -X theirs origin master 

私の考えはに新しいレポの最初のコミットしてからコミットしているのオフリベースチェリー選ぶが、それが失敗しました。上記のコマンドはエラーにはなりませんが、古いリポジトリの履歴はすべて削除されます。旧レポのパッチの途中で失敗した

$ git rebase origin dev 
First, rewinding head to replay your work on top of it... 
Applying: Merge branch 'dev' of <REPO> into dev 
Using index info to reconstruct a base tree... 
<stdin>:298480: trailing whitespace. 

<stdin>:298553: trailing whitespace. 

<stdin>:298559: trailing whitespace. 

<stdin>:298565: trailing whitespace. 

<stdin>:298571: trailing whitespace. 

warning: squelched 1751272 whitespace errors 
warning: 1751277 lines add whitespace errors. 
Falling back to patching base and 3-way merge... 

CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
<Same> 

Failed to merge in the changes. 
Patch failed at 0001 Merge branch 'dev' of <REPO> into dev 
The copy of the patch that failed is found in: 
    ProjectFull/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

The scriptこの答えで:

は、ここに私のGitのリベースの切り捨てられたログです。

This answerは、異なるリポジトリでのみ動作します。

+0

リベースはどのように失敗しますか?どんなメッセージ?これは私にはrebaseのシナリオのように見えます。 – harmonica141

+0

遅く返信@ harmonica141に申し訳ありませんが、私は今日まで再び作業を開始していませんでした。 – NobleUplift

+0

a)この空白エラーをトレースできましたか? b)「失敗したパッチのコピーが見つかりました:ProjectFull/.git/rebase-apply/patch'」に記載されているフォルダの内容はありますか?それには何が含まれていますか?そこにコミットするのは1つだけですか? – harmonica141

答えて

1

あなたの走行距離は異なる場合がありますし、私はよく質問や、あなたの意図を誤解している可能性があり、私は短い要約でオプションを提案します:

PerlのCPANには、gitのステッチ・レポを持っているステッチのレポを考えてみましょうnice moduleが流行している。git fast-exportgit fast-import

履歴を線形化する必要があります。

subdirオプション

は2 dirsの代わりの1つを持っています。またはmultiple dirs

あなたはすでにそれに従っています。あなたの質問から最後のチェリーピッキングを放棄して、現在のディレクトリに沿ってディレクトリとしてoldレポを持ってください。

少なくとも厄介な、ちょうど接着剤は一緒にrepos。履歴を線形化しようとしません。

Gitのサブツリーは、

Merge subtreeは、Gitのコマンド、サブツリーとサブモジュール(及びより少ない投与重)の両方よりも使用が容易であるマージ。

個々のファイル(マージ後)のgitログを見るときは、--followを使用する必要があります。

あなたは

それを必要とする理由見直しは、あなたはそれが参考になる特定のか?もしあなたがELKに古いGitログをフィードしたら、あなたの同僚(そしてあなた自身)に合わせてインデックスをつけて検索しますか?木場にダッシュボードを設置する可能性はありますか?または、古いリポジトリを持つマシンにgit instawebを設定すると、Web経由で閲覧できるようになりますが、それはおそらくあなたの要求を満たすでしょうか?

はgitのマージ・レポ

が試したことはありませんので、お勧めできませんが、it's apparently for just such an occasionとのgit-ステッチレポが若かったとき、それが書かれていた考えてみましょう。チェックアウトの価値があるかもしれません。いくつかの書き換え

an option with some history rewriteはgitのフィルタ分岐でもあります。おそらくBFGでも同様に行うことができます。

+0

明日の朝、これらをすべてチェックします。 – NobleUplift

+0

先週、 'git-stitch-repos'を試しましたが、私のリポジトリにはmasterとdevのマージがたくさんあるので動作しませんでした。次に、私は 'git merge-repos'を試しましたが、リポジトリのトップレベルに両方のフォルダを置くだけです(ProjectFull、ProjectSplit)、これらのリポジトリの各サブフォルダが作成されるときにFullとSplitの両方の履歴を保持できなくなりますそれ自身のリポジトリ。 – NobleUplift

関連する問題