2013-07-11 2 views
4

У меня есть документация .ai файл с версией по моему проекту, теперь я хочу, чтобы экспортировал каждый «моментальный снимок» хранилище Git для этого файла.Экспортировать каждую ревизию одного файла из репозитория Git?

Любое периодическое/полуавтоматическое решение?

У меня есть тонны коммитов, у меня нет большого намерения экспортировать их по одному.

+0

определить «экспорт» - вы хотите их в другом репо? в архиве TAR? в папке? на сервере? –

+0

C.) в папке. – Geri

ответ

2

Быстрый, но так как никто не придумал что-то:

mkdir snapshots 
FILE=YourFile.ai 
i=1 
for COMMIT in $(git log --oneline $FILE | cut -f 1 -d " "); do 
    git checkout $COMMIT $FILE; 
    cp $FILE snapshots/$i-$COMMIT.ai; 
    ((i = i + 1)) 
done 

Тогда ваш каталог snapshots содержит все версии файла. Имена состоят из номера 1..n, который увеличивается с возрастом каждой версии и соответствующей фиксацией вместе с расширением файла .ai.

P.S .: Не забудьте обновить FILE после этого (git checkout HEAD $FILE) и не добавлять моментальные снимки папки в ваш repository. :)

+0

Спасибо, обязательно попробуют. – Geri

+0

Это потрясающе. – Geri

+0

Кажется - http://prntscr.com/1f08t1 - не быть в хронологическом порядке. Как я могу обеспечить правильный заказ? Вы можете отредактировать ответ? – Geri

7

Чтобы экспортировать все версии файла в данной папке, вы можете использовать этот цикл в Bash:

for sha in `git rev-list HEAD -- path/to/file`; do 
    git show ${sha}:path/to/file > path/to/exportfolder/${sha}_doc.ai 
done 

Вы можете настроить это, конечно.

Скопируйте фрагмент в текстовый файл и замените path/to/file на фактический путь к файлу, который вы хотите экспортировать (внутри репо). Замените path/to/exportfolder на фактический путь туда, куда вы хотите экспортировать файлы (папка экспорта должна существовать). Вы также можете изменить экспортированное имя файла, в этой версии он использует формат «_doc.ai»; просто убедитесь, что используете кавычки, если хотите использовать файл или имя пути с пробелами.

Эта версия начнется с текущей проверенной ревизии (HEAD) и перейдите по истории ко всем ревизиям, достижимым с HEAD в дереве родословной. Это означает, что вы должны проверить самую последнюю версию, с которой вы хотите начать экспорт.

+0

Спасибо, обязательно попробуют. – Geri

+0

+1 это должен быть принятый ответ! – eckes

+1

Это лучшее решение, чем версия, использующая 'checkout', потому что она не путается с текущей версией. Caveat code-runnor. –

Смежные вопросы