Git SVN иногда ничего не получает - PullRequest
3 голосов
/ 18 февраля 2009

Ниже ветви svn были добавлены в файл .git / config.

[svn-remote "svnb02"]
        url = https://svn/repos/Project/branches/b02
        fetch = :refs/remotes/git-svn-b02
[svn-remote "svnb03"]
        url = https://svn/repos/Project/branches/b03
        fetch = :refs/remotes/git-svn-b03

Но только "svnb03" можно получить с помощью следующей команды:

git svn fetch -R svnb03 -r HEAD

Для "svnb02" приведенная ниже команда вернется тихо, ничего не получая.

git svn fetch -R svnb02 -r HEAD

Любое приветствие будет приветствоваться.

Ответы [ 4 ]

3 голосов
/ 14 мая 2012

git svn clone также завершится сбоем, если у вашего репозитория subversion нет стандартной компоновки с транком, ветками и тегами на верхнем уровне. Если это так, реструктурируйте репозиторий, и клон git svn должен работать.

2 голосов
/ 08 декабря 2009

Это происходит, если запрошенная ревизия (HEAD) отсутствует в транке. Наши сценарии сборки автоматически помечают источник после успешной сборки, поэтому в моем случае последняя версия svn редко когда-либо указывает на ствол, поэтому я получаю много. Следующий скрипт получит последнюю измененную ревизию транка и будет использовать ее при выполнении выборки:


#! /bin/sh
URL=$1
# git-svn fails to pull files if specified revision is not in path specified
# so find the last changed revision and use that
REV=$(svn info ${URL}trunk | grep "Last Changed Rev:" | awk '{print $NF}')
[ -n "$REV" ] || {
  echo "Revision not found. Check URL"
  exit 1
}
git svn init "$URL" -s --prefix svn/
git svn fetch -r $REV
2 голосов
/ 19 февраля 2009

Возможно, ветвь HEAD не устанавливается. Посмотрите на .git/remotes/svnb02/HEAD. Если он отсутствует или не обновлен, это может объяснить вашу проблему.

У Git есть код для поиска HEAD в этой ситуации, но, очевидно, git svn нет; в работах по этому поводу есть патч .

Если все в порядке, я бы искал странную запись для переменной svn. или remote.svn. в файле конфигурации или что-то странное в каталоге .git/remotes.

Это все догадки. У странной ситуации обычно есть странное объяснение. Удачи.

РЕДАКТИРОВАТЬ - Я предполагаю, что svnb02 были новые ревизии, когда у вас была эта проблема. Ваша команда будет получать из svn, только если есть не извлеченные ревизии.

1 голос
/ 04 августа 2009

Примечание. Я новый пользователь, поэтому в моем ответе может быть только одна гиперссылка. Предположим, что BASE равен "https://svn/repos/Project".

Мой ответ не является непосредственно причиной этой проблемы, но он тесно связан и почти наверняка является фактором.

Проблема связана с тем, что вы рассматриваете ветку SVN как транк git. Я обнаружил, что новые версии git (1.6+) не позволяют вам проверять ветки или теги как ствол git. Git предполагает стандартную компоновку. В вашем случае это, вероятно, предполагает.

багажник - {BASE} / багажник / филиалы - {BASE} / филиалы / теги - {BASE} / теги /

Поскольку b02 и b03 являются дочерними элементами ветвей, он считает, что они являются ветвями, а не стволом. В более поздних версиях 1.5.x я обнаружил, что поведение не очень согласовано, но в версиях 1.6.x (особенно в более поздних версиях 1.6.x) поведение вполне воспроизводимо.

Обходное решение, которое мне очень помогло, - это явное объявление тегов и ветвей URL:

git svn init -T {BASE} / branch / b03 -b {BASE} / anydir -t {BASE} / теги git svn fetch -r33666 #, где 33666 - самая последняя версия.

После того, как я предлагаю использовать git svn rebase.

...