Обсуждение:Git-svn: различия между версиями

Материал из ALT Linux Wiki
(Изложение сути проблемы)
 
(несколько замечаний по ходу обсуждения с viy@ (сборка из тэгов svn))
Строка 10: Строка 10:
  git checkout master
  git checkout master


А вот это не сработало: git pull . tags/ВЕРСИЯ_ПАКЕТА, вместо этого я сделал:
А вот это не сработало: git pull . tags/ВЕРСИЯ_ПАКЕТА
 
''потому что в .git/config указано:''
 
''[svn-remote "svn"]''
''  url = https://pymol.svn.sourceforge.net/svnroot/pymol''
''  fetch = trunk:refs/remotes/trunk''
''  branches = branches/*:refs/remotes/*''
''  tags = tags/*:refs/remotes/tags/*''
 
Вместо этого я сделал:


  git pull . refs/remotes/trunk
  git pull . refs/remotes/trunk
Для ВЕРСИЯ_ПАКЕТА, соответственно, будет
git pull . refs/remotes/tags/ВЕРСИЯ_ПАКЕТА


для того, чтобы получить исходники наиболее свежие. В .gear/rules прописал:
для того, чтобы получить исходники наиболее свежие. В .gear/rules прописал:
Строка 19: Строка 33:


После этого сборка в gear прошла успешно.
После этого сборка в gear прошла успешно.
viy@: ''это плохо. тем что человек не может повторить сборку''
''например вчера сборка проходила успешно, а сегодня в транк закоммитили''
''1.1 alpha, которая в упор не собирается. а в спеке обман -- написано 1.0''.
Нужно либо явно задавать тэг (refs/remotes/tags/ВЕРСИЯ_ПАКЕТА),
''либо делать сборку из git (убрать refs/remotes/trunk:)''
Либо просто создавать в другом бранче (или в самом master) новый тэг и от него уже плясать.


Возникли трудности с заливкой локального репозитория на git.alt. Стандартная часть прошла без вопросов:
Возникли трудности с заливкой локального репозитория на git.alt. Стандартная часть прошла без вопросов:

Версия от 11:13, 23 марта 2009

Честно говоря, в лоб это не работает, нужна творческая переработка. Опишу на своём примере. Был репозиторий pymol вполне обычным: в бранче upstream исходники апстрима, в бранче master - всё остальное. При помощи git-svn решил сделать более правильно (т.е. чтобы не заморачиваться каждый раз вытягиванием нового снапшота, укладыванием его в бранч upstream и т.д.):

git checkout upstream
rm pymol -fR
git svn init -s https://pymol.svn.sourceforge.net/svnroot/pymol
git svn fetch

Без второй строки (удаление старых исходников) операция fetch вываливается из-за конфликтов. Перенос исходников из подкаталога pymol в корень бранча делать не стал, ибо смысла не увидел, git-svn сам именно в этот подкаталог исходники и положил.

git checkout master

А вот это не сработало: git pull . tags/ВЕРСИЯ_ПАКЕТА

потому что в .git/config указано:
[svn-remote "svn"]
  url = https://pymol.svn.sourceforge.net/svnroot/pymol
  fetch = trunk:refs/remotes/trunk
  branches = branches/*:refs/remotes/*
  tags = tags/*:refs/remotes/tags/*

Вместо этого я сделал:

git pull . refs/remotes/trunk

Для ВЕРСИЯ_ПАКЕТА, соответственно, будет

git pull . refs/remotes/tags/ВЕРСИЯ_ПАКЕТА

для того, чтобы получить исходники наиболее свежие. В .gear/rules прописал:

tar.bz2: refs/remotes/trunk:@name@

После этого сборка в gear прошла успешно.

viy@: это плохо. тем что человек не может повторить сборку
например вчера сборка проходила успешно, а сегодня в транк закоммитили
1.1 alpha, которая в упор не собирается. а в спеке обман -- написано 1.0.
Нужно либо явно задавать тэг (refs/remotes/tags/ВЕРСИЯ_ПАКЕТА),
либо делать сборку из git (убрать refs/remotes/trunk:)

Либо просто создавать в другом бранче (или в самом master) новый тэг и от него уже плясать.

Возникли трудности с заливкой локального репозитория на git.alt. Стандартная часть прошла без вопросов:

git push --all git.alt:packages/pymol.git -f
git push --tags git.alt:packages/pymol.git -f

Опция -f понадобилась из-за тех же конфликтов, о которых выше. Дальше пробовал (как описано здесь) поместить в refs/svn, ибо мне такой вариант показался более подходящим по смыслу:

git push origin refs/remotes/trunk:refs/svn/trunk
git push origin 'refs/remotes/tags/*:refs/svn/tags/*'
git push origin 'refs/remotes/branches/*:refs/svn/branches/*'

Этот вариант тоже нерабочий, поэтому сделал, как сказано там же, но чуть выше:

git push origin refs/remotes/trunk:refs/remotes/trunk
git push origin 'refs/remotes/tags/*:refs/remotes/tags/*'
git push origin 'refs/remotes/branches/*:refs/remotes/branches/*'

Но осталось одно очень досадное недоразумение: вся история из svn попала в shortlog бранча master, вытеснив далеко вниз то, что желательно как раз на виду оставить. Пока не выяснил, поможет ли проблеме выполнение команды git checkout master не в тот момент, где я делал, а уже после git pull . refs/remotes/trunk (там ещё после checkout придётся сделать gear-merge, видимо).

real 05:04, 23 марта 2009 (UTC)