Исправить историю удаленной ветви git-svn, в которой отсутствует точка ветвления
Я использую git-svn
взаимодействовать с пультом svn
репозиторий, который следует традиционному расположению ствола, тегов и ветвей.
Там есть филиал в svn
тот git
пропустил историю. Я знаю историю быть:
r0--r1--r2---r4---r6 remotes/trunk
\
r3---r5-- remotes/BRANCH_NAME
Но git, похоже, упустил точку ветвления и думает, что история такова:
r0---r1---r2-----r4---r6 remotes/trunk
r0'--r1'--r2'--r3--r5--- remotes/BRANCH_NAME
куда r0'
, r1'
, а также r2'
являются копиями r0
, r1
, а также r2
которые появляются в Git, но не в SVN. В свн есть ровно один r0
совершить.
Первая запись в .git/svn/refs/remotes/BRANCH_NAME/unhandled.log.gz
может предложить экспертам подсказку:
r3
+dir_prop: . svn:mergeinfo /product/trunk/src_py:371-436%2C438-532
Как мне понять, что r3
был разветвлен от r2
и покончить с r2'
, r1'
, а также r0'
?
Для дополнительного кредита: есть ли общий способ переписать взгляд git на историю SVN, который не будет забит git svn fetch
и другие?
2 ответа
Оказалось, что это git-svn-id
URL в журнале сообщений, который отличался, тем самым изменяя SHA1. Например http://hostname/repo
а также http://hostname.org.ext/repo
,
я использовал git branch-filter --msg-filter
обновить git-svn-id
маркер в каждом коммите и проблема ушла. (И конечно побежал git gc
вычистить все лишние коммиты из моего репо)
Я бы порекомендовал вам использовать SmartGit вместо git-svn. Он правильно обрабатывает такие SHA1-изменения.
Или же, если у вас есть доступ к serevr SVN, установите SubGit в него. SubGit создаст связанный Git-репозиторий, с которым вы можете работать. Репозитории SVN и Git всегда будут синхронизированы. Таким образом, вы можете использовать только интерфейс Git.