Git и SVN и нет истории

#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 из истории рабочего дерева. Между новым и старым репозиторием нет общих коммитов