Получить все версии файла в git - PullRequest
5 голосов
/ 25 ноября 2011

У меня есть репозиторий git с несколькими файлами в нем.

Мне нужно получить все ревизии (не отличия) определенного файла foo.bar и сохранить его как что-то вроде 0001-{date}-{sha}-foo.bar0002-{date}-{sha}-foo.bar и т. Д. В новой папке.

Как я могу это сделать?

Ответы [ 2 ]

7 голосов
/ 25 ноября 2011

Предполагая, что вы хотите указать дату автора и отметку времени unix в порядке:

i=0
git log --reverse --format=%H\ %at $file |
while read hash date; do
  git show $hash:$file > $(dirname $file)/$i-$hash-$date-$(basename $file)
  : $((i += 1))
done

должно делать то, что вы хотите.Измените% в спецификаторе, если вы хотите разные даты, но отметка времени unix хороша, так как вам не нужно иметь дело с пробелами в имени.Очевидно, есть способы справиться с этим, если вы выберете.

4 голосов
/ 25 ноября 2011

Вы можете использовать git log --pretty="%ct %H" -- foo.bar, что даст вам что-то вроде:

1322212187 f75e724eec4e11a720d4620b3ca09eff91bb754e
1311666567 d6b578f1b778c67d78322d914d3ab46e02d12f6c
1311584563 cb76c3e39553cf20c9e96ad3d2c963b905d19180
1311321178 bec391005805ca01e9c7b11032b456d426f4fa52
1311321089 b29afbf8c4ca7e8f178cec981b5d3d14f0abeb15
1311081641 74d5747f2094a8f1696344c6c2b94244e52c7cc9

Первый столбец - это отметка времени коммита (unix), а второй - SHA коммита.Вы можете изменить формат даты, если хотите что-то другое ('%ct' в аргументе --pretty, RTFM для просмотра параметров), если хотите.Исходя из этого, было бы легко написать команды git, чтобы проверить конкретную ревизию этого конкретного файла и скопировать ее в соответствии с вашим соглашением об именах, используя шеллскрипт - оставленный читателю в качестве упражнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...