2017-08-15 14 views
1

これを行うには、適切な方法で手を使うことができます。私はいくつかの枝があるTFVCスタイルのリポジトリを持っています。私は全体をgitに移動したい。私はgit tfs(https://github.com/git-tfs/git-tfs)を使ってローカルのgit reposにTFVCをエクスポートしていますが、履歴は複雑すぎるため、すべてのブランチを一度にエクスポートすることはできません。それ自体は問題ではありません。なぜなら、それと同時に、異なる分岐戦略に移行したいからです。個別のgit reposを1つにマージする

プラグインが許可するのは、履歴のサブセットを持つ個々のブランチをローカルgitリポジトリにエクスポートすることです。だから、私は "マスター"のためのローカルレポジションと、TFVCに保存されたすべてのリリースのためのレポジトリで終わります。

今私はこれらを単一の新しいgit repoにコミットしたいと思います。マスターは新しいマスターブランチに入り、リリースごとにブランチ「releases/release-xyz」を作成したいと思う。新しいリポジトリの正しいブランチに各ローカルリポジトリのすべてのコード+履歴をコミットするにはどうすればよいですか?遠隔地を追加して各支店を進めていくことが分かったが、ここで何も忘れていないことを確認したい。各ブランチのエクスポートされた履歴がそのまま残っている限り、ブランチ間のマージの履歴は気にしません。

ので、エクスポートされた構造:

folder A (master) 
folder B (release-abc) 
folder C (release-xyz) 

とターゲット構造:

repo/master 
repo/releases/release-abc 
repo/releases/release-xyz 
+3

基本的には、新しいリポジトリを作成し、そのリポジトリをすべてのリポジトリにリモートとして追加します。次に、たとえばを使用して新しいレポにプッシュします。 'git push newrepo master:releases/release-abc' - マスターブランチを新しいリポジトリの' releases/release-abc'ブランチにプッシュします。 – poke

+0

Jupはトリックをするようですが、私はそれをもっと複雑にしていました。 – Jasper

+1

@poke共有してくれてありがとうございました。あなたのコメントを答えに移すことができました。コミュニティの他の人にも役立ちます。 –

答えて

1

あなたは基本的に行うために必要なものは、この移行の対象となり、新たな中央リポジトリを作成することです。

次に、このリポジトリを個々のリポジトリのすべてのリモートに追加します。それでは、例えば、 git push newrepo master:releases/release-abc。これにより、 "abc"リポジトリのマスターブランチが新しいリポジトリのreleases/release-abcブランチにプッシュされます。

個々のリポジトリをすべて完了すると、セントラルリポジトリのブランチにすべての変更が反映されます。

git-tfsが管理しているかどうかによって、同じIDを持たない「同じ」コミットがあるかもしれません(git-tfsが正しくコミットを確定的に再構築するかどうかはわかりません)。その場合、ブランチが共通の祖先を持つように後で整理する必要があります。ここではリベースを使用して、それらを適切に再度パッチすることができます。

関連する問題