Организация многопользовательской работы над проектом

Mike22

Местный
Существует такая штука - распределённые системы контроля версий.
Сейчас без этого инструмента невозможно себе представить процесс работы над открытыми (да и закрытыми) проектами, будь то софт или любой другой процесс разработки в котором участвует более одного человека.
Фактически это специализированные распределённые файловые системы способные отслеживать и хранить все изменения объекта и обращаться к нему в любой из его версий.

Обзор некоторых систем - http://www.ibm.com/developerworks/ru/library/l-vercon/

Очень хорошая статья на русском о Mercurial -
http://www.developers.org.ua/archives/pira...tep-dvcs-intro/
http://www.developers.org.ua/archives/pira...rcurial-basics/

Заметки о Git (на Git ведётся разработка ядра Linux) -
http://alenacpp.blogspot.com/2007/09/blog-post.html
http://i-said.simplog.ru/posts/198-git-na-dvoih
http://netsago.org/ru/docs/3/3/
http://los-t.livejournal.com/tag/git+guts
 

SCTRWD

Местный
Я вот ищу систему многопользовательской сборки. То есть, есть единый репозитарий и куча разработчиков, позволяющий произвести локальную сборку проекта по минимуму: не заставляя участников качать весь проект себе. Каждый пользователь локально пересобирает только то что нужно. Что-то подобное было у продукта SniFF от фирмы WindRiver, там же был и контроль версий. Может кто знает подобные системы? А то на работе полный атас - огромный проект, где каждый день вносят изменения.
 

SCTRWD

Местный
SCTRWD, вы пробовали сходить хоть по одной ссылке, которые я привёл выше?
Нет, не пробовал. А там точно есть что -то про многопользовательскую сборку? Именно сборку, а не что-то иное? Почему то, как на эту тему начинаешь разговаривать, все вспоминают про CVS, SubVersion и т.д. Хотя в info по CVS первым делом написанно, что это - НЕ система сборки. То есть, в идеале хотелось бы сетевой make, там точно об этом идёт речь? Просто боюсь в очередной раз время потерять...

Ну вот быстренько просмотрел. Походу, всё как обычно - отслеживание изменений в тесктовых файлах. А про сборку ничего. Чтобы мне локально собрать проект, мне всё надо качать на свою машину?
 

Mike22

Местный
Как вы себе представляете многопользовательскую сборку?
Что это вообще такое?

Возможно вы хотели сказать - распределённая сборка?
Но какой в этом смысл?
Вдумайтесь?
Линковку вы всё равно никак не распределите, а тогда как получить конечный результат?

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

Если весь ваш проект в одном месте, то кто вам мешает запускать его сборку каждые пять минут и таким образом всегда иметь на сервере последний вариант системы, сборка которого завершилась без ошибок?

Вобщем, ещё раз подумайте чего же вы хотите.

И ещё - системы контроля версий работают не с текстовыми данными, им всё равно с чем работать.
 

SCTRWD

Местный
Кратенько, что бы хотелось. Есть в сети большой проект. Выписываю любой исходный файл, правлю его, нажимаю на большую красную кнопку и он компилируется, линкуется с удалёнными библиотеками, объектными файлами и создаёт исполняемый файл. В итоге, у себя на винте я имею:
1. правленный исходник
2. его объектник
3. итоговый исполняемый файл

И всё. Ничего больше. В SniFF так и есть, ты работаешь с виртуальным проектом, как если бы он полностью был у тебя на машине, но при этом локально хранятся только твои изменения, по разумному минимуму.
 

Mike22

Местный
SCTRWD, чтобы слинковаться с "удалёнными" библиотеками, вам всё равно придётся эти библитеки сначала себе на машину закачать. :D

Подумайте о развёртывании сетевой файловой системы.
 

SCTRWD

Местный
SCTRWD, чтобы слинковаться с "удалёнными" библиотеками, вам всё равно придётся эти библитеки сначала себе на машину закачать. :D

Подумайте о развёртывании сетевой файловой системы.

Почему "придётся"? Кто мешает наваять прогу, чтобы линковаться только с тем что нужно и по сети? У меня, в принципе, всё в пределах сетевой файловой системы. Приходится писать очень хитрый Makefile, чтобы пользователи, могли создавать свои локальные "зеркала" основного проекта. Если они начнут создавать полноценные копии, никакого места не хватит. Проект порядка 3000 исходников, 20 библиотек, и 40 исполняемых файлов.
 

Mike22

Местный
Почему "придётся"? Кто мешает наваять прогу, чтобы линковаться только с тем что нужно и по сети? У меня, в принципе, всё в пределах сетевой файловой системы. Приходится писать очень хитрый Makefile, чтобы пользователи, могли создавать свои локальные "зеркала" основного проекта. Если они начнут создавать полноценные копии, никакого места не хватит. Проект порядка 3000 исходников, 20 библиотек, и 40 исполняемых файлов.
Какую-то ерунду вы говорите, не нужно это никому, не делается так.

Чтобы слинковать два объектных файла, линковщик их оба должен иметь локально, у себя в памяти.
Объясните, что вы понимаете под фразой "линковаться только с тем что нужно и по сети" ?

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

sami

Местный
Почему "придётся"? Кто мешает наваять прогу, чтобы линковаться только с тем что нужно и по сети? У меня, в принципе, всё в пределах сетевой файловой системы. Приходится писать очень хитрый Makefile, чтобы пользователи, могли создавать свои локальные "зеркала" основного проекта. Если они начнут создавать полноценные копии, никакого места не хватит. Проект порядка 3000 исходников, 20 библиотек, и 40 исполняемых файлов.
3600 исходников, библиотек не считал, исполняемых файлов поменьше. Копия одной ветки ~2.5Gb, работаю через интернет (сервер в Москве) - места хватает.
Что такое локальное "зеркало" - не понял...
 

SCTRWD

Местный
Какую-то ерунду вы говорите, не нужно это никому, не делается так.

Чтобы слинковать два объектных файла, линковщик их оба должен иметь локально, у себя в памяти.
Объясните, что вы понимаете под фразой "линковаться только с тем что нужно и по сети" ?

Извиняюсь но, что значит "слинковать два объектных файла". Объектный файл - автономная единица линковки, ни откого не зависит, а линкуются они в исполняемый файл и не парами, а сотнями.

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

Не понял. А как это решит проблему? Как админ всего этого хозяйства, скажу: никогда, ни при каких обстоятельствах, нельзя открывать доступ на запись в основной проект простым исполнителям, это даже не обсуждается! Каждый пользователь должен иметь возможность создать локальную копию(зеркало) проекта, внести изменения, отладить, протестировать, убедится, что он никому другому ничего не запорол, и уж потом, через меня, занести это в общий проект.

Локальное зеркало - это изврат со ссылками, которые приходится сейчас делать.
 

Mike22

Местный
Извиняюсь но, что значит "слинковать два объектных файла". Объектный файл - автономная единица линковки, ни откого не зависит, а линкуются они в исполняемый файл и не парами, а сотнями.
Да хоть тысячами!

Я устал :D

Объясните толком, чего вы хотите.
И главное, попытайтесь логику и алгоритм работы этой вашей "распределённой сборки" продумать.
Если честно, я не понимаю что вам нужно.
 

SCTRWD

Местный
Да хоть тысячами!

Я устал :D

Объясните толком, чего вы хотите.
И главное, попытайтесь логику и алгоритм работы этой вашей "распределённой сборки" продумать.
Если честно, я не понимаю что вам нужно.

Дык всё просто - как я привёл в примере про изменение и сборку одного файла. Что конкретно не понятно?
 

SCTRWD

Местный
В смысле?


3600 исходников, библиотек не считал, исполняемых файлов поменьше. Копия одной ветки ~2.5Gb, работаю через интернет (сервер в Москве) - места хватает.
Что такое локальное "зеркало" - не понял...

Это ОЧЕНЬ много. Если честно, работаем не на своих машинах, а на выделенном сервере. Отдел около 30 человек, если каждый будет иметь свою копию(и не одну) - места не хватит. Обидно, что чаще всего столько и не нужно: изменения, как правило, у каждого небольшие . А ещё и другие отделы на этом же серванте работают...
 

Mike22

Местный
SCTRWD, без обид, но у меня ощущение что мы на разных языках говорим.
 

SCTRWD

Местный
SCTRWD, без обид, но у меня ощущение что мы на разных языках говорим.

Похоже, что так. А между тем это - серьёзнейшая проблема многих больших комплексов во ВНИИТФ. Много разработчиков, один большой проект, и внести своё изменение, не создавая "мертвую" копию ВСЕГО проекта - большая проблема. Во всех документациях, которые я читал, предлагают только один выход - извращение со ссылками. Что я и делаю, худо-бедно. :lol:
 

Mike22

Местный
Блин. Я уже и не знаю что сказать.
Плакать или смеяться :lol:

Почитайте уже наконец про системы контроля версий!
 
Сверху