2016-01-20 3 views
0

Я запустил git filter-branch на довольно большом репо (~ 8000 коммитов), чтобы удалить определенные двоичные файлы, но теперь, когда я делаю git svn rebase, чтобы сохранить свое репо в актуальном состоянии, это приводит к огромному списку конфликтов , Я предполагаю, что это связано с тем, что обе команды включают переписывание истории.Git svn rebase приводит к конфликтам

Можно ли каким-либо образом синхронизировать с Git из SVN после моего фильтра-ветви без этих конфликтов? Будут ли в будущем возникать такие проблемы? (Я только синхронизирую один путь от SVN до Git)

+1

Как я вижу, вы ничего не можете сделать, чтобы сделать 'filter-branch' и' svn rebase' совместимыми. Вы переписываете историю, которая имеет отношение к удаленному. Было бы другой историей, если бы вы удалили пульт после 'filter-branch', в этом случае это просто не имело бы значения, но в его нынешнем виде я вижу __no way__ для выполнения этой работы. –

+0

@ Zeeker, вы должны сделать это в ответ, я просто понял, что переписывание истории фактически изменяет все ссылки refs/objects, которые ранее указывали на фиксацию SVN. – blackbird

ответ

1

Как я вижу, вы ничего не можете сделать, чтобы сделать filter-branch и svn rebase совместимыми. Вы переписываете историю, которая имеет отношение к удаленному. Таким образом вы меняете хэши commit и делаете отображение SVN rev_map совершенно бесполезным.

Это была бы другая история, если вы удалили пульт после filter-branch, в этом случае он просто не имеет значения, но, как он стоит, я не вижу никакой возможности , чтобы сделать эту работу.

1

Записи, отправленные в SVN (через git svn dcommit), не должны быть изменены, так как это приводит к конфликтам, которые вы видели.

В сценарии git-only вы можете теоретически сделать git push -force (хотя это не рекомендуется, если вы работаете с другими через это репо), но SVN этого не допускает.

Итак, вы не можете переписать то, что уже было отправлено на сервер subversion. Если двоичные файлы находятся на сервере subversion, фильтр-ветвь все равно не поможет. ТАКЖЕ, если вы используете инструменты SVN на самом сервере для удаления двоичных файлов, вам понадобится новая проверка копии git - данные git-svn в этом случае будут недействительными.

Единственное, что вы можете сделать сейчас, - это сбросить основную ветку в исходное состояние/багажник.

Редакция: Что касается возникающих конфликтов, то я предполагаю, что ветвь фильтра испортит отношения между git commits и svn ревизионными номерами в $ GIT_DIR/svn/** /. Rev_map. * (См. Git- scm.com/docs/git-svn: CAVEATS/FILES). Кроме того, конфликты, естественно, возникали бы, если бы были изменения со стороны SVN на файлы, которые вы удалили в своей копии git.

+0

Извините, что я должен был упомянуть, что я только синхронизирую один путь от SVN до Git , SVN не зафиксировано. См. [Здесь] (http://stackoverflow.com/questions/34879226/exclude-files-from-git-svn-clone) – blackbird

+1

Я предполагаю, что фильтр-ветвь испортит $ GIT_DIR/svn/* \ * /.rev_map.* (см. https://git-scm.com/docs/git-svn: CAVEATS/FILES). –

Смежные вопросы