Wie kann ich einen Quellbaum von einem anderen aktualisieren?

278
Flyk

Ich habe einen vorhandenen Quellbaum mit einer Reihe von Unterverzeichnissen und Tausenden von Quelldateien. Ich habe einen neuen Quellbaum, in dem einige Dateien aktualisiert und neue Dateien / Verzeichnisse hinzugefügt wurden.

Der vorhandene Quellbaum enthält eine Reihe versteckter Unterverzeichnisse (.git), denen der neue Quellbaum fehlt.

Ich suche nach einer Möglichkeit, mit der alle aktualisierten und neuen Dateien ihren Weg vom neuen Quelltextbaum zum vorhandenen finden können. Ich habe nichts dagegen, dass die ähnlichen Dateien auch kopiert werden, da dies keine negativen Auswirkungen hätte.

1
Ich gehe davon aus, dass Sie unter Linux sind. John T vor 14 Jahren 0
ja (auf mac osx) vor 14 Jahren 0

1 Antwort auf die Frage

1
John T

Das erste, was mir einfällt, ist rsync :

rsync -va / pfad / zu / neuer / baum / / pfad / zu / bestehender / baum

Der nachfolgende Schrägstrich auf dem ersten Pfad ist von entscheidender Bedeutung. Andernfalls wird ein neuer treeOrdner erstellt /path/to/existing/tree, der den Pfad erstellt /path/to/existing/tree/tree.

Dieser Befehl aktualisiert die Dateien im vorhandenen Baum mit den Dateien aus dem neuen Baum.

das funktioniert aber nicht ganz wie erwartet. Ich habe rsync -va new / / old ausprobiert, was fast funktioniert, aber es kopiert nicht die .git-Verzeichnisse unter old nach new. Eine bessere Möglichkeit zu beschreiben, was ich erreichen möchte, ist ein Zusammenführen, bei dem eine Seite Priorität hat wenn die gleiche Datei an beiden Orten unterschiedlich ist. Ich möchte Dateien, die nur in alt oder nur in neu sind, in der resultierenden Zusammenführung sein. vor 14 Jahren 0
Am Ende benutzte man das Tool kdiff3 (http://kdiff3.sourceforge.net/), um die Dinge zusammenzuführen vor 14 Jahren 0
Sie können auch die Option --include-from von rsync verwenden, um eine Datei mit einzuschließenden Ordnern zu lesen. Auf diese Weise können Sie alle .git-Ordner von alt nach neu synchronisieren. Um alle .git-Ordner unter old zu finden und sie in einer Datei abzulegen, können Sie `find / full / path / to / old-type d -name" .git "> gitfolders.txt` verwenden. Jetzt können wir diese Datei verwenden, um nur die .git-Ordner mit neu zu synchronisieren: `rsync -va --include-from 'gitfolders.txt' old / new`. John T vor 14 Jahren 0