Используйте Git для себя и Subversion в компании - PullRequest
5 голосов
/ 27 января 2010

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

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

Заранее спасибо!

Ответы [ 4 ]

8 голосов
/ 27 января 2010

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

Попытка:

git remote add external-repo ssh://host/path/to/git/repo.git
git push origin external-repo

Я хотел бы часто совершать коммиты в своем git-репозитории, и когда я решаю, что эти маленькие шаги стоит совершить (достаточно большие, чтобы делиться ими), я хотел бы зафиксировать их в svn, но только с одним коммитом.

Нет пота. Сверните несколько коммитов с помощью git rebase -i (это называется «сжатие») и решите, хотите ли вы сохранить, выбросить или раздавить каждый коммит в более крупный. Это очень полезно для организации перед тем, как перейти к внешнему репо. -i для «интерактивного» режима.

с 'git svn' я не могу использовать ветви (потому что, когда я объединяю их с мастером, у мастера не будет линейной истории).

Это не правда. Просто установите ветку на git для каждой ветви, которую вы хотите отслеживать с svn. В обратном направлении вы все равно толкаете только одну ветвь за раз.

2 голосов
/ 27 января 2010

Вместо интерактивной перебазировки вы также можете использовать git merge --squash в «официальной» ветке.

git checkout master
git merge --squash development

Преимущество этого в том, что оно не разрушит историю вашего развития. Теперь вы можете создать большой коммит, содержащий все ваши изменения, или вы можете сбросить индекс (используя git reset) и использовать git add -p или git gui, чтобы создать любое количество отдельных коммитов из вашей ветви, которые вы затем обычно делаете коммитом. master и git-svn dcommit их при необходимости.

2 голосов
/ 27 января 2010

Я все время так работаю в своей компании (на самом деле просто не могу больше терпеть подрывную деятельность). Что заставляет вас думать, что вы не можете использовать ветки с git svn? Вы можете не только использовать их, но и отправлять из них обратно обратно в Subversion.

Чтобы выполнить слияние коммитов, вы должны использовать что-то вроде git rebase remotes/trunk --interactive и сквош коммитов вместе. Однако вы не можете поддерживать как расширенную версию, так и сокращенную версию одновременно. Вы либо получаете все маленькие крошечные коммиты, либо получаете сдавленные.

1 голос
/ 27 января 2010

То, что я делаю (и самый простой способ сделать это), это не пытаться управлять двумя методами контроля источников одновременно. Я использую Git для моего личного контроля версий. Несколько раз в неделю, когда я буду готов к фиксации в центральном репозитории, я проверяю основную ветку в git и фиксирую ее в TFS. Изменения с сервера проверяются в моей ветке разработчика и возвращаются в мой код.

Это не элегантно, во всяком случае, но, так как я только проверяю / регистрируюсь из центрального репо несколько раз в неделю, это прекрасно работает.

...