Git: comment obtenir tous les fichiers modifiés et les nouveaux fichiers dans un dossier ou un fichier zip?

Comme ma question le dit, après avoir modifié des fichiers et ajouté de nouveaux fichiers dans mon référentiel, je valide normalement les fichiers avec git , mais parfois j’ai besoin de tous les fichiers modifiés / modifiés dans un dossier pour des raisons d’organisation.

Une option?

En supposant que vous voulez dire que vous ne vous êtes pas encore engagé, et que vous voulez empaqueter tous les fichiers qui ont actuellement des modifications locales, vous pouvez obtenir la liste des fichiers modifiés avec les fichiers git ls-files --modified . Si vous voulez les fichiers qui ont été modifiés par le dernier commit, vous pouvez utiliser git diff --name-only HEAD^ . Où tu vas de là, c’est à toi. Exemples:

 zip modified-files.zip $(git ls-files --modified) cp $(git ls-files --modified) ../modified-files 

Notez que cela utilise actuellement les versions des fichiers dans l’arborescence de travail.

Si vous avez des espaces dans les noms de fichiers, vous devrez vous attaquer un peu plus.

(Bien sûr, en fonction de ce que vous essayez vraiment de faire, vous recherchez peut-être un git stash , qui cache tous les fichiers modifiés et vous laisse un arbre de travail propre, ou vous pouvez simplement créer une twig temporaire à valider. à.)

Pour faire exactement ce que vous avez demandé (en supposant que vous vous êtes déjà engagé et que vous souhaitiez créer une archive des fichiers modifiés par le dernier commit), vous pouvez faire:

 git archive --format=zip HEAD `git diff HEAD^ HEAD --name-only` > a.zip 

Si vous avez supprimé des fichiers dans un commit, pour éviter une erreur pathspec, utilisez --diff-filter=d :

 git archive --format=zip HEAD `git diff --diff-filter=d HEAD^ HEAD --name-only` > a.zip 

Mais peut-être que vous voulez créer un patch en utilisant:

 git diff HEAD^ HEAD > a.patch 

et appliquer ce patch là où vous en avez besoin en utilisant:

 patch -p1 < a.patch 

Bien entendu, l'application d'un correctif ne fonctionne que si votre répertoire cible contient déjà l'ancienne version de votre référentiel.

Si vous utilisez TortoiseGIt, cela fournit aussi cela.
Choisissez le dossier, dans l’explorateur
Faites un clic droit, choisissez le menu, TortoiseGit-> Afficher le journal.

Sélectionnez le répertoire de travail et la dernière version validée.
Clic-droit. Comparer les révisions. Sélectionnez les fichiers que vous souhaitez enregistrer / exporter.
Clic-droit. Exporter vers un dossier. Terminé.

Voici un script qui peut rendre ce processus beaucoup plus facile, il va copier tous les fichiers modifiés dans les répertoires définis et également gérer la structure de répertoires de base de code.

exécuter: sh scr.sh

================================================

 #!/bin/sh FILES=`git ls-files --modified` for x in $FILES do prev_dir=$PWD echo "MY Dir = $prev_dir" mkdir -p $1/$x cd $1/$x cd ../ rm -r * cp $prev_dir/$x ./. cd $prev_dir done 

================================================

 mkdir -p /c/temp/blah && cp $(git diff  --name-only) /c/temp/blah 

J’utilise Git Bash sous Windows.

Zip les fichiers modifiés et nouvellement créés dans le repository git

 zip mychanges.zip $({ (git ls-files --others --exclude-standard) ; (git ls-files --modified)})