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

Использовать git для существующего репо SVN

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

  • Первым вариантом является git init корень моего текущего репо, код записи и локально локально код совершения (git commit) и удаленно (svn commit).
  • Второй вариант git-svn, но я не знаю, стоит ли ему задумываться о нюансах нового инструмента.

Как мне это сделать?

4b9b3361

Ответ 1

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

По общему признанию, это для Subversion 1.6.x; Я подозреваю, что было бы лучше с 1.7.x, так как у этого есть только один каталог .svn.

  • Обновление из репозитория требует вытащить обновления из Subversion, а затем передать их с помощью Git. Это медленный и утомительный (по общему признанию, он довольно медленный с git-svn, но, по крайней мере, это автоматизирует процесс).

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

  • Git не может обрабатывать пустые каталоги, Subversion требует их для формата своих каталогов .svn. Это означает, что вам нужно хранить репозитории .svn вне репозитория Git, поэтому для любой операции git checkout также потребуется отдельный svn up.

  • Как вы заметили, вам нужно выполнить все отдельно.

Таким образом, используя Subversion и Git по отдельности, вам нужно выполнить почти любую операцию как в Git, так и в Subversion. Это означает, что все занимает больше времени, и вы получаете все недостатки обеих систем, в то время как оба они хорошо справляются с преимуществами друг друга.

Ответ 2

Используйте git -svn, это действительно просто. Сначала клонируйте ваш репозиторий с помощью git svn clone, затем вы можете git svn dcommit выполнить свою работу или git svn rebase на последних изменениях. Убедитесь, что ваша история всегда линейна, всегда сворачивая свои локальные ветки на master, чтобы вы могли объединить их с git merge --ff-only.

Ответ 3

Лучший способ - перейти на git и выбросить SVN.

Однако, если это не вариант, используйте git-svn.

Когда вы отправляетесь в git/svn отдельно, вы, скорее всего, будете в конечном итоге связываться с SVN очень редко, что приведет к тому, что другие разработчики получат огромные коммиты.

Ответ 4

Вы можете попробовать SubGit проект. Установите SubGit в свой SVN-репозиторий; будет создан чистый Git интерфейс (реальный Git, а не git -svn) для репозитория SVN. После этого вы можете использовать оба интерфейса: SVN или Git для своего репозитория.

Если у вас нет доступа к вашему серверу SVN, есть еще один вариант: SmartGit клиент. Он ведет себя аналогично git -svn, но предлагает больше возможностей (теги, игнорирование, обработка EOL, выбор вишни).