Вопросы по переходу с SVN на Hg

ifani

Всем привет
Намучившись с мерджами между ветками в Svn, решил, наконец-то, перевести проект на Hg. Но что-то после Svn довольно сложно дается понимание того, как правильно организовывать процесс разработки в Hg :( Возникли следующие вопросы:
1) Насколько я понял, Hg всегда работает с целым репозиторием, поэтому под каждый проект отдельный репозиторий (а не отдельный каталог, как можно было делать в SVN).
Я нашел, как конвертировать существующий svn-репозиторий в локальный hg-репозиторий, но теперь не совсем понимаю, как залить это на центральный сервер (который админы, вроде, подняли c помощью hgweb и он доступен по http)? То есть мне нужно как-то создать репозиторий на центральном сервере и пропихнуть тута уже существующий локальный репозиторий.
2) Как все-таки правильно работать с ветками в Hg? Я смотрю, что там для этого можно использовать и hg branch, и hg clone. Опять-таки это нужно делать на центральном сервере, чтобы с созданной веткой могли работать несколько человек.
Сорри, если вопросы глупые, но большинство статей на тему работы с локальным репозиторием (типа, сделали hg clone и в новой папке получили новый репозиторий, из которого потом можно легко пропихнуть изменения в исходный а мне нужно в контексте работы с центральным.

ifani

Спасибо, но прежде, чем спрашивать, я прочитал все 6 статей оттуда, но там нет ответов на мои вопросы :(
Или, если я вдруг почему-то не заметил, то можешь, плиз, указать конкретное место?

shlyumper

Ок, по порядку:
Насколько я понял, Hg всегда работает с целым репозиторием, поэтому под каждый проект отдельный репозиторий (а не отдельный каталог, как можно было делать в SVN).
И в svn и в mercurial это вопрос вкуса и соглашений между разработчиками по большому счету. В svn создать и менеджить новый репозиторий сопряжено с большим геомороем поэтому там обычно идут путем каталогов. В mercurial этой проблемы нет, поэтому логичнее делать один проект - один или несколько реп.
Я нашел, как конвертировать существующий svn-репозиторий в локальный hg-репозиторий, но теперь не совсем понимаю, как залить это на центральный сервер (который админы, вроде, подняли c помощью hgweb и он доступен по http)? То есть мне нужно как-то создать репозиторий на центральном сервере и пропихнуть тута уже существующий локальный репозиторий.
Ну так тут же по шагам все расписано: http://hginit.com/02.html
Вообще, для организации работы для команды рекомендуется использовать что-либо вроде http://www.lshift.net/mercurial-server.html - сильно упрощает управление центральными репозиториями (в отличие от svn, в mercurial при работе команды их будет МНОГО).
2) Как все-таки правильно работать с ветками в Hg? Я смотрю, что там для этого можно использовать и hg branch, и hg clone. Опять-таки это нужно делать на центральном сервере, чтобы с созданной веткой могли работать несколько человек.
С ветками можно работать сильно по-разному. Вот тут достаточно подробно расписывают за и против всех популярных вариантов: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-me...

ifani

Спасибо большое за ответы.
Ну так тут же по шагам все расписано: http://hginit.com/02.html
Вообще, для организации работы для команды рекомендуется использовать что-либо вроде http://www.lshift.net/mercurial-server.html - сильно упрощает управление центральными репозиториями (в отличие от svn, в mercurial при работе команды их будет МНОГО).
Я понял, что неправильно сформулировал вопрос. У меня нет консольного доступа к центральному серверу, то есть на нем я не могу выполнить никаких команд - только http. Я правильно понимаю, что так новый репозиторий не создать - нужно дергать админов?
А с установкой отдельного сервера проблема в том, что у нас требуется, чтобы была интеграция с какой-то системой управления правами (точно название сейчас не вспомню для интеграции с которой есть модуль к апачу, поэтому и Mercurial ставился как модуль к апачу.
С ветками можно работать сильно по-разному. Вот тут достаточно подробно расписывают за и против всех популярных вариантов: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-me...
Эту статью я как раз только что закончил читать, заодно просматривая соответствующие разделы с http://mercurial.selenic.com/ - значит, она все еще актуальная, а том меня смутил год :)
В общем, понял, что из-за невозможности самому создавать репозитории в нашем случае лучшего всего подойдет hg branch.

okis

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

shlyumper

Я понял, что неправильно сформулировал вопрос. У меня нет консольного доступа к центральному серверу, то есть на нем я не могу выполнить никаких команд - только http. Я правильно понимаю, что так новый репозиторий не создать - нужно дергать админов?
Скорее всего да. Если только админы не разрешили доступ по WebDAV. В общем, в любом случае узнавать у админов что и как они там понастраивали.
А с установкой отдельного сервера проблема в том, что у нас требуется, чтобы была интеграция с какой-то системой управления правами (точно название сейчас не вспомню для интеграции с которой есть модуль к апачу, поэтому и Mercurial ставился как модуль к апачу.
Ну вообще, использование mercurial-server обычно не противоречит этим требованиям :) Еще можно посмотреть в сторону http://www.scm-manager.org/, http://rhodecode.org/, но ими я лично не пользовался.

Alena_08_11

1) Если поднят через hgweb - то достаточно чем угодно создать репозитарий в каталоге указанном в hgweb.conf в секции [collections]. hgweb его сам нормально подхватывает и хостит. Проще всего по ssh ofc. Но можно какой нить http-костыль придумать, прикрутить один раз и юзать.
2) Не надо на центральном сервере делать hg clone ... пускай будет один репозитарий, пускай будут теже ветки что были в svn (примерно). Тут смысл в том, что ты можешь у себя локально миллион репозитариев понаделать, в ходе экспериментов в сотне из них что то сделать полезное, в итоге десяток из них запушить в один главный, в нем все это смержить и из него уже отправить в центральный реп.

durka82

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

Это особенность mercurial? Или есть другие подобные?

durka82

Спасибо :)
А собственно имеет смысл подобное использовать если разработчик только 1?
Или оно всё равно удобнее того же SVN?

evgen5555

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

durka82

А если выбирать именно с точки зрения лёгкости освоения/дружелюбности интерфейса?
Или это уже определяется поддержкой конкретных сред разработки?

evgen5555

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

SergeRRRRRR

Например, чтобы завести репозиторий, не нужно трахаться с базой данных.
На каком этапе настройки svn тебе приходилось трахаться с БД?

ifani

Тут смысл в том, что ты можешь у себя локально миллион репозитариев понаделать, в ходе экспериментов в сотне из них что то сделать полезное, в итоге десяток из них запушить в один главный, в нем все это смержить и из него уже отправить в центральный реп.
Это я понимаю, но мне нужны ветки именно в центральном репозитории, чтобы над одной веткой могли работать несколько разработчиков.
А кто-нибудь может объяснить преимущества bookmarks перед branches? То есть в каком случае используют bookmarks?

Dimon89

А кто-нибудь может объяснить преимущества bookmarks перед branches? То есть в каком случае используют bookmarks?
Бранчи тяжелее, репозиторий разрастается. Впрочем, сейчас это уже почти никому не актуально.

Dimon89

Как все-таки правильно работать с ветками в Hg? Я смотрю, что там для этого можно использовать и hg branch, и hg clone
Ты что-то не так понял. Clone создает отдельный репозиторий - полную копию склонированного. Branch изменяет существующий - добавляет новую (именованную) ветку. Clone ты используешь ровно один раз - склонировать репозиторий с сервера. Branch логично использовать, когда начинаешь разработку отдельной фичи, которую нет смысла мержить в главную ветку, пока она не убдет полностью готова.

evgen5555

с аутентификацией на винде
Оставить комментарий
Имя или ник:
Комментарий: