git fast-import — как обрабатывать подкаталоги при импорте из файлов резервных копий

#git #git-fast-import

#git #git-fast-import

Вопрос:

Я пишу интерфейс-импортер для git-import для создания репозитория из нашего «flat-file-version-control».

Мне удалось обойти мои каталоги, и я генерирую выходные данные фиксации для всех файлов, которые я могу найти в каталогах.

Но я не понимаю, как обрабатывать подкаталоги. Что-то вроде этого:

 /dir
|
 -- file
|
 -- /subdir
    |
     -- another_file
  

Насколько я понимаю, мне пришлось бы сначала импортировать subdir, а затем another_file . Но я не понимаю из документации, как этого добиться.

Документация git о встроенном формате данных во время фиксации сообщает мне:

040000: подкаталог. Подкаталоги могут быть указаны только с помощью SHA или через метку дерева, установленную с помощью —import-marks .

Как мне получить этот SHA-хэш?

Или я здесь все усложняю? Я помню, что мне не нужно было делать git add для каталогов, поскольку они добавляются вместе с файлами в них. Достаточно ли добавлять файлы только из моего исходного каталога?

Ответ №1:

В этом нет ничего особенного, просто укажите полный путь от корня в коммите:

 blob
mark :14
data 34
File 6 - rev 1
SubDir: TestFiles1

commit refs/heads/master
mark :15
author abc <a.bc@xxx.com> 1507618733  0200
committer abc <a.bc@xxx.com> 1507618733  0200
data 3
C3
from :10
M 100644 :11 TF1.txt
M 100644 :12 TF3.txt
M 100644 :13 TF5.txt
M 100644 :14 TestFiles1/TF6.txt
  

Вы можете просто проверить семантику / синтаксис fast-import при создании необходимой структуры git вручную и выполнить быстрый экспорт в файл. В этом случае я наткнулся на тот факт, что для быстрого импорта требуется ‘/’, а Windows использует »…