Что означает эта ошибка svn2git?

Я пытаюсь импортировать мой репозиторий из svn в git с помощью svn2git, но кажется, что он не работает, когда он попадает в ветвь. В чем проблема?

Found possible branch point: https://s.aaa.com/repo/trunk/project => https://s.aaa.com/repo/branches/project-beta1.0, 128
Use of uninitialized value in substitution (s///) at /opt/local/libexec/git-core/git-svn line 1728.
Use of uninitialized value in concatenation (.) or string at /opt/local/libexec/git-core/git-svn line 1728.
refs/remotes/trunk: 'https://s.aaa.com/repo' not found in ''

Running command: git branch -l --no-color
* master
Running command: git branch -r --no-color
  trunk
Running command: git checkout trunk
Note: checking out 'trunk'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at f4e6268... Changing svn repository in cap files
Running command: git branch -D master
Deleted branch master (was f4e6268).
Running command: git checkout -f -b master
Switched to a new branch 'master'
Running command: git gc
Counting objects: 450, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (368/368), done.
Writing objects: 100% (450/450), done.
Total 450 (delta 63), reused 450 (delta 63)

Ответы

Ответ 1

Мне пришлось открыть файл .git/config и удалить все записи ветвей и тегов в разделе svn-remote и запустить команду git svn clone ', чтобы эта ошибка исчезла. По-видимому, если я запустил эту команду несколько раз (как правило, останавливается и повторно запускается из ревизии), записи ветки/тега добавляются в конфигурационный файл вместо повторного использования, что вызывает ошибку.

Ответ 2

Я выполнял некоторые инструкции svn до git когда я столкнулся с тем же сообщением об ошибке. Ошибка при выполнении этой команды:

git svn clone file:///pathto/repo /pathto/new-git-repo –-no-metadata -A authors.txt -t tags -b branches -T trunk

После возникновения ошибки я редактировал файл .git/config файл следующим образом:

tags = tags/*:refs/remotes/svn/tags/*
branches = branches/*:refs/remotes/svn/*

- >

tags = tags/*:refs/remotes/svn/tags/*
branches = branches/*:refs/remotes/svn/branches/*

I.e., я просто отформатировал строку "браки", чтобы она была похожа на строку "теги". Затем я снова запустил команду. В результате этого процесса было создано действительное репо git с удаленными ветвями.

Ответ 3

В вашем репозитории subversion нет стандартной структуры соединительных линий/ветвей/тегов. Укажите альтернативные места для разветвления с помощью параметров --branch, --tag, --trunk.

Ответ 4

Чтобы устранить проблемы, вам необходимо преобразовать импортированные удаленные ветки и теги в локальные.

Раздел от Скотта Чаконе (PRO GIT): Исходная ссылка: http://progit.org/book/ch8-2.html:

To move the tags to be proper Git tags, run

$ cp -Rf .git/refs/remotes/tags/* .git/refs/tags/
$ rm -Rf .git/refs/remotes/tags

This takes the references that were remote branches that started with tag/ and makes them real (lightweight) tags.

Next, move the rest of the references under refs/remotes to be local branches:

$ cp -Rf .git/refs/remotes/* .git/refs/heads/
$ rm -Rf .git/refs/remotes

Это сработало для меня отлично.

Ответ 5

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

$ svn2git http://repos --branches branches --tags tags --trunk trunk

Затем он работал, как ожидалось.