Исправить историю удаленной ветви 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.

Другие вопросы по тегам