Как я могу добавить историю subversion в GIT, если GIT моложе?

#svn #git #version-control

#svn #мерзавец #контроль версий #git

Вопрос:

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

Мой вопрос в том, как я могу взять мою историю .svn и объединить ее с .git таким образом, чтобы поместить коммиты .svn в их правильные исторические контексты в главном репозитории git?

Имеет смысл?

Комментарии:

1. У меня есть план по реализации вашего предложения, но я был слишком занят, чтобы рисковать, что все это свалится на мою голову в данный момент. Не волнуйтесь, если это сработает, вы получите свою галочку !! : D

Ответ №1:

Я сам этого не пробовал, но на справочной странице git-svn используются следующие команды для «отслеживания и внесения вклада в магистраль проекта, управляемого Subversion».

 # Clone a repo (like git clone):
        git svn clone http://svn.example.com/project/trunk
# Enter the newly cloned directory:
        cd trunk
# You should be on master branch, double-check with 'git branch'
        git branch
# Do some work and commit locally to git:
        git commit ...
# Something is committed to SVN, rebase your local changes against the
# latest changes in SVN:
        git svn rebase
# Now commit your changes (that were committed previously using git) to SVN,
# as well as automatically updating your working HEAD:
        git svn dcommit
# Append svn:ignore settings to the default git exclude file:
        git svn show-ignore >> .git/info/exclude
  

Это должно работать до тех пор, пока вы не запустили git merge или git pull в ветке, из которой планируете выполнить dcommit, как описано ниже. Однако на всякий случай вам действительно следует самостоятельно ознакомиться со всеми предостережениями на странице руководства git-svn.

Ради простоты и взаимодействия с Subversion рекомендуется, чтобы все пользователи git svn клонировали, извлекали и dcommit непосредственно с сервера SVN и избегали всех операций git clone / pull / merge / push между репозиториями git и ветвями. Рекомендуемый метод обмена кодом между ветвями git и пользователями — git format-patch и git am, или просто ‘dcommiting’ в репозиторий SVN.

Запуск git merge или git pull НЕ рекомендуется в ветке, из которой вы планируете dcommit, потому что пользователи Subversion не могут видеть сделанные вами слияния. Кроме того, если вы объединяете или извлекаете из ветки git, которая является зеркалом ветки SVN, dcommit может зафиксировать не ту ветку.