37

それぞれレポを持つ2つのサブディレクトリがあるため、次のようになります。

PPP/
 |--ABC/
 |   |--.git/
 |   |--AAA/
 |   |    BBB/
 |   |   CCC/
 |   
 |--DEF/
 |   |--.git/
 |   |--DDD/
 |   |--EEE/

そして、それらを 1 つのレポに結合したいので、ディレクトリ構造は次のようになると思います。

PPP/
 |--.git/
 |--ABC/
 |   |--AAA/
 |   |--BBB/
 |   |--CCC/
 |   
 |--DEF/
 |   |--DDD/
 |   |--EEE/

これは可能ですか?

また、現在、何人かの人々が自分のマシンにリポジトリを持っています。それは人生をどれほど複雑にしますか?

タ。

4

3 に答える 3

45

次のように説明していることを実行できます。

  1. のコンテンツをサブディレクトリに移動し、ABC常にABC/そこにあったように見えるように履歴を修正します。

    $ cd /path/to/ABC
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&ABC/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    これで、ディレクトリ構造はABC/ABC/your_code

  2. の内容についても同じDEF:

    $ cd /path/to/DEF
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t-&DEF/-" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    

    これで、ディレクトリ構造はDEF/DEF/your_code

  3. 最後に、PPPリポジトリを作成し、 と の両方をプルABCしますDEF

    $ mkdir /path/to/PPP
    $ cd /path/to/PPP
    $ git init
    $ git pull /path/to/ABC
    $ git pull /path/to/DEF
    

    これで、すべての履歴とともに と ができましたPPP/ABC/your_codePPP/DEF/your_code

全員が同期されるように、同僚のシステムで以前のコマンドを実行するように依頼する必要があります。

注:ファンキーなfilter-branchコマンドは man ページから取得されます。:-)

于 2009-03-05T10:28:34.337 に答える
5

2 つの既存のリポジトリを 1 つのリポジトリにマージする必要があるか、それとも単にグループ化したいだけですか?

それらをグループ化したいだけなら、 git-submodule はあなたが望むことをします: 最上位の 1 つが現在の 2 つにリンクする 3 つのリポジトリになります。

ガイドとして:

  • レポ A の 1 つのバージョンをレポ B の別のバージョンで使用する意味がなくなるように、それらの間の結合を増やす場合は、それらを単一のレポジトリにマージする必要があります。

  • サブモジュールが多少分離している場合はサブモジュールを使用する必要がありますが (1 つを単独で作業することが理にかなっている場合もあります)、それらを一緒に作業できる便利さが必要です (たとえば、両方を一度にダウンロードし、両方で既知の良好な状態をチェックポイントします)。など)。

サブモジュールを使用すると、履歴が変更されないため、リポジトリの既存のコピーに関する問題が回避されます。それらをマージすると新しい履歴が作成され、既存のブランチで作業している人々が変更をマージするのが難しくなります。

于 2009-05-13T18:45:43.693 に答える
0

私にとっては、両方のプロジェクトの歴史が融合しないので、あなたが望むようにするのは難しいようです.

私の最善のアドバイスは、ABC と DEF を含む新しいリポジトリを作成し、これら 2 つの古いリポジトリを保持して履歴をバックアップし、この新しいプロジェクトで新しい履歴を開始することです。

于 2009-03-05T10:26:09.680 に答える