web-dev-qa-db-fra.com

Comment avoir les noms de fichiers tels que svn log -v dans git log

Le journal de SVN a un mode "-v" qui sort les noms de fichiers des fichiers modifiés dans chaque commit, comme ceci:

jes5199 $ svn log -v 
 --------------------------------------- --------------------------------- 
 r1 | jes5199 | 2007-01-03 14:39:41 -0800 (mer., 03 janvier 2007) | 1 ligne 
 Chemins modifiés: 
 A/AUTHORS
 A /COPYING
 A /ChangeLog
 A /EVOLUTION
 A/INSTALL 
 A /MacOSX

Existe-t-il un moyen rapide d’obtenir une liste des fichiers modifiés dans chaque commit de git?

892
jes5199

Pour les noms de chemin complets des fichiers modifiés:

git log --name-only

Pour les noms de chemin complets et le statut des fichiers modifiés:

git log --name-status

Pour les chemins d'accès abrégés et un diffstat des fichiers modifiés:

git log --stat

Il y a beaucoup plus d'options, consultez la documentation .

1398
CB Bailey

REMARQUE: git whatchanged est obsolète, utilisez git log à la place

Les nouveaux utilisateurs sont encouragés à utiliser git-log [1] . La commande whatchanged est essentiellement la même chose que git-log [1] mais a pour valeur par défaut d’afficher la sortie diff du format brut et d’ignorer les fusions.

La commande est conservée principalement pour des raisons historiques; Les doigts de nombreuses personnes qui ont appris Git bien avant que git log ait été inventé en lisant la liste de diffusion du noyau Linux sont formés pour le saisir.


Vous pouvez utiliser la commande git whatchanged --stat pour obtenir une liste des fichiers modifiés dans chaque validation (avec le message de validation).

Références

139
mipadi

git show est également une excellente commande.

C'est un peu comme svn diff, mais vous pouvez lui passer un guide de commit et voir ce diff.

46
ptc

Si vous voulez obtenir les noms de fichiers uniquement sans le reste du message de validation, vous pouvez utiliser:

git log --name-only --pretty=format: <branch name>

Cela peut ensuite être étendu pour utiliser les différentes options contenant le nom du fichier:

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

Une chose à noter lors de l'utilisation de cette méthode est qu'il y a des lignes vides dans la sortie qui devront être ignorées. Cela peut être utile si vous souhaitez voir les fichiers qui ont été modifiés sur une branche locale, mais qui ne sont pas encore transférés vers une branche distante et qu'il n'y a aucune garantie que la dernière version de la télécommande a déjà été extraite. Par exemple :

git log --name-only --pretty=format: my_local_branch --not Origin/master

Affiche tous les fichiers qui ont été modifiés sur la branche locale, mais pas encore fusionnés avec la branche principale de la télécommande.

42
Hazok

Je l'utilise quotidiennement pour afficher l'historique des fichiers qui ont changé:

git log --stat --pretty=short --graph

Pour rester bref, ajoutez un alias dans votre .gitconfig en faisant:

git config --global alias.ls 'log --stat --pretty=short --graph'
36
xsor

J'utilise ceci:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

qui produit une liste de fichiers uniquement et leur état (ajouté, modifié, supprimé):

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...
15
Sofia

git diff --stat HEAD^! affiche les fichiers modifiés et le nombre de lignes ajoutées/supprimées pour le dernier commit (HEAD).

Il me semble qu’il n’existe pas de commande unique pour obtenir une sortie concise composée uniquement de noms de fichiers et de comptages de lignes ajoutés et supprimés pour plusieurs commits à la fois. J’ai donc créé mon propre script bash pour cela:

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

Pour être appelé par exemple. ./changed_files 99 pour obtenir les modifications sous une forme concise de HEAD à HEAD~99. Peut être canalisé par exemple. à less.

7
nrz

Je trouve ce qui suit est l’affichage idéal pour répertorier les fichiers modifiés par commit dans un format concis:

git log --pretty=oneline --graph --name-status
2
Peter Suwara

Une autre commande utile serait git diff-tree <hash> où hachage peut également être une plage de hachage (notée <old>..<new>notation). Un exemple de sortie:

$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile

Les champs sont:

mode source, mode dest, hachage source, hachage dest, statut, nom du fichier

Les statuts sont ceux que vous attendez: D (supprimé), A (ajouté), M (modifié), etc. Voir la page de manuel pour une description complète.

0
Omer Dagan

J'utilise généralement ceux-ci pour obtenir les journaux:

$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"
0
Gaurav