Использование Git для локальной разработки с Subversion на сервере? - PullRequest
2 голосов
/ 24 февраля 2012

Мое предприятие использует SVN в качестве источника контроля.

Я бы хотел использовать git для своей разработки (ветки очень полезны).

Считаете ли вы, что нет проблем с извлечением проекта svn, работой с локальным git для моей разработки, а затем внесением окончательных изменений с помощью svn?

Есть ли что-то особенное, когда мы так работаем?

Ответы [ 3 ]

4 голосов
/ 24 февраля 2012

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

1 голос
/ 24 февраля 2012

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

Первая рекомендация - ВСЕГДА делать "git svn dcommit --dry-run" перед dcommit!Иногда вы не понимаете, что на самом деле пытаетесь вытолкнуть тонну коммитов из другой ветви, например, после git-слияния.

Во-вторых, я обычно для себя никогда не работаю над основной веткой.Я работаю над веткой git и затем REBASE на ветку master, прежде чем хочу поместить ее в svn.Используйте rebase, а не merge, поскольку у svn должна быть «линейная история» для каждой ветви / транка / тега.Кроме того, узнайте, что делает rebase и как избавиться от неприятностей (например, rebase --abort).Я всегда делаю «резервную ветку», прежде чем начинать перебазировать вещи.

Итак, чтобы перейти в SVN, это мой рабочий процесс:

git checkout master
git svn rebase
git rebase <my_working_branch>
gitk (to review the changes)
git svn dcommit --dry-run
git svn dcommit
0 голосов
/ 24 февраля 2012

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

git svn clone svn+ssh://pathtorepo localname
git branch workingbranch
git co workingbranch ...
... work in branch
git co master
git merge workingbranch
git svn dcommit

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

Если что-то изменилось на сервере svn, вы просто делаете следующее, чтобы держать мастера в соответствии со всеми вышестоящими коммитами (сохраняя линейную историю svn в вашей основной ветке):

git co master
git svn fetch
git svn rebase

И затем вы можете использовать обычные возможности git для получения / слияния / перебазирования коммитов в вашу рабочую ветку.

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