ElleSolomina
@ElleSolomina
HedgehogInTheCPP

Как добавить пустые папки при ипорте из SVN в Git скриптом под Windows?

Суть проблемы в том, что мне необходимо перенести несколько репозиториев с SVN на Git под Windows. В части репозиториев есть пустые папки и они критичны для проектов и эти папки нельзя удалить не поломав проект.

У команды git svn clone есть параметр --preserve-empty-dirs, я его использую с доп. параметром --placeholder-filename=.gitkeep , но это не работает, никак.

Выглядит это примерно так:

D system/drivers/twi/.gitkeep
Use of uninitialized value $rec in scalar chomp at C:/Program Files/Git/mingw64/
share/perl5/Git.pm line 557, <$fh> chunk 1.
D system/drivers/twi/
M system.svc
W: -empty_dir: system/drivers/twi


Как итог папка не добавляется не в историю коммитов что уже проблема ибо невозможно сделать откать да и после полного извлечения тоже никак не добавляется.

Я пытался наколхозить костыль на механизм, ну т. е. написать команду которая хотя бы постфактум добавляла папки и у меня получилась два куска биоразложимого кода которые даже близко не делают то что нужно:

Этот кусок создаёт файлы с нулевым размером, которые отказывается обрабатывать Git:
for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do (fsutil file createnew %%d/.gitkeep 0 && echo.>%d/.gitkeep)


Этот уже делает файл размером 2 байта:
for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do (echo.>%d/.gitkeep)


Но в обоих кусках кода есть проблема с тем, что файлы создаются во всех папках, а не только в пустых. Кроме того мне не хватает мозгов исключить папку .git и этот код гадит и туда. В общем я просто прошу более опытных людей помочь решить задачу ибо дно достигнуто, в идеале показать мне где я не прав при использовании git svn clone ну или помочь дописать костыль чтобы хоть как то закоммититься.

P.S. пока я не хочу делать решение под Linux или WSL, поэтому желательно сделать нативно из под Windows. Но если есть готовый костыль под Linux то я был бы рад и ему.
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
ElleSolomina
@ElleSolomina Автор вопроса
HedgehogInTheCPP
Никак (мне лень извращаться с этим под Windows с ущербным и неудобным синтаксисом). Сделал костыль под Ubuntu:

echo The crutches for git svn clone --preserve-empty-dirs command, because it is not working properly.

find . -type d -empty -not -path "./.git/*" -exec echo blablabla>.gitkeep \;

git add --all
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы