git-svn: что-то я не умею его готовить

yolki

дано: основная репа на svn
группа разработчиков хочет использовать git между собой, пушить в одну гит-репу,
периодически мержить с svn-репой.
сейчас workflow такой:
на машине, где мержим, инициализация:

$ git svn init -s svn://path-to-repo/project
$ git svn fetch
$ git commit
$ git remote add origin ssh://git-server/~/project
$ git push

на машине разработчиков:

$ git clone / git pull
$ git checkout -b new_feature
... do the work ...
$ git commit -am "new feature done"
$ git push

На машине, где мержим:

$ git checkout new_feature && git pull
$ git checkout master && git pull
$ git merge new_feature
$ git svn rebase
$ git svn dcommit
$ git commit -am "merged with svn"
$ git push

Проблема: в момент git svn rebase вылезает куча мерж-конфликтов, причём over95% из них повторяются при следующей итерации. причём в 100% случаев надо принимать версию HEAD.
ЧЯДНТ?
update: Возможно, связано с тем, что не на всех машинах время идёт синхронно. на некоторых виртуалках принципиально не вкачан апдейт имени Медведева и там время на 1 час отличается.

asvsergey

А если сначала делать git svn rebase, и только потом git merge new_feature ?
Плюс для мёржа с свн можно иметь отдельную ветку, не master, и в ней сначала апдейтить из свн, потом мерджить, потом комитить в свн.
Я работаю так с git-svn и у меня нет таких проблем.

yolki

что-то у меня явно не в порядке.

или это нормальное дерево при использовании git-svn ?

Fragaria

А у тебя нет проблем с тем, что у кого-то концы строк Unix-style, а у кого-то виндовые (в смысле редактор при сохранении меняет все коны строк под свой формат) ? У нас в свое время были проблемы из-за этого при merge/rebase.

katrin2201

git svn rebase делает ребейз твоих коммитов из new_feature. То есть блобы\хеши меняются. В итоге в svn-ной ветке у тебя другие коммиты, нежели че то, что в new_feature.
Решить очень просто - делай git svn fetch, потом в ветке new_feature - git rebase master, и только потом уже мердж new_feature в master и svn dcommit.

yolki

оу. похоже "не так" - это отсутствие git svn fetch ?
я что-то думал, что git svn rebase автоматом высосет новые версии из svn-репозитория

katrin2201

Высосет, ты правильно думал, только дело не в этом. Если я все правильно понял, то ты в мастер не коммитишь, и поэтому когда ты что-то подсасываешь из svn'а, ребейзить в мастере нечего.
Дело именно в очередности мерджей, из-за которой и получается, что гит пытается одни и те же ченджи по многу раз накатить.

yolki

можешь свой workflow описать?

katrin2201

Предположим, у нас в master лежит давно не обновлявшийся свн. new_feature отбранчевано от master и поверх накоммитили еще своего. Теперь мы хотим унести это в свн.
git checkout master
git svn fetch
git checkout new_feature
git rebase master
git checkout master
git merge new_feature
git svn dcommit
Фактически, это аналог того, что получилось бы, если бы ты коммитил свои ченджи не в отдельную ветку, а туда же в мастер, и делал git svn rebase.
Оставить комментарий
Имя или ник:
Комментарий: