Меркуриальный "сервер"

Я использую Mercurial на некоторое время, но в основном для собственного использования. Теперь, хотя у меня есть проект, над которым я работаю, где двое из нас строят один и тот же проект, и мы, вероятно, будем модифицировать друг друга.

Я хотел бы настроить репозиторий Mercurial на сервере, сделать этот репозиторий "сервером", так что мои изменения и другой редактор меняют оба нажатия на этот сервер (так что в основном Subversion/модель CVS); Мне нравится Mercurial хотя и не хочу переключаться на нечто вроде Subversion.

Здесь, в моей собственной сети, все делается на Linux, а на моем "сервере" установлена ​​OpenSSH. Так что нажатие моих изменений (я работаю на нескольких компьютерах) с одного компьютера на сервер - это всего лишь вопрос "hg push"; используемый протокол - SSH для переноса изменений.

Проблема в том, что я использую Linux, сервер будет Windows (так что нет OpenSSH, верно?), а другой редактор тоже будет использовать Windows. Насколько мне известно, лучший способ работы в Mercurial в этих типах установок - это репозиторий, чтобы вытащить изменения из источника, а не источник, который нажимает на "сервер". Я за несколькими брандмауэрами (не полностью моя сеть), и мой компьютер не будет видимым с сервера, и я предполагаю, что другой редактор тоже будет за брандмауэром (поэтому мы не можем просто запустить локальный Mercurial HTTP-сервер и получить от него "серверный" компьютер).

Какой лучший способ для обоих редакторов получить наши изменения в репозитории сервера? (Я должен добавить, что сервер является сервером в Интернете, поэтому он так же заметен, как что-то вроде google.com. Это размещенный сервер Windows, но у меня, вероятно, будет разрешение на установку программного обеспечения, если это необходимо для этого.)

Ответ 1

Я предлагаю Kiln с www.fogbugz.com. Это коммерческое решение для управления исходным кодом, в основном оболочка Windows с Mercurial под капотом.

Ответ 3

Это может также упростить администрирование для аутсорсинга - если у вас есть только один репозиторий и несколько парней, которые его подталкивают/тянут, вы можете сделать намного хуже, чем просто разместить его где-то, как Bitbucket. (И для решения с одним хранилищем оно действительно бесплатное.)

Ответ 4

Взгляните на rhodecode на сервер Mercurial с открытым исходным кодом со многими функциями, которые Kiln предлагает, включая поиск кода. Он даже прекрасно сочетается с LDAP, поэтому вы можете аутентифицировать пользователей HG с вашим доменом Windows.

Ответ 5

Я рекомендую разместить ваш проект на http://bitbucket.org/, сайте размещения Mercurial-репозитория. Если вы не хотите, чтобы источник был замечен другими, у них есть настройки для создания частных репозиториев. Я думаю, что вам разрешен один частный репозиторий, прежде чем они начнут вас заряжать.

Изменить: Bitbucket теперь предоставляет неограниченные частные/скрытые репозитории.

Ответ 6

В Windows доступно много SSH-серверов. Вот два примера:

Ознакомьтесь с примерами Putty в книге Mercurial: The Definitive Guide для подключения пользователей Windows.

Ответ 7

Вы можете использовать SCM-Manager, чтобы поделиться своими репозиториями через http или https.

Ответ 8

Mercurial и PuTTY - это хорошо поддержанное и хорошо документированное решение.

Ответ 9

Простейшим решением является использование общих папок Samba, особенно в среде Windows. Я только что установил его, кажется, работает.

Ответ 10

Я не использовал его сам, но взгляните на Mercurial Server на LShift.

Ответ 11

Наша настройка: сервер Windws + Apache + Mercurial

Часть нашего http.conf

<Location /hg>

    DirectoryIndex hgweb.cgi #from mercurial source, put it in htdocs/hg
    AddHandler cgi-script .cgi
    Options ExecCGI
    Options +FollowSymLinks
        Order deny,allow
        Deny from all
        <Limit GET POST>
            Allow from 127.0.0.1 10.1.2 
        </Limit>   

    AuthUserFile D:/hg/htpasswd
    AuthGroupFile D:/hg/hggroups
    AuthType Basic
    AuthName "Mercurial xxxx repositories"

    Require group admin somegroup

    RewriteBase /hg
    RewriteRule ^$ hgweb.cgi  [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) hgweb.cgi/$1  [QSA,L]  
</Location>

<Location /hg/project1>    
    Require group somegroup admin
</Location>
<Location /hg/project2>    
    Require group somegroup admin
</Location>
<Location /hg/test>    
    Require valid-user
</Location>

Существуют другие файлы для настройки, такие как hgweb.conf/htpasswd/hggroups, но они являются легкой частью.

Он работает очень красиво. Если какой-либо пользователь хочет сменить пароль, я попрошу его перейти к онлайн-генератору htpasswd для генерации последовательности htpasswd для меня, я положу его в файл htpasswd.

Я думаю, что наша настройка очень похожа на то, что делает VisualSvn Server. (конечно, значительно упрощенная версия)

Ответ 12

Поделитесь Dropbox папкой, которая содержит ваш "репозиторий сервера".

Ответ 13

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

Нет "лучшего способа работы", о котором я знаю? Существует множество возможных рабочих потоков, поддерживаемых Mercurial, и даже перечисляет их в своем руководстве. Я фактически использую настройку "svn-ish", где я разрабатываю локальный репозиторий и имею несколько репозиториев на общем сервере. Если есть какие-либо изменения, я вставляю их в центральный репозиторий. Я нажимаю их на HTTPS, и я (естественно) ограничил возможности push только разработчикам. Это отличный способ работы.

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

Возможно, вы захотите пересмотреть свои мысли по поводу того, что вы нажимаете v?