Kann ich das .git Verzeichnis für einen Repo bewegen, um es übergeordnetes Verzeichnis ist?
-
03-07-2019 - |
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.
Lösung
Sie können tun, was Sie wie folgt beschreiben:
-
den Inhalt von
ABC
zu einemABC/
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
-
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
-
Schließlich die
PPP
Repository erstellen und sowohlABC
undDEF
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
undPPP/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.