2010-03-30 4 views
6

J'ai besoin de générer un changelog de sortes entre deux Tags dans un projet contrôlé en utilisant git, plus précisément le code source android. Cette liste devrait inclure tous les fichiers/répertoires/etc qui ont été édités, déplacés, renommés, supprimés, créés.Créer une liste des fichiers/répertoires/etc. Modifiés utiliser git entre deux tags

Toute aide serait géniale. Et si vous avez un moyen de le faire sur l'ensemble de la source Android à la fois ... encore mieux.

+0

pour clarifier: Je m'en fous Quels changements ont été apportés dans les fichiers seulement qu'ils ont changé. J'ai cependant besoin de savoir ce qui a changé pour les répertoires et les liens symboliques. – dan

+1

Serait http://stackoverflow.com/questions/1038589/how-do-i-find-common-files-changed-between-git-branches aide? – VonC

+0

Eh? Vous avez besoin de fichiers mais vous n'avez pas besoin de fichiers? Votre question n'est pas très claire ... – drozzy

Répondre

6

Si vous avez besoin pour trouver des fichiers différents:

git diff --name-only <tag1> <tag2> 

Si vous avez besoin de trouver tous les fichiers modifiés:

git log --name-only --pretty=format: <tag1>..<tag2> | 
    grep -v '^$' | sort | uniq 

Le --pretty=format: est de supprimer les informations d'impression sur les validations et d'imprimer uniquement la partie diff. Notez que dans le cas de git log l'ordre de <tag1> et <tag2> questions.

+0

Cela a certainement aidé et je pense que cela résout mon problème pour la plupart. Un couple de suivi de questions. 1) existe-t-il un moyen de limiter cela à l'affichage d'un seul type d'élément (c'est-à-dire uniquement des répertoires) ou à tout le moins d'étiqueter le type d'élément. 2) vous mentionnez que l'ordre des étiquettes est important, pouvez-vous me diriger vers un document qui explique comment la commande fait une différence afin que je puisse déterminer mon ordre correct. (Je continuerai à rechercher ceci tout seul et poster si je trouve ce que je recherche indépendamment) – dan

+0

éditez l'exemple ci-dessus pour lire (c'est-à-dire seulement les liens symboliques) comme ayant lu le commentaire ci-dessous que je verrai besoin d'une commande différente pour trouver les répertoires modifiés – dan

+0

@dan: Re 2.) dans le cas de "' git log .. '" il montre l'histoire de plus tard tag2 à tag1, ie tag1 doit être antérieure à tag2. Eh bien, vous pouvez toujours utiliser symétrique ' ... ' qui montre les changements de l'ancêtre commun ... –

1

Comme je l'ai mentionné dans les commentaires, "How do I find common files changed between git branches?" est la principale solution ici:

git log [--pretty=<format>] --name-only tag1..tag2 

ou

git diff --name-only tag1 tag2 

(également mentionné dans Gitology recipe)

MAIS: comme mentionné dans "How to get a list of directories deleted in my git repository? ", Git suit uniquement le contenu des fichiers, pas les répertoires eux-mêmes.

Pour inclure des informations sur les répertoires, vous devez commencer à jouer avec git diff-tree.

un répertoire qui a été créé ou enlevé aura 040000 dans la seconde ou la première colonne et 000000 dans la première ou la seconde colonne, respectivement. Ce sont les 'modes' d'entrée de l'arbre pour les entrées de gauche et de droite.

Quelque chose comme (selon Charles Bailey):

git diff-tree -t origin/master master | grep 040000 | grep -v -E '^:040000 040000' 
+0

je vous remercie pour la réponse et le lien vers des informations complémentaires Je vais regarder par-dessus eux et voir si elles fonctionnent pour ma situation unique. – dan

Questions connexes