git-svn-rebase соглашается на тег SVN

Я только запускаю с мерзавца и использую его для взаимодействия с репозиторием SVN. svn repo находится в стандартном формате, таким образом, я настроил свою песочницу как

git svn clone <repo> -s

Весь казался прекрасным первоначально, но после нескольких переоснований, dcommits и тегов я, кажется, всегда соглашаюсь на тег SVN. Выполнение dcommit пробного прогона возвращается:

$ git svn dcommit --dry-run
Committing to http://proj.badc.rl.ac.uk/svn/badc/users/spascoe/metaconfig/tags/0.1.1 ...
diff-tree a1265119164b79cfb12d28a7059d453fb4eb13f7~1 a1265119164b79cfb12d28a7059d453fb4eb13f7

Мой .git/config:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    autocrlf = false
[svn-remote "svn"]
    url = http://proj.badc.rl.ac.uk/svn/badc
    fetch = users/spascoe/metaconfig/trunk:refs/remotes/trunk
    branches = users/spascoe/metaconfig/branches/*:refs/remotes/*
    tags = users/spascoe/metaconfig/tags/*:refs/remotes/tags/*

Ввод по абсолютному адресу вокруг в .git не помогает. Какая-либо идея, что идет не так, как надо?

1
задан spascoe 21 July 2010 в 13:20
поделиться

1 ответ

В команде git svn была ошибка, из-за которой главная ветвь могла указывать на что-то другое, кроме ствола svn, при первоначальном импорте репозитория svn. Это было исправлено в git v1.6.5 и более поздних версиях (в v1.6.5-rc0 ~ 75 , если вы проверяли git).

Если вы уже закончили проверку репозитория svn и хотите убедиться, что главная ветвь указывает на ствол svn, сделайте следующее.

ПРИМЕЧАНИЕ. В этих инструкциях предполагается, что вы зафиксировали или сохранили любые сделанные локальные изменения. Используйте git stash save , чтобы сохранить любую незавершенную работу, и git branch newbranchname , чтобы создать ветку к вашей последней фиксации.

  1. Переключитесь на главную ветку, используя git checkout master , если вы еще не там. Используйте git branch , чтобы увидеть текущую ветку, рядом с которой стоит звездочка ('*').

  2. Запустите git svn info и проверьте поле « URL: ». Если URL-адрес указывает на транк, значит, все готово. Следующий git svn dcommit выполнит фиксацию в магистраль из главной ветки.

  3. Если git svn info указывает на тег или URL-адрес ветки, запустите git log и найдите первую фиксацию с " git-svn-id: "URL-адрес, указывающий на URL-адрес вашей магистрали svn.Скопируйте 40-символьный хэш фиксации (в строке, начинающейся с «фиксации»), представляющий эту фиксацию.

  4. Сбросьте хеш фиксации в главной ветке с помощью git reset --hard commit-hash , заменив « commit-hash » хешем фиксации из шага 3.

    ПРИМЕЧАНИЕ : Этот шаг самый опасный! Убедитесь, что вы сохранили всю свою работу! При необходимости сделайте архив вашего рабочего каталога.

  5. Снова запустите git svn info , чтобы убедиться, что в поле « URL: » указано, что вы находитесь на внешней линии. В противном случае вы скопировали неправильный хеш фиксации на шаге 3. Перейдите к шагу 3 и повторите попытку.

  6. Запустите git svn rebase , чтобы обновить главную ветку до последней версии на магистрали в репозитории svn.

Совет от профессионалов: Эксперты заметят, что вы можете проанализировать строку « git-svn-id: » внизу каждого журнала фиксации, чтобы определить, находится ли конкретная фиксация в магистрали, на тег или на ветке. Таким образом, достаточно использовать git log master , чтобы проверить, указывает ли первая фиксация в основной ветке на магистральный URL вашего репозитория svn.

2
ответ дан 2 September 2019 в 22:52
поделиться
Другие вопросы по тегам:

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