リポジトリの.gitディレクトリを親ディレクトリに移動できますか?

StackOverflow https://stackoverflow.com/questions/614229

質問

2つのサブディレクトリがあり、それぞれにリポジトリがあります:

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

これらを1つのリポジトリに結合したいので、ディレクトリ構造は次のようになります。

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

これは可能ですか?

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

Ta。

役に立ちましたか?

解決

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

  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. になりました
  3. 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

  4. になりました
  5. 最後に、 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_code PPP / DEF / your_code がすべての履歴とともに表示されます。

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

  

注:ファンキーな filter-branch コマンド manページからアクセス。 :-)

他のヒント

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

それらをグループ化するだけの場合、git-submoduleは必要な処理を行います。トップレベルの1つが現在の2つにリンクする3つのリポジトリが作成されます。

ガイドとして:

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

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

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

私にとっては、両方のプロジェクトの履歴がマージされないため、希望する方法で行うのは難しいようです。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top