Kann ich das .git Verzeichnis für einen Repo bewegen, um es übergeordnetes Verzeichnis ist?

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

Frage

Ich habe zwei Unterverzeichnisse mit jeweils einem Repo, also:

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

Und möchte sie in ein Repo kombinieren, so würde ich die Verzeichnisstruktur annehmen, wie dies wäre:

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

Ist das posible?

Auch zur Zeit mehrere Leute haben die repos auf ihren Maschinen. Wie viel komplizierter ist, dass das Leben machen?

Ta.

War es hilfreich?

Lösung

Sie können tun, was Sie wie folgt beschreiben:

  1. den Inhalt von ABC zu einem ABC/ Unterverzeichnis verschieben, und die Geschichte zu beheben, so dass es aussieht wie es immer war es:

    $ 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
    

    Jetzt die Verzeichnisstruktur ist ABC/ABC/your_code

  2. Das Gleiche gilt für den Inhalt von 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
    

    Jetzt die Verzeichnisstruktur ist DEF/DEF/your_code

  3. Schließlich die PPP Repository erstellen und sowohl ABC und DEF hinein ziehen:

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

    Jetzt haben Sie PPP/ABC/your_code und PPP/DEF/your_code, zusammen mit der ganzen Geschichte.

Sie sollten wahrscheinlich Sie Kollegen bitten, die vorherigen Befehle auf dem System ausgeführt werden, um für alle synchronisiert werden.

  

Hinweis: die flippigen filter-branch Befehle kommen aus der Manpage . : -)

Andere Tipps

Haben Sie wirklich die beiden bestehenden Repositories in einem Repository zusammenführen müssen, oder wollen Sie einfach nur zu gruppieren?

Wenn Sie nur gruppieren möchten sie, dann git-Submodul wird tun, was Sie wollen. Sie werden mit drei Repositorys landen, wo die Top-Level eines Links zu den aktuellen zwei

Als Richtwert:

  • Sie sollten sie in eine einzigen Repository zusammenführen, wenn Sie die Kopplung zwischen ihnen erhöhen werden, so dass es nicht mehr sinnvoll ist, mit einer anderen Version von Repo-B eine Version von Repo-A zu verwenden.

  • Sie sollten Submodule verwenden, wenn sie etwas getrennt bleiben (es manchmal Sinn hätte macht auf eine isoliert zu arbeiten), aber Sie wollen die Bequemlichkeit der mit ihnen in der Lage, zusammen zu arbeiten (zB beide auf einmal herunterladen, checkpoint bekannt-gute Staaten über beide, etc).

Submodule Verwendung werden Probleme mit vorhandenen Kopien der Repositories vermeiden, da die Geschichte nicht ändert. Zusammenführen von ihnen wird eine neue Geschichte schaffen und es wird für die Menschen aus den bestehenden Filialen härter arbeiten, um ihre Änderungen zusammenführen.

Für mich scheint es schwer, wie Sie wollen, es zu tun, weil die Geschichte der beiden Projekte nicht zusammenführen.

Mein bester Rat wäre, ein neues Repository erstellen ABC und DEF, hielt alte Repo aus diesen beide haben Geschichte Backup und starten Sie eine neue Geschichte mit diesem neuen Projekt enthalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top