2010-03-30 2 views
6

Мне нужно создать список изменений между двумя тегами внутри проекта, управляемого с помощью git, в частности, исходного кода Android. Этот список должен включать любые файлы/каталоги/etc, которые были отредактированы, перемещены, переименованы, удалены, созданы.Создайте список измененных файлов/каталогов/etc. используя git между двумя тегами

Любая помощь будет отличной. И если у вас есть способ сделать это по всему источнику Android сразу ... еще лучше.

+0

, чтобы уточнить: мне все равно. Какие изменения были внесены только в файлы, которые они изменили. Однако мне нужно знать, какие изменения были внесены в каталоги и символические ссылки. – dan

+1

Может ли http://stackoverflow.com/questions/1038589/how-do-i-find-common-files-changed-between-git-branches помочь? – VonC

+0

Э? Вам нужны файлы, но вам не нужны файлы? Ваш вопрос не очень ясен ... – drozzy

ответ

6

Если вам нужно узнать, какие файлы различаются:

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

Если вам нужно найти все измененные файлы:

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

--pretty=format: заключается в том, чтобы прервать печать информации об фиксации и распечатать только часть diff. Обратите внимание, что в случае git log имеет значение <tag1> и <tag2>.

+0

Это определенно помогло, и я думаю, что он решает мою проблему по большей части. Несколько вопросов. 1) есть ли способ ограничить это, чтобы показать только один тип элемента (т. Е. Только каталоги) или, по крайней мере, метку типа элемента. 2) вы упомянули, что порядок тегов имеет значение, можете ли вы указать мне документ, который объясняет, как порядок имеет значение, поэтому я могу определить свой правильный порядок. (Я продолжу исследовать это все самостоятельно и отправлю обратно, если найду то, что ищу независимо) – dan

+0

отредактируйте приведенный выше пример, чтобы читать (т. Е. Только символические ссылки), как прочитав приведенный ниже комментарий. Я вижу, что я нужна другая команда, чтобы найти измененные каталоги – dan

+0

@dan: Re 2.) в случае «' git log .. '' он показывает историю из более позднего tag2 в tag1, т. е. tag1 должен быть раньше, чем tag2. Ну, вы всегда можете использовать симметричный ' ... ', который показывает изменения от общего предка ... –

1

Как уже говорилось в комментариях, "How do I find common files changed between git branches?" является основным решением здесь:

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

или

git diff --name-only tag1 tag2 

(также упоминается в Gitology recipe)

НО: как указано в "How to get a list of directories deleted in my git repository? ", Git только отслеживает содержимое файлов, а не самих каталогов.

Чтобы включить информацию о каталогах, вам необходимо начать играть с git diff-tree.

любой каталог, который был создан или удален будет 040000 во втором или первом столбце и 000000 в первом или втором столбце соответственно. Это «режимы» ввода дерева для левой и правой записей.

Нечто подобное (в соответствии с Charles Bailey):

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

Благодарим вас за ответ и ссылку на дополнительную информацию. Я просмотрю их и посмотрю, работают ли они для моей уникальной ситуации. – dan