2013-05-10 3 views
1

У меня есть репозиторий, который был создан путем копирования файлов (а не истории) из репозитория SVN со многими изменениями, добавленными сверху.Скажите git-вину, чтобы использовать импортированную историю

С тех пор я преобразовал историю в SVN в git и объединил ее с git merge -s ours.

Проблема в том, что я делаю файл git blame по файлу, он по-прежнему показывает каждую строку как созданную в результате первоначальной фиксации в репозитории git (который скопировал все файлы из SVN), а не комманду SVN, которая была действительно ответственность.

Есть ли способ решить эту проблему без перезаписи всей истории git?

+0

Сколько мест в истории «git-only»? Почему вы не хотите переписывать? Переписывание, вероятно, было бы самым чистым решением. – Chronial

ответ

1

Вы можете создать replacement ref для первоначального совершить от мерзавца, чтобы сделать его по всей видимости, наиболее мерзавец команды, что история, которая возникла в мерзавец был построен на историю импортируемого из SVN.

Вы можете сделать это с помощью следующих команд:

git checkout -b temporary <FIRST_GIT_COMMIT> 
# Set parent of next commit to last one from svn, 
# but don't change the working tree or contents of next commit 
git reset --soft <LATEST_SVN_COMMIT> 
# Create a new commit using contents and message of the first git commit 
git commit -C <FIRST_GIT_COMMIT> 
# Tell git to use the newly created commit in place of the original git 
# commit in most cases. 
git replace <FIRST_GIT_COMMIT> HEAD 

Но ссылки замены не получают автоматически передаются с стандартных refspecs, используемых для пультов дистанционного управления, либо когда толкающие или тянущие. Чем может быть сделано вручную с помощью:

git push origin 'refs/replace/*:refs/replace/*' 
git pull origin 'refs/replace/*:refs/replace/*' 

Это не возможно иметь измененную историю автоматически переданы в другие хранилища без изменения совершения идентификатор каждой фиксации, которая была первоначально создана с мерзавцем.

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