Извлечение файлов из git repo в svn repo - PullRequest
0 голосов
/ 08 марта 2019

Итак, моя команда в настоящее время использует svn-репозиторий для нашего проекта.Параллельно работала другая команда, но они используют git-репозиторий.Я хочу взять код другой команды и объединить его с нашим.Я уже пробовал несколько раз, но я продолжаю извлекать их код без слияния, то есть он просто перезаписывает наши файлы.Я использовал инструмент git-svn и добился небольшого успеха, и я боюсь, что растущее число бесполезных и мусорных коммитов в нашем журнале svn не будет хорошо выглядеть перед моим боссом.

Вот некоторые из препятствий, которые были у меня на пути:

  • У нас есть один репозиторий SVN с примерно 10 компонентами внутри, где другая команда имеет репо для каждогосоставная часть.
  • Я следовал примеру, в котором используется опция -s, которая коротка для стандартной компоновки (общая структура каталогов svn с использованием trunk / branch / tags), которой нет в нашем репозитории svn.Я не смог заставить этот метод работать без этой опции, что приводит к объединению всех файлов (в основном просто копируемых) в пустой каталог, который меня не интересует.
  • Предпочтительно, я быне хочу хранить всю свою историю коммитов.Я просто хочу, чтобы один коммит сказал, что я объединил их репо с нашим.Или коммит для каждого из их git-репозиториев, который я должен слить.Тот же самый пример, упомянутый в предыдущем пуле, скопировал всю историю коммитов, которая добавила тонну коммитов в наш журнал, который не заботит моя команда.

Вот пример (первый ответ в этом post ):

mkdir copy-git-repo
cp -a orig-git-repo/. copy-git-repo/
cd copy-git-repo/
svn mkdir --parents https://svn/url/PROJECT/trunk -m "Trying to merge of of their git repos into our svn"
git svn init https://svn/url/PROJECT -s
git svn fetch
git rebase trunk master
# if there are merge conflicts
git status
# deal with merge conflicts listed 
git add .
git rebase --continue
git svn dcommit 

Кто-нибудь видит ошибку, которую я совершил?

1 Ответ

0 голосов
/ 08 марта 2019

Если то, что вы привыкли делать, это svn, я бы посоветовал вам идти прямо с svn (хотя я ненавижу это). Итак ... если вы посмотрите на репо другой команды (той, которая работает над git), можете ли вы отобразить svn-ревизии (из вашего svn-репо) на ревизии git-репо ... и я имею в виду, 1 к 1, не закрыть ревизии. Это должны быть точные совпадения ревизий.

Предположим, вы хотите объединить ветку git X (из их репо) с вашей внешней веткой (из вашего репо). Если вы можете найти предка X, который эквивалентен 1 к 1 предку вашего ствола, то вы можете:

  • создайте ветку в вашем SVN репо, которая начинается с предка, о котором мы говорим
  • Удалить все файлы из проекта в этой ветке ( не фиксировать )
  • Получите копию содержимого ветви X (в git repo ..... content в самом конце X) и поместите его внутри ветви. И теперь коммит на svn. На этом этапе у только что созданной ревизии есть все различия между предком X, которые вы смогли увидеть как на git и svn, так и на конце ветви X.
  • Теперь вы можете взять созданную вами ветку и попытаться объединить ее в ствол.

В качестве последнего совета (и это я самоуверенный, извините): подумайте над тем, чтобы прыгнуть навсегда . Нужно немного усилий, чтобы привыкнуть к отличиям от SVN ... но вы не пожалеете об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...