2017-09-03 2 views
0

Gitバージョン管理下にはいくつかの別個のMavenプロジェクトがあります。ここでは、これらのプロジェクトを集約POMの下でmavenマルチモジュールプロジェクトとして結合し、このマルチモジュールプロジェクトの新しいリポジトリを作成したいと考えています。Git、サブモジュールを使わずに履歴を保存して複数のプロジェクトを結合する方法

しかし、私はそれらの集約されたプロジェクトの履歴を失いたくはありません。私は、集約プロジェクトのための新しいリポジトリを初期化しようとしました、そして作業ツリーの下の既存のリポジトリをクローンしました。しかし、これらのサブリポジトリは暗黙のうちにgitサブモジュールとみなされ、私はgit submodule APIのファンではありません。他の開発者にとってもあまりにもあいまいだと思います。

これらのリポジトリの履歴を何とか新しい集約リポジトリにマージするだけです。私は履歴をマージして元のリポジトリと同期するのではなく、サブモジュールなしで新しい集合リポジトリのすべてをバージョン管理するだけです。それでも、私は任意のマージされたリポジトリの特定のコミットをチェックアウトしたいと思います。

これはGitで可能ですか?

+0

問題を解決するための回答がありますか?はいの場合は、回答としてマークすることができます。また、同様の質問をした他の人にとっても有益です。 –

答えて

1
  1. 新しいレポを初期化します。

  2. 複数のすべてのプロジェクトから目的のバージョンのファイルをコピーし、それらを結合します。必要に応じて、ディレクトリ構造を並べ替えることができます。そしてファイルが内容を期待していることを確認してください。

  3. セットアップ.gitignore.gitattributeなどすべてを追加して、新しいリポジトリの最初のコミットを行います。

  4. 複数のプロジェクトからブランチを取り出し、オプション-s oursですべてをマージします。 ours戦略は、実際のコンテンツのない履歴のみをマージします。

例:

のは、我々はすべてのブランチmasterを持つ、RepoA、RepoBとRepoCがあるとしましょう。 3つのブランチの最新バージョンのファイルをマージします。

git init RepoABC 
cd RepoABC 
#copy the files all RepoA, RepoB, RepoC and rearrange the directory structure if necessary. 
#add .gitignore, .gitattribute, etc if necessary. 
git add . 
git commit -m 'new root for combining RepoA RepoB and RepoC' 
git fetch origin_repoa master:repoa_master 
git fetch origin_repob master:repob_master 
git fetch origin_repoc master:repoc_master 
git merge repoa_master repob_master repoc_master -s ours -m 'Merge and preserve the histories of RepoA, RepoB and RepoC, with merge strategy "ours"' 

ここで、新しいリポジトリのブランチに注目し、新しい変更を加えることができます。歴史は予約されており、私たちはそれらを振り返ることができます。ディレクトリ構造が再配置された場合、最初のコミットをチェックアウトするときに小さな問題が発生することがあります。新しいフォルダとファイルは、コミットがチェックアウトされた後、追跡されていないファイルとして残ります。 git clean -dfはそれらをスキップしますので、rm -rfを一度だけ使用してください。

1

はい、gitで可能です。

Repo1:masterdev1

Repo2:新でmasterdev2

が結合する必要があり、各レポのために、異なるブランチがある2リポジトリ/プロジェクトがあると仮定しますレポの場合は、以下のコマンドとともにプロジェクトを組み合わせることができます。

git init 
# make changes and commit on master branch if you want to combine the aggregated projects in non-master branch 
git remote add repo1 <URL for repo1> -f 
git remote add repo2 <URL for repo2> -f 
git checkout -b repo1_master repo1/master 
git checkout -b repo1_dev1 repo1/dev1 
git checkout -b repo2_master repo2/master 
git checkout -b repo2_dev2 repo2/dev2 

repo1とrepo2のすべてのブランチは、ブランチ内の新しく作成されたレポに集約されます(repo1_master,repo1_dev1,repo2_masterおよびrepo2_dev2)。また、repo1とrepo2から変更を加える必要がない場合は、リモコンを削除することができます。

git remote rm repo1 
git remote rm repo2 
関連する問題