Lev Serebryakov ([info]blacklion) wrote,
@ 2008-04-08 13:35:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Current music:Кирилл Комаров - [Парашютисты глазами птиц #14] Дым

О mercurial и подобных системах…
Знаете, что вызывает у меня отвращение к этим системам? То, что они для создания branch'а требуют, по сути, клона репозитория, и что бы это сделать на сервере, мне там нужны очень нехилые права.
Я вот так и не нашёл, как я могу сделать бранч в mercurial (не named branch, а настоящий) если у меня доступ к репозиторию только через HTTP, пусть и read-write. Нет, мне нужно делать clone на сервере, в терминах файловой системы, и прописывать этот репозиторий отдельно в конфиги сервера.
IMHO, это очень, очень неудобно.
Может быть я не прав, особенно о “подобных системах”. Но про mercurial я прочёл официальную книгу — и не нашёл там ничего про то, как сделать clone на сервере, если у меня нет прямого доступа к его файловым системам. При том, что я могу хотеть сделать ветку (релизную, например) доступную с того же сервера, а не со своей локальной рабочей машины. Или не релизную, а экспериментальную — но опять же, я хочу хранить её на сервере, хотя бы и ради безопасности и доступа с разных рабочих станций.



(Post a new comment)


[info]petr_panteleyev
2008-04-08 10:45 am UTC (link)
Это все на потребу любителям заныкать у себя на машине собственный как бы репозиторий. Типа, фанатам TeamWare посвящается.

(Reply to this)(Thread)


[info]blacklion
2008-04-08 10:51 am UTC (link)
Да нет, я не против своих репозиториев — это очень полезно, распределённые системы — это действительно здорово.

Я против отсутствия своего собственного протокола (Over HTTP или Over TCP — а лучше и так и так, что бы Over TCP превращался Over SSH легко, а Over HTTP пролезает через любую прокси), покрывающего ВСЕ фичи системы.

Вон — в subversion имея только-HTTP доступ к репозиторию я бранч на сервере делаю легко. А в mercurial — фиг, нужен полноценный shell-доступ :(

(Reply to this)(Parent)(Thread)


[info]petr_panteleyev
2008-04-08 10:55 am UTC (link)
Это здорово в маленьком дружном коллективе. В пределах комнаты, например. А вот при мультисайтной работе это совершенно не здорово. Наелись этой распределенностью по самое немогу, пока на SVN не перешли, наконец.

(Reply to this)(Parent)(Thread)


[info]blacklion
2008-04-08 10:57 am UTC (link)
А вот при мультисайтной работе это совершенно не здорово.
При определённой культуре — тоже здорово. Мы как бы тут тоже мультисайт-работаем. И перешли на hg. Но, заметь, в Sun у тебя есть шелл-доступ на любую машину фактически с рутовыми правами. Это нетипичная ситуация, очень нетипичная.

(Reply to this)(Parent)(Thread)


[info]petr_panteleyev
2008-04-08 11:02 am UTC (link)
Не при культуре, а при железно установленном процессе, что противоречит известной культуре.

Ситуаций типа "а вот этот важный фикс есть в рабочей копии Джона, но он сейчас болеет и мы не знаем, где она у него лежит" было предостаточно.

Ну, кроме того, начинают плодиться центральные workspaces, что гораздо хуже. Веток-то нет.

(Reply to this)(Parent)(Thread)


[info]blacklion
2008-04-08 11:07 am UTC (link)
Ситуаций типа "а вот этот важный фикс есть в рабочей копии Джона, но он сейчас болеет и мы не знаем, где она у него лежит" было предостаточно.
Ну, я такого не видел. Или есть веб-рев, посланный на review, или фикса нет. Бинарно. Если человек реально что-то доделал до конца и не послал веб-рев… Ну, это как минимум странно.

Ну, кроме того, начинают плодиться центральные workspaces, что гораздо хуже. Веток-то нет.
Ну а про это я вот и пишу как раз. Но это не противоречит распределённости.

(Reply to this)(Parent)(Thread)


[info]dead_code
2008-04-08 01:30 pm UTC (link)
>>>Ну, я такого не видел

Ооо, чувак, это волшебно.

А как тебе такое: девелопер уходит в отпуск/запой, и не делает check-in. Компьютер, ясное дело, лочит. Пароль знает он и одмины; чтобы одмины оторвали гузло от стула, надо бить в бубны, закладывать мизинцы в нозди и совершать ещё много противоестественных действий. Всё это в ситуации этот-код-был-нужен-нам-ещё-вчера. Ага?

(Reply to this)(Parent)(Thread)


[info]blacklion
2008-04-08 01:35 pm UTC (link)
Ну, согласись, это может быть и с CVS и с sourceSafe и с Perforce. С двумя последними — особенно весело, так как ещё и файлы остаются locked.

(Reply to this)(Parent)(Thread)


[info]dead_code
2008-04-08 01:39 pm UTC (link)
Ну, от распиздяйства кривых рук ни одна система не спасёт, если уж на то пошло.

(Reply to this)(Parent)(Thread)


[info]blacklion
2008-04-08 01:57 pm UTC (link)
Дык :)

(Reply to this)(Parent)


[info]petr_panteleyev
2008-04-08 01:48 pm UTC (link)
Если человек работает на своем рабочем пространстве и делает putback в общий workspace только в последний момент, то вероятность влететь в описанную выше историю существенно больше, чем если он каждый вечер делает коммиты на ветке, которая лежит на сервере. Во втором случае работу можно подобрать и продолжить мгновенно.

(Reply to this)(Parent)(Thread)


[info]blacklion
2008-04-08 01:57 pm UTC (link)
Ну, а с другой стороны — при, допустим, 1000 разработчиков, делающийх десяток коммитов в день, сервер реально может стать узким местом. А при 10'000?
В общем, везде свои плюсы и минусы. Речь-то в посте не о том была.

(Reply to this)(Parent)


[info]alexott
2008-04-08 10:50 am UTC (link)
git насколько я помню умеет внутри репозитория бранчиться

(Reply to this)


[info]yole
2008-04-08 10:51 am UTC (link)
Дык вся концепция всех этих систем заключается в том, что нету одного центрального сервера, на котором всё должно жить. Клон репозитория ты делаешь у себя, и живёшь в своём локальном репозитории. Потом можешь из него push'ить изменения в центральный. И если кому-то нужно иметь к нему доступ, то ты открываешь его именно на своей рабочей станции.

(Reply to this)(Thread)


[info]blacklion
2008-04-08 10:55 am UTC (link)
Дык вся концепция всех этих систем заключается в том, что нету одного центрального сервера, на котором всё должно жить.
Однако у любого проекта такой сервер должен быть. Просто как точка встречи. Или иерархия таких серверов. Авторитетный мастер-сервер. Sun пользуется TeamWare уже многие годы — он всегда был распределённый. Но иерархия всегда была. Одно дело — локальные ветки для new feature. Другое — организационные ветки — releases, stable branches, etc. Офигенно (по сравнению с той же svn, например), что я могу делать фичу во МНОГО коммитов, но БЕЗ главного сервера. Отвратительно, что когда нужна публичная ветка — мне нужен шелл.

Клон репозитория ты делаешь у себя, и живёшь в своём локальном репозитории.
В своём, локально, репозитории я держу 1.0-STABLE? Не смешно.

Потом можешь из него push'ить изменения в центральный.
Неее, 2.0-CURRENT и 1.0-STABLE — это разные ветки всё же. И обе должны быть в центральном.

И если кому-то нужно иметь к нему доступ, то ты открываешь его именно на своей рабочей станции.
С DHCP-адресом за NAT'ом и выключаемой на ночь? Дима, не смешно.

(Reply to this)(Parent)


[info]blacklion
2008-04-08 10:59 am UTC (link)
Т.е. я не против концепции распределённых систем (хотя, вон там выше другой сотрудник нашей же фирмы — против, и, думаю, не на пустом месте), я против того, что во всех этих системах не-локальный протокол доступа к репозиторию — не полный и убогий.

(Reply to this)(Parent)


[info]igorsereda
2008-04-08 11:07 am UTC (link)
Ну тебя же не удивляет, что чтобы сделать копию веб-сайта и захостить ее рядом, надо иметь доступ на сервер? Да, конечно можно все хостить на мега-cms или, простихосподи, godaddy, и тогда сделать копию сайта наверное можно удаленно. Но это же разные вещи, зачем их сравнивать. Вот если git круче меркуриала в этом смысле - тогда понимаю.

Лично я не вижу в хостинге бранчей проблемы, даже наоборот! Один сервер - один бранчмейстер, который отвечает за то что хостится на этом сервере. А в svn кто ни попадя может делать бранчи-тэги, или вообще нарушать конвенции расположения файлов.

(Reply to this)(Thread)


[info]blacklion
2008-04-08 11:14 am UTC (link)
Ну тебя же не удивляет, что чтобы сделать копию веб-сайта и захостить ее рядом, надо иметь доступ на сервер?
WebDAV решаюет эту проблему. Или хотя бы FTP. Хотя, да, к HTTP как самому себе тоже достаточно претензий.

Но это же разные вещи, зачем их сравнивать.
Я считаю, что у каждой подсистемы должен быть свой протокол, полностью самодостаточный, не требующий никакого системного доступа. И своя аутентификация, которая опять же, должна мочь работать как прокси к системной (а так же LDAP, AD, whatever), но мочь и работать полностью автономно — что бы ОДИН пользователь имеющий ТОЛЬКО ПОЛЬЗОВАТЕЛЬСКИЕ права в системном смысле мог строить ПОЛНУЮ реализацию этой подсистемы. Просто потому что это ДЕЛЕГИРОВАНИЕ отвественности и это очень хорошо и правильно.

Subversion так умеет. Распределённые системы, хотя они НОВЕЕ в большинстве своём, — нет и возвращаются к дремучим временам, когда /etc/passwd — единственная база пользователей (ну, спасибо, pam уже много куда прикрутили) и системные права — наше всё. Вот моя претензия. Никак не связанная, заметим, с идеологией распределённых или централизованных систем.

А в svn кто ни попадя может делать бранчи-тэги, или вообще нарушать конвенции расположения файлов.
Там это решается. Хотя бы и хуками. Можно так, а можно — сяк. А в mercurial требование системного доступа — не решается НИКАК.

(Reply to this)(Parent)


[info]david_m
2008-05-02 10:02 am UTC (link)
Я тут слегка почитываю про все эти системы… может чего-то понимаю неправильно, но разве бранч в М. не есть отдельный репозиторий? То есть, мне кажется, сама постановка вопроса нелогичная — «что сказать репозиторию, чтобы он создал другой репозиторий?». Репозиторий — вещь в себе и не надо ему иметь доступ за пределы себя.

То, что рожать новые репозитории на сервере может только человек, имеющий доступ к его ФС — кажется не таким уж страшным ограничением. Если сервер поддерживат N веток некоего софта — на нём делаются N репозиториев. То есть он отвечает за вот эти N веток. Почему при этом кто угодно снаружи должен иметь право сделать N+1-ю? Ну если очень нужно дать кому-то это право — это же делается двумя строками в ssh-ключе…

(Reply to this)(Thread)


[info]blacklion
2008-05-02 01:05 pm UTC (link)
может чего-то понимаю неправильно, но разве бранч в М. не есть отдельный репозиторий? То есть, мне кажется, сама постановка вопроса нелогичная — «что сказать репозиторию, чтобы он создал другой репозиторий?». Репозиторий — вещь в себе и не надо ему иметь доступ за пределы себя.
система (и сервер) контроля версия должна быть вещью в себе, и не требовать системного доступа.

То, что рожать новые репозитории на сервере может только человек, имеющий доступ к его ФС — кажется не таким уж страшным ограничением.
Мне — кажется. Когда человек работает с системой контроля версий он вообще не должен знать, что там есть какая-то ФС. И какой-то шелл.

Почему при этом кто угодно снаружи должен иметь право сделать N+1-ю?
Почему же “кто угодно”? Тот, у кого есть права на это. Права, определяемые в семантике системы контроля версий, а не в сематике низкоуровневой ФС. Права “сделать ветку” а не права “наплодить файлов”.

у если очень нужно дать кому-то это право — это же делается двумя строками в ssh-ключе…
Система контроля версий уже имеет свой протокол. Не NFS, заметим. Свой. И он должен быть самодостаточен! У svn и CVS так и есть. Новые же системы возвращаются обратно к временам, когда для полноценного использования СЕРВИСА нужен досуп на СЕРВЕР на низком (системном) уровне. Мнеэто очень не нравится.

http://blacklion.livejournal.com/389608.html?thread=3219944&format=light#t3219944

(Reply to this)(Parent)(Thread)


[info]david_m
2008-05-02 06:39 pm UTC (link)
Это я всё понимаю (читал ответы выше). Но представление о «сервере контроля версий» — это представление из централизованных систем. Когда есть Главный Большой Репозиторий, а в нём уже живут туча проектов, и он ими рулит. А тут этого нет, тут самой крупной единицей является репозиторий-ветка. С веткой — работай как хочешь. Но чтобы создать новую ветку на чужом севере — изволь скооперироваться с владельцем сервера. Точно так же как ты не можешь создать удалённо новый репозиторий SVN.

То есть идея не в том, что тебе злостно не позволяют удалённо форкаться, идея в том, что ты не должен этого хотеть. На сервере форкается хозяин сервера. Ты форкаешься у себя. Хочешь чтобы твой гениальный бранч появился на том сервере — договорись с хозяином. Не хочешь — поднимай у себя. Просто идеология такая.

(Reply to this)(Parent)(Thread)


[info]david_m
2008-05-02 06:41 pm UTC (link)
Я, в общем. не говорю, что это гораздо правильнее — просто описываю, как я понял ситуацию. Может и неправильно понял, кстати.

(Reply to this)(Parent)(Thread)


[info]blacklion
2008-05-02 06:50 pm UTC (link)
Да ситуацию-то и я понял. Но, блин, дурацкая ситуация, требующая гораздо бОльшего доверия ко всем участникам проекта, чем необходимо.

(Reply to this)(Parent)


[info]blacklion
2008-05-02 06:49 pm UTC (link)
Но представление о «сервере контроля версий» — это представление из централизованных систем. Когда есть Главный Большой Репозиторий, а в нём уже живут туча проектов, и он ими рулит.
А как ещё жить проектам, которые хотят иметь определённый release cycle, а не полную анархию?

А тут этого нет, тут самой крупной единицей является репозиторий-ветка. С веткой — работай как хочешь. Но чтобы создать новую ветку на чужом севере — изволь скооперироваться с владельцем сервера.
Как на чужом? Не на чужом. Я — официальный участник проекта. Да, мне очень удобно, что я могу экспериментировать с ветками как угодно не трогая основной репозиторий. Но мне, как админу сервера, не хотелось бы давать какие-то системные права всем, кому я в своём проекте верю. К тому же — возможен shared hosting. У меня на сервере живут полтора дестяка людей которым я верю в смысле шелла. Тем, кому они верят, я уже не верю как админ. И эти люди у себя могут легко поднять SVN и рулить им, и верить своим друзьям, а я даже не буду знать, кому они там верят — меня, как админа, это устраивает полностью, я верю, что в SVN нет опасных для меня дыр.
А вот с hg такого не получится. Или всем друзьям моих гостей придётся дёргать их для создания ветки (даже если релиз-инженер в таком проекте вовсе не тот, кому верю я).

Точно так же как ты не можешь создать удалённо новый репозиторий SVN.
А это и не нужно для проекта. Именно за это я и ратую: что бы репозиторий был вещью-в-себе. Со всеми ветками. Это же никак не противоречит удалённым репозиториям и распределённости. Это просто откинули, как ненужную сущность, совершенно не задумываясь о точке зрения АДМИНОВ, а не разработчиков.

(Reply to this)(Parent)(Thread)


[info]david_m
2008-05-02 07:05 pm UTC (link)
Ну, раз всё-таки сделали так как сделали, и раз этим всё-таки пользуются — наверное, должен быть какой-то другой паттерн использования в таких случаях… М. б. стоит спросить в соответствующих конфах, как у себя народ рулит проектами на hg?

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…