Git: хотите перебрать все коммиты на ветке и перечислить файлы в каждом коммите - PullRequest
11 голосов
/ 10 мая 2011

Мне нужно написать скрипт, который будет

  1. перебирать все коммиты на ветке, начиная с самого последнего
  2. для каждого коммита, перебирайте все файлы в коммите
  3. если он находит файл типа hbm.xml, сохраните коммит в файл и выйдите.

У меня есть скрипт для шага 2:

for i in `git show --pretty="format:" --name-only SHA1 | grep '.*\.hbm\.xml' `; do
    # call script here.....
    exit
done

Теперь мне нужно выяснить шаг 1.

Ответы [ 2 ]

16 голосов
/ 10 мая 2011

Что-то вроде:

for commit in $(git rev-list $branch)
do
    if git ls-tree --name-only -r $commit | grep -q '\.hbm\.xml$'; then
        echo $commit
        exit 0
    fi
done

Обратите внимание, что git show будет перечислять только те файлы, которые были изменены в этом коммите, если вы хотите узнать, есть ли путь, соответствующий определенному шаблону в коммите, вам нужно использовать что-то вроде git ls-tree.

10 голосов
/ 10 мая 2011

git rev-list перечислит все ревизии, доступные для данного коммита, в обратном хронологическом порядке, так что вы можете передать ему имя ветки, чтобы получить список для этой ветки назад:

$ git rev-list master                                                                                    
a6060477b9dca7021bc34f373360f75064a0b728
7146d679312ab5425fe531390c6bb389cd9c8910
53e3d0c1e1239d0e846b3947c4a6da585960e02d
a91b80b91e9890f522fe8e83feda32b8c6eab7b6
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...