filter-branch для удаления лишнего каталога

Я переношу несколько репозиториев Subversion на Git, но они были настроены немного странно: стандартная структура ствола / ветвей / тегов находится в нескольких подкаталогах репозитория. Оба тега / branch и / являются пустыми, поэтому при импорте git-svn остались только магистральные каталоги.

svn/
  proj1/
    trunk/
      src/
  proj2/
    trunk/
      src/

Я хотел бы использовать git filter-branch , чтобы удалить лишние папки ствола, но оставить остальные нетронутыми:

svn/
  proj1/
    src/
  proj2/
    src/

Основываясь на последнем примере в документации , это что у меня есть на данный момент:

git filter-branch --index-filter \
    'git ls-files -s | sed "s-/trunk/-/-" |
        GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
            git update-index --index-info &&
     mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD

Мне кажется, что sed выполняет свою работу, поскольку этот ввод:

100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0       proj1/trunk/src/file1.txt

Выдает следующий вывод:

100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0       proj1/src/file1.txt

Однако, когда я запускаю всю команду, Я получаю следующую ошибку:

Rewrite e00c119cfb755f741dc0e17c36d36bc2ddd27562 (1/42)mv: cannot stat `/c/dev/R
epo/.git-rewrite/t/../index.new': No such file or directory
index filter failed: git ls-files -s | sed "s-/trunk/-/-" |
            GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
                git update-index --index-info &&
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"

Есть идеи? Я использую git версии 1.7.3.1.msysgit.0 в Windows.

Обновление: Теперь при использовании git версии 1.9.0.msysgit.0 аналогичная ситуация приводит к другой ошибке (примечание .git-rewrite не существует перед выполнением команды):

rm: cannot remove `c:/Path/to/svn/.git-rewrite/revs': Permission denied
rm: cannot remove directory `c:/Path/to/svn/.git-rewrite': Directory not empty

То же самое исправление в конечном итоге сработало.

10
задан dahlbyk 28 September 2015 в 14:10
поделиться