J'ai deux dossiers:
- ORIGINAL/
- ORIGINAL_AND_MY_CHANGES /
Mon ami a une copie de ORIGINAL /. Je voudrais générer MY_CHANGES.tgz - il ne doit contenir que des fichiers nouveaux / modifiés depuis ORIGINAL_AND_MY_CHANGES / par rapport à ORIGINAL /. Mon ami peut donc le déballer dans sa copie de ORIGINAL / et obtenir ORIGINAL_AND_MY_CHANGES /. Comment puis-je faire ceci?
PS J'ai essayé diff
mais il ne peut pas enregistrer de données binaires et rsync --link-dest
- il génère des liens durs qui sont inutiles dans l'archive.
PPS Dans mon cas, l'heure de modification ne peut pas être utilisée pour décider quel fichier a été modifié.
Réponses:
Avec rsync
Ce que vous faites est essentiellement une sauvegarde incrémentielle: votre ami (votre sauvegarde) a déjà les fichiers d'origine et vous souhaitez créer une archive contenant les fichiers que vous avez modifiés à partir de cet original.
Rsync possède des fonctionnalités pour les sauvegardes incrémentielles.
-a
moyens de conserver tous les attributs (temps, propriété, etc.).-c
moyen de comparer le contenu du fichier et de ne pas compter sur la date et la taille.--compare-dest=/some/directory
signifie que les fichiers identiques dans ce répertoire et l'arborescence source ne sont pas copiés. Notez que le chemin est relatif au répertoire de destination.Rsync copie tous les répertoires, même si aucun fichier n'y arrive. Pour vous débarrasser de ces répertoires vides, exécutez
find -depth CHANGES_ONLY -type d -empty -delete
(ou si votrefind
n'a pas-delete
et-empty
exécutezfind -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
).Faites ensuite l'archive à partir du
CHANGES_ONLY
répertoire.La voie piétonne
Parcourez le répertoire avec votre fichier. Ignorez les fichiers identiques à l'original. Créez des répertoires dans la cible si nécessaire. Copiez les fichiers modifiés.
la source
ORIGINAL
et créerORIGINAL_AND_MY_CHANGES
une branche? Découvrez ensuiteCHANGES
avec une commande scm.ORIGINAL
ce sont les sources de la plateforme Android (3 Go, 126 000 fichiers). Même l'exécution de rsync prend environ 15-20 minutes. Je pense que l'ajout de tout cela sous contrôle de source prendra trop de temps et d'espace.La commande
produirait un FICHIER de lot contenant les modifications requises (sans rien modifier).
Le correctif pourrait être appliqué sur un autre site, où vous prenez le fichier FICHIER, avec
la source