#git #svn
#git #svn
Вопрос:
У меня проблема.
Я использую Git с репозиторием SVN. Но некоторые люди меняют репозиторий SVN (они создают новый репозиторий, просто помещая в него все файлы проекта). Они не сохраняют историю SVN старого репозитория.
Я не знаю, как подключить Git к новому репозиторию SVN, чтобы зафиксировать мои изменения.
Спасибо за вашу помощь
Редактировать
Наконец-то я нашел решение.
Итак, у меня есть локальный репозиторий Git (в моем локальном каталоге / home / oldSVNrepo), который подключен к старому репозиторию SVN. Между старым и новым репозиторием SVN нет общих коммитов.
Что я должен сделать:
Я должен зафиксировать свои изменения в новом репозитории SVN
Что я делаю:
1 — Я создаю локальный каталог (например, mkdir /tmp /myNewRepo ) 2 — В этом новом каталоге я клонирую новый репозиторий SVN
cd /tmp/myNewRepo
git svn clone [UrlOfNewSVNrepository]/myproject -T trunk -b branches -t tags --username XXX
cd myproject
git checkout -b dev
git checkout master
Я создаю новую ветку, чтобы объединить новое обновление для репозитория SVN и для отправки коммитов из удаленного репозитория. (Мы не можем нажать на репо, если ветка активна)
3 — В моем локальном репозитории Git СТАРОГО SVN я добавляю удаленный репозиторий: новый репозиторий Git
` cd /home/oldSVNrepo git remote добавляет новую версию -t dev /tmp/myNewRepo/myproject
4 — Я извлекаю данные из удаленного репозитория
git fetch neworigin/dev
5 — Я создаю новую ветку (перед тем, как зафиксировать все изменения) в моем старом репозитории Git
git checkout -b branchForMerge
6 — Я делаю слияние между удаленным neworigin и branchForMerge
git merge neworigin/dev
Когда я выполняю слияние, Git выдает мне предупреждение: нет общей фиксации. (На самом деле, в моем случае я использую git-mv перед слиянием, потому что старый каталог myproject отличается от нового каталога проекта)
7 — Я исправляю конфликты и фиксирую
8 — Я добавляю свои изменения в neworigin
git push neworigin branchForMerge:dev
9 — И теперь при разработке ветки нового репозитория Git (/tmp / myNewRepo) я могу легко отправлять свои изменения в новый репозиторий SVN
Поэтому я просто создаю новый локальный репозиторий Git, который подключается к новому репозиторию SVN, и добавляю удаленную ветку в мой старый репозиторий Git, чтобы перенести мои локальные коммиты. Я не знаю, хорошее ли это решение, но оно работает для меня.
Спасибо Git
Спасибо Zeeker
Комментарии:
1. Вы можете попытаться изменить
git-svn
конфигурацию своего репозитория (вы можете найти их.git/config
в своем репозитории) и изменить URL-адрес, чтобы он соответствовал URL-адресу нового репозитория, но я не могу гарантировать, что это сработает и не приведет к взрыву вашего собственного репозитория. Если вы хотите попробовать это, убедитесь, что сначала вы сделали резервную копию своего репозитория.2. Спасибо Zeeker. На самом деле я уже это делаю. Это не работает, потому что история нового репозитория отличается от старого. Когда я выполняю перебазирование, у меня возникает эта ошибка: невозможно определить исходную информацию SVN из истории рабочего дерева
Ответ №1:
Вы можете настроить второй svn remote в своем репозитории git, отредактировав config
файл в своей <repository>/.git
папке.
Это может выглядеть так (со вторым новым репозиторием):
...
[svn-remote "svn"]
url = https://url.to.the.first.svn.repository
fetch = :refs/remotes/git-svn
[svn-remote "new-svn"]
url = https://url.to.the.second.svn.repository
fetch = :refs/remotes/new-git-svn
...
Вы можете получить новый репозиторий git svn fetch new-svn
; это должно привести к тому, что удаленная ветвь new-git-svn
будет обновлена с новым репозиторием.
Теперь вы должны легко вносить rebase
свои собственные изменения в новый new-git-svn
, чтобы вы могли зафиксировать их в репозитории.
Надеюсь, это поможет.
Комментарии:
1. Я пытаюсь, но у меня две проблемы с этим решением. Сначала, когда я выполняю svn-fecth, Git говорит мне, что есть два удаленных репозитория svn. Я должен удалить старый репозиторий, чтобы создать новый репозиторий (я использую Git 1.7.9 на Cygwin). Вторая проблема, когда я выполняю перебазирование, у меня возникает эта ошибка: невозможно определить исходную информацию SVN из истории рабочего дерева. Между новым и старым репозиторием нет общих коммитов