Ответ 1
Ниже команда выполнила задание:
git svn clone -r HEAD <url>/root/projectA
У меня есть svn-репозиторий с структурой проекта:
/root/projectA/trunk
/root/projectA/branches
/root/projectA/tags
/root/projectB/trunk
/root/projectB/branches
/root/projectB/tags
Я хочу клонировать projectA. Когда я запускаю:
git svn clone -r <revision number>:HEAD <url>/root/projectA
Я не получаю ошибок и репозиторий git создается в новом каталоге projectA. Однако каталог пуст. Мне не хватает чего-то?
Ниже команда выполнила задание:
git svn clone -r HEAD <url>/root/projectA
Моя проблема заключалась в использовании -s
или --stdlayout
, потому что у моего svn-репо не было стандартного макета (ствол, ветки, теги).
У меня была та же проблема, и она была решена с использованием аргумента -no-metadata. В вашем случае это будет
git svn clone -r <revision number>:HEAD <url>/root/projectA --no-metadata
Для всех, включая параметр authors-file
, git svn clone
будет полностью останавливаться, если он встречает автора без значения поиска в предоставленном файле авторов. Если вы не обращаете внимания, git "alert" для этого может показаться, что репо закончило клонирование и не заявляет, что процесс не завершен. Каталог repo будет пустым, кроме .git.
Если вы добавите отсутствующего автора, затем запустите команду exact, git продолжит работу там, где она остановилась.
Если возникла аналогичная проблема, выполнение git reset --hard HEAD 'в каталоге, казалось, создало файлы.
.git/objects был довольно большим, поэтому, я думаю, файлы были импортированы из svn в git, они просто не были извлечены или что-то в этом роде.
В моем случае операция клонирования не выполнялась должным образом. git svn clone
не удалось пройти через проверку. Как только я исправил проблему, он автоматически выполнил проверку после операции клонирования - не более пустой папки.
[Обновление] Вот что сработало в моем случае:
Попытка git svn clone --preserve-empty-dirs <repo>
не удалась для меня. После очистки сети я нашел https://www.semitwist.com/articles/article/view/the-better-svn-git-guide, в котором говорится, в частности:
Эта часть немного раздражает. Начиная с версии 1.7.7, Git имеет -preserve-empty-dirs. Проблема в том, что проклятая вещь сломана. Если вы попытаетесь использовать его как есть, вся операция, скорее всего, просто не пройдет частично. Он должен быть исправлен.
Сначала найдите файл git -svn:
$find/2 > /dev/null | grep git -svn
$find 2 > /dev/null/-type f | grep -l "Не удалось удалить"
Для меня это было в /usr/libexec/ git -core/git -svn.
Примечание. Его больше не в git -svn (по крайней мере, не в Git 2.7.0). Я нашел его в /usr/lib/perl5/vendor_perl/5.22/Git/SVN/Fetcher.pm
.
Откройте целевой файл в вашем любимом редакторе:
sudo <your-favorite-editor> path/to/file
Теперь в этом git -svn файле найдите
die "Failed to strip path
. ([В зависимости от вашей версии git] он может быть где-то рядом с линией 4583. Изменитеdie
на
git svn clone --preserve-empty-dirs <repo>
должен теперь вести себя так, как ожидалось.
Я не мог понять, работает ли это, но попробуйте:
git svn clone --stdlayout <url>/root/projectA/
Если вы используете транспорты HTTP или HTTPS (т.е. ваши URL-адреса репозитория начинаются с HTTP [s]), вам необходимо указать действительное имя SVN.
git svn clone -s https://svn.example.com/root/projectA --username <SVN username>
-s - это псевдоним для -stdlayout
Однако мне нужно было только указать параметр --username один раз и последующие звонки без него. Я думаю, он кэширует имя пользователя.