Подтвердить что ты не робот

Использовать локальный репозиторий Git с основным хранилищем Subversion

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

Хорошим вариантом использования будет то, что у вас есть центральный репозиторий svn, с которым работает каждый разработчик. Один разработчик иногда отключается и хочет отслеживать изменения, которые он делает в автономном режиме. Когда разработчик снова подключится к сети и имеет доступ к svn, их рабочие копии могут быть проверены на svn. Я в порядке с потерей истории изменений, которые произошли локально с Git, когда файлы проверяются на svn.

Может кто-нибудь изложить, как лучше всего снять это? Есть ли подводные камни, чтобы работать так?

4b9b3361

Ответ 1

Вы можете использовать что-то вроде этот учебник в качестве отправной точки. Я также прочитал этот учебник.

В этом режиме работы есть несколько подводных камней. Самое главное, что вы не можете использовать svn version 1.5 mergeinfo и ожидаете, что это сохранится через git. Это серьезный недостаток, если вы используете (возможно, довольно приличную) функциональность svn 1.5 merge.

Страница руководства для git-svn также содержит некоторые примечания под "оговорками", которые вы должны понимать. Как только я понял все оговорки, я понял, что использование этой установки может быть меньше фактической стоимости моего конкретного случая. Поэтому я использовал свою энергию, чтобы убедить проект переключиться на git вместо того, что я только что преуспел.

Ответ 2

Скажите, что ваш SVN-репо находится в svn + ssh://имя пользователя @svn_server/svn/your_repo
и ваш репозиторий SVN имеет "правильную" компоновку (туловище, ветки, теги) Здесь рабочий процесс, который я использую в течение нескольких месяцев:
1. ' mkdir your_repo

2. ' cd your_repo

3. ' git svn clone -s svn + ssh://имя пользователя @svn_server/svn/your_repo.' (разумеем точку)
4. [подождите некоторое время в зависимости от размера вашего репозитория:)]
теперь ваш GIT 'master' отслеживает соединительную линию SVN
вы также можете создать ветвь отслеживания, как обычно, с GIT, если вы работаете над какой-либо веткой
5. традиционный взломать хак
6. обновите свой клон с помощью < git svn fetch && & & GIT svn rebase "
7. "нажмите" ваши изменения в svn с помощью < git svn dcommit "

Более хороший материал
Определите следующие удобные псевдонимы в вашем .gitconfig:
1. Alias ​​' spull', который означает svn-pull, как это: ' spull =! git svn fetch && & && & & GIT svn rebase "
2. Alias ​​' spush', который обозначает svn-push следующим образом: ' spush =! git svn dcommit "
Эти псевдонимы превращают рабочий процесс в чистую эффективность: клон/ взломать/ spull/ spush прибыль

SVN: внешние
Я не мог найти хорошее решение для этого в Интернете, поэтому сделал сам:)
http://github.com/sushdm/git_svn_externals он еще не идеален, но он должен определенно сделать жизнь намного легче.

Работает для меня отлично, надеюсь, что это поможет вам.

Ответ 3

Одно решение, которое я хотел бы попробовать:

  • Оформление заказа из центрального репо с помощью SVN
  • git init для создания локального репо
  • добавить .svn в .gitignore
  • git добавить *, чтобы добавить все файлы в локальное репо
  • Выполняйте все ваши промежуточные ветки/завершаете/возвращаетесь в git.
  • Когда вы закончите, вернитесь к центральному репо с помощью SVN.

Ответ 4

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

Если вы создаете новый репозиторий с нуля и/или имеете свободу выбора, я бы выбрал тот или другой. git -svn работает хорошо, но вы всегда будете бороться с "неправильным совпадением импеданса" между двумя системами.

Если это просто централизованная модель, которую вы хотите реализовать, тогда общедоступный репозиторий git может использоваться как центральный репозиторий. См. Раздел git Руководство пользователя настройка общего репозитория.