git-subtree
ist nett, aber wahrscheinlich nicht das, was Sie wollen.
Zum Beispiel, wenn projectA
ist das in B erstellte Verzeichnis, nachdem git subtree
,
git log projectA
Listen nur einer commit: die Zusammenführung. Die Commits aus dem zusammengeführten Projekt sind für andere Pfade, daher werden sie nicht angezeigt.
Die Antwort von Greg Hewgill kommt dem am nächsten, auch wenn sie nicht genau sagt, wie man die Pfade umschreibt.
Die Lösung ist verblüffend einfach.
(1) In A,
PREFIX=projectA #adjust this
git filter-branch --index-filter '
git ls-files -s |
sed "s,\t,&'"$PREFIX"'/," |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
' HEAD
Hinweis: Dadurch wird die Historie neu geschrieben; Sie sollten daher zunächst eine Sicherungskopie von A erstellen.
Hinweis Bene: Sie müssen das Ersatzskript innerhalb des sed-Befehls ändern, wenn Sie Nicht-Ascii-Zeichen (oder weiße Zeichen) in Dateinamen oder Pfaden verwenden. In diesem Fall beginnt der Dateispeicherort innerhalb eines von "ls-files -s" erzeugten Datensatzes mit Anführungszeichen.
(2) Dann führen Sie in B
git pull path/to/A
Voilà! Sie haben eine projectA
Verzeichnis in B. Wenn Sie git log projectA
sehen Sie alle Übertragungen von A.
In meinem Fall wollte ich zwei Unterverzeichnisse, projectA
et projectB
. In diesem Fall habe ich Schritt (1) auch für B durchgeführt.
17 Stimmen
Wenn Sie nur versuchen, zwei Repositories zu einem einzigen zusammenzufassen, ohne beide Repositories behalten zu müssen, werfen Sie einen Blick auf diese Frage: stackoverflow.com/questions/13040958/
0 Stimmen
Für das Zusammenführen von Git Repo in einem benutzerdefinierten Verzeichnis mit Speicherung aller Comits verwenden Sie stackoverflow.com/a/43340714/1772410