2016-08-29 4 views
0

У меня около 160 тыс. Транзакций, каждый из которых обновляется 3 файлами (используется github в качестве веб-сайта), и я ищу способ получить файлы, чтобы затем я мог помещать содержимое в реальная БД.Получить файлы с каждого git commit

Мой вопрос в том, как я могу получить (загрузить?) Обновленные файлы из каждой фиксации, сохранив их в папке с меткой времени/commitSHA, добавленной к имени, чтобы избежать конфликтов имен.

Возможно ли это с git? Я знаю, что могу использовать сайт github, чтобы увидеть файлы и что изменилось, но проблема в том, что существует более 160 тыс. Коммитов.

+0

Я понимаю, что вы пытаетесь получить каждую версию файла на 160 тыс., Верно? –

+0

Исправить. Как только у меня есть файлы, я знаю, что с ними делать, их проблема - проблема. – Tribe

ответ

1

Это не самое элегантное решение, но оно должно работать.

Во-первых, вы должны получить локальную копию репозитория с помощью:

git clone <repo-url> 

Вы получаете <repo-url> со страницы GitHub вашего проекта (проверьте «Clone или скачать» кнопку).

Тогда вы cd в местный репозиторий и запустить что-то вдоль этих линий:

for rev in $(git log --format=%H); do 
    git checkout $rev -- file1 
    cp file1 ../history/file1-$rev 
done 

Убедитесь, что вы создаете каталог history заранее. Дублируйте две строки внутри цикла для каждого файла, который вам нужно получить.

Запустить git reset --hard в конце, чтобы предоставить хранилище в исходном состоянии.

Если вам также нужна отметка времени для файла, вы можете получить ее с помощью git log --format=%ct file1. Заменить команду cp с:

ts=$(git log --format=%ct $rev file1) 
cp file1 ../history/file1-$rev-$ts 

Проверьте documentation для другого файла или передать свойства, которые можно получить с помощью get log.

+0

Спасибо всем вам (larsks, Fabrizio Migotto, и вам аксиак). Создание этого было правильным только потому, что оно имеет все шаги. Теперь я могу подождать, пока я загружаю файлы 500Kish txt! – Tribe

1

После того как вы локальная рабочая копия репозиторий *, вы можете получить файлы из любого мерзавца совершать только проверяя, что совершает, как:

git checkout 1e6c98511d9154bfdc49a31fd26229953df0bd70 

Таким образом, чтобы получить файлы из каждых зафиксируйте в своей истории проекта, вам просто нужно (a) создать список коммитов для вашего проекта, а затем (b) выполнить итерацию по этому списку, проверить каждую фиксацию и обработку файлов.

Команда git rev-list HEAD сгенерирует список всех фиксаций текущей ветви (от самой новой до самой старой). Если вы хотите обработать эти файлы в прямом порядке, вы можете передать это значение tac, чтобы отменить список, например.

for rev in $(git rev-list HEAD | tac); do 
    git checkout $rev 
    ...do something here... 
done 

* запустив git clone <repourl>

1

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

https://git-scm.com/

Тогда вам придется клонировать репозиторий в консольном запуске git:

git clone https://github.com/username/repositoryname.git

После этих шагов вы сможете перемещаться в разных записях, как объясняет @larsks.

Для перечисления каждой фиксации конкретного файла:

List all commits for a specific file

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

  • Нет связанных вопросов^_^