Ответ 1
Я предлагаю Kiln с www.fogbugz.com. Это коммерческое решение для управления исходным кодом, в основном оболочка Windows с Mercurial под капотом.
Я использую Mercurial на некоторое время, но в основном для собственного использования. Теперь, хотя у меня есть проект, над которым я работаю, где двое из нас строят один и тот же проект, и мы, вероятно, будем модифицировать друг друга.
Я хотел бы настроить репозиторий Mercurial на сервере, сделать этот репозиторий "сервером", так что мои изменения и другой редактор меняют оба нажатия на этот сервер (так что в основном Subversion/модель CVS); Мне нравится Mercurial хотя и не хочу переключаться на нечто вроде Subversion.
Здесь, в моей собственной сети, все делается на Linux, а на моем "сервере" установлена OpenSSH. Так что нажатие моих изменений (я работаю на нескольких компьютерах) с одного компьютера на сервер - это всего лишь вопрос "hg push"; используемый протокол - SSH для переноса изменений.
Проблема в том, что я использую Linux, сервер будет Windows (так что нет OpenSSH, верно?), а другой редактор тоже будет использовать Windows. Насколько мне известно, лучший способ работы в Mercurial в этих типах установок - это репозиторий, чтобы вытащить изменения из источника, а не источник, который нажимает на "сервер". Я за несколькими брандмауэрами (не полностью моя сеть), и мой компьютер не будет видимым с сервера, и я предполагаю, что другой редактор тоже будет за брандмауэром (поэтому мы не можем просто запустить локальный Mercurial HTTP-сервер и получить от него "серверный" компьютер).
Какой лучший способ для обоих редакторов получить наши изменения в репозитории сервера? (Я должен добавить, что сервер является сервером в Интернете, поэтому он так же заметен, как что-то вроде google.com
. Это размещенный сервер Windows, но у меня, вероятно, будет разрешение на установку программного обеспечения, если это необходимо для этого.)
Я предлагаю Kiln с www.fogbugz.com. Это коммерческое решение для управления исходным кодом, в основном оболочка Windows с Mercurial под капотом.
Я считаю, что чтение проектной документации - хороший старт: https://www.mercurial-scm.org/wiki/PublishingRepositories.
Это может также упростить администрирование для аутсорсинга - если у вас есть только один репозиторий и несколько парней, которые его подталкивают/тянут, вы можете сделать намного хуже, чем просто разместить его где-то, как Bitbucket. (И для решения с одним хранилищем оно действительно бесплатное.)
Взгляните на rhodecode на сервер Mercurial с открытым исходным кодом со многими функциями, которые Kiln предлагает, включая поиск кода. Он даже прекрасно сочетается с LDAP, поэтому вы можете аутентифицировать пользователей HG с вашим доменом Windows.
Я рекомендую разместить ваш проект на http://bitbucket.org/, сайте размещения Mercurial-репозитория. Если вы не хотите, чтобы источник был замечен другими, у них есть настройки для создания частных репозиториев. Я думаю, что вам разрешен один частный репозиторий, прежде чем они начнут вас заряжать.
Изменить: Bitbucket теперь предоставляет неограниченные частные/скрытые репозитории.
В Windows доступно много SSH-серверов. Вот два примера:
Ознакомьтесь с примерами Putty в книге Mercurial: The Definitive Guide для подключения пользователей Windows.
Вы можете использовать SCM-Manager, чтобы поделиться своими репозиториями через http или https.
Mercurial и PuTTY - это хорошо поддержанное и хорошо документированное решение.
Простейшим решением является использование общих папок Samba, особенно в среде Windows. Я только что установил его, кажется, работает.
Я не использовал его сам, но взгляните на Mercurial Server на LShift.
Наша настройка: сервер 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. (конечно, значительно упрощенная версия)
Поделитесь Dropbox папкой, которая содержит ваш "репозиторий сервера".
Насколько я знаю, лучший способ работать в меркуриале в этих типах настроек для репо, чтобы вытащить изменения из источника, а затем источник, нажимая на "сервер".
Нет "лучшего способа работы", о котором я знаю? Существует множество возможных рабочих потоков, поддерживаемых Mercurial, и даже перечисляет их в своем руководстве. Я фактически использую настройку "svn-ish", где я разрабатываю локальный репозиторий и имею несколько репозиториев на общем сервере. Если есть какие-либо изменения, я вставляю их в центральный репозиторий. Я нажимаю их на HTTPS, и я (естественно) ограничил возможности push только разработчикам. Это отличный способ работы.
Я понимаю, что люди хотят, чтобы центральный репозиторий вытащил изменения из клонов, созданных разработчиками, но нет ничего, что помешало бы вам предоставить себе и вашему коллеге выделенный репозиторий на общем сервере, из которого центральный репозиторий способный тянуть.
Возможно, вы захотите пересмотреть свои мысли по поводу того, что вы нажимаете v?