Zip dernières commis des changements seulement
Git a la très pratique archive
commande qui me permet de faire une copie d'un particulier s'engager dans un .archive zip comme suit:
git archive -o ../latest.zip some-commit
Cela va contenir l'ensemble de l'arbre de travail pour validation. Habituellement, j'ai juste besoin les fichiers modifiés depuis la version précédente. Actuellement, je utiliser pour obtenir ces fichiers dans un zip:
git diff --name-only previous-commit latest-commit | zip ../changes.zip -@
Ce sera toutefois les fichiers zip de ma copie de travail, ce qui peut avoir des modifications non validées. Est-il un moyen pour obtenir uniquement les fichiers modifiés comme ils ont été commis directement dans un zip?
Vous devez vous connecter pour publier un commentaire.
git archive
acceptera les chemins comme arguments. Tous vous avez besoin à faire est de:ou si vous avez des fichiers avec des espaces (ou d'autres caractères spéciaux) dans, l'utilisation de xargs:
Si vous n'avez pas xargs correctement installé, vous pouvez faire cuire jusqu'à une alternative:
Écrit comme un script shell, mais devrait fonctionner comme un one-liner trop. Vous pouvez également modifier
earlier-commit
,some-commit
, et../latest.zip
à$1
$2
et$3
et vous avez vous-même un script réutilisables.git archive -o ../../../stash.zip INDEX path/to/file/one path/to/file/two
Si la création d'un patch n'est pas une option, alors quelque chose comme ceci:
REMARQUE: Le
git stash
etgit stash apply
ne sont nécessaires que si vous avez de la copie de travail modifications qui n'ont pas été commis.NOTE 2:
git checkout latest-commit
va vous mettre sur un décollement de la tête. Assurez-vous degit checkout master
lorsque vous avez terminé, ou vous pourriez vous retrouver à avoir des problèmes avec l'avenir s'engage.git show latest-commit:file
. Cependant, je n'étais pas en mesure de venir avec un liner pour ce faire. Il ressemblerait à quelque chose comme ceci:git diff --name-only previous-commit | xargs -I file git show latest-commit:file
... mais là est le problème. Ce imprime le fichier (sans son nom) sur la sortie standard STDOUT. Comment cela peut-il être traduit dans le fichier zip?Afin de mettre en œuvre quelque chose d'utile pour résoudre une telle question pour moi, j'ai mis en place un simple script bash. Le script prend une révision de hachage et crée un tar.gz archive avec tous les fichiers modifiés, y compris le répertoire de la hiérarchie.
N'importe qui pourrait l'utiliser ou de le modifier, je serais heureux si cela peut aider quelqu'un.
Il suffit d'exécuter le script dans le répertoire de racine pour le dépôt git et passer de révision de hachage à la ligne de commande argumens.
Lien vers le script sur hithub
J'ai comme une solution, une ligne et assez simple:
Vous pouvez ainsi utiliser toute autre méthode d'archivage comme le goudron avec cette méthode.
pourquoi ne pas créer un git patch que vous pouvez ensuite appliquer à d'autres codebase?