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

SCTRWD

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

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

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

Я уже много раз сказал, что проблема НЕ в контроле версий, с этим всё нормально. А проблема - в локальном измнении и сборке проекта, которое не потребует тупого копирования всего проекта в свой home, только и всего.
 

Mike22

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

Я уже много раз сказал, что проблема НЕ в контроле версий, с этим всё нормально. А проблема - в локальном измнении и сборке проекта, которое не потребует тупого копирования всего проекта в свой home, только и всего.
Ещё раз по-русски -
Два пути:
1. Сборка выполняется на сервере - это правильный путь - по сети на сервер только сбрасываются изменения и забирается дистрибутив.
2. Сборка выполняется на компьютере участника проекта - не очень правильно - воспользуйтесь сетевой файловой системой чтобы дать доступ участникам к полному дереву проекта на сервере.
 

SCTRWD

Местный
1. Сборка выполняется на сервере - это правильный путь - по сети на сервер только сбрасываются изменения и забирается дистрибутив.
Зачем пользователю что-то собирать на "сервере"? Это только ЕГО изменения и головняки. Пусть собирает у себя локально. В основной проект его изменения внесу только я, и то - при полной всеобъемлющей проверке.

2. Сборка выполняется на компьютере участника проекта - не очень правильно - воспользуйтесь сетевой файловой системой чтобы дать доступ участникам к полному дереву проекта на сервере.
Дак так оно и есть - все имеют доступ на чтение к к полному дереву проекта - по сетевой файловой системе.
 

Mike22

Местный
[offtp] А вы правда в институте работаете и за большой программный проект отвечаете? [/offtp]

Зачем пользователю что-то собирать на "сервере"? Это только ЕГО изменения и головняки. Пусть собирает у себя локально. В основной проект его изменения внесу только я, и то - при полной всеобъемлющей проверке.
Пользователь ничего на сервере сам не собирает.
На сервер в течении дня сбрасываются изменения и в полночь (каждый час/два/четыре - как хотите) автоматически запускается полная компиляция и сборка проекта, ведь это не 5 минут занимает.

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

Дак так оно и есть - все имеют доступ на чтение к к полному дереву проекта - по сетевой файловой системе.
Ну, и в чём тогда у вас проблемы при компиляции на машине пользователя?
 

SCTRWD

Местный
[offtp] А вы правда в институте работаете и за большой программный проект отвечаете? [/offtp]

[offtp] Ну типа да, отвечаю[/offtp]

Пользователь ничего на сервере сам не собирает.
На сервер в течении дня сбрасываются изменения и в полночь (каждый час/два/четыре - как хотите) автоматически запускается полная компиляция и сборка проекта, ведь это не 5 минут занимает.

Мда, похоже, не работали в большом коллективе :lol: Ни о каком "автомате" здесь не может быть и речи. Проблема в отвественности и гарантиях. Я не могу позволить, чтобы производственный счёт слетел из-за комплексов какого-то умника. Мне пинка под зад дадут, и будут совершенно правы.

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

Не отлажена и не отработана. Более того: даже близко нет и даже идей как это сделать. И это признают ВСЕ. Даже системы контроля версий и то говорят: досюда мы можем, а потом - пас!

Ну и, наконец, где решение то проблемы? Как дяде Васе внести строчку в исходный код, не качая при этом весь проект?
 

Mike22

Местный
[offtp] Ну типа да, отвечаю[/offtp]
[offtp]Ужас[/offtp]

Мда, похоже, не работали в большом коллективе :lol: Ни о каком "автомате" здесь не может быть и речи. Проблема в отвественности и гарантиях. Я не могу позволить, чтобы производственный счёт слетел из-за комплексов какого-то умника. Мне пинка под зад дадут, и будут совершенно правы.
О чём вы вообще говорите ????? :lol:
Какой коллектив? Какая ответственность? Какой "производственный счёт"?
Как это связано с технической организацией процесса компиляции и сборки программного продукта???
У вас что, после каждой компиляции софт сразу идёт в реальную работу? Периода тестирования, понятия стабильной и нестабильной версии у вас нет?
О чём вы вообще говорите??? :lol:

Не отлажена и не отработана. Более того: даже близко нет и даже идей как это сделать. И это признают ВСЕ. Даже системы контроля версий и то говорят: досюда мы можем, а потом - пас!

Ну и, наконец, где решение то проблемы? Как дяде Васе внести строчку в исходный код, не качая при этом весь проект?
Знаете, я устал стучаться в закрытую дверь.
Вы слышали когда-нибудь про ядро Linux? Это открытый проект в работе над которым принимают участие десятки тысяч человек. Вы знаете объём кода ядра?
Вы пытались хоть попробовать разобраться как инфраструктура таких открытых проектов устроена?
Вы банально по ссылкам которые я дал в начале обсуждения сходить не хотите.
О чём говорить?
Не обижайтесь, но вы не на своём месте работаете.
 

SCTRWD

Местный

Ни чо не говори!

О чём вы вообще говорите??? :lol:

Уф, обкакли по полной программе :lol:

Какой коллектив? Какая ответственность? Какой "производственный счёт"?

Ну вот как-то так получается, что не в пупке ковыряемся, а занимаемся серьёзными расчетами.


У вас что, после каждой компиляции софт сразу идёт в реальную работу? Периода тестирования, понятия стабильной и нестабильной версии у вас нет?
О чём вы вообще говорите??? :lol:

Похоже, с фантомом разговаривал. По моему во всех моих постах ясно дано понять, что тестируем по полной программе, и когда протестировали, я всё равно ещё раз протестирую!

Вы слышали когда нибудь что ядро Linux? Это открытый проект и в работе над которым принимают участие десятки тысяч человек. Вы знаете объём кода ядра?
Вы пытались хоть попробовать разобраться как инфраструктура таких открытых проектов устроена?

Да слышал, я слышал. Изменения в основные ветки, всё равно вносят конкретные люди.

О чём говорить?
Не обижайтесь, но вы не на своём месте работаете.

ОЧЕНЬ даже может быть. Однако пока платят, и не мало. Видимо, дураки :eek:

Вроде как хотел получить конкретный ответ на конкретный вопрос. В итоге получил оскорбления. Ну, да ладно, уйдём в другой форум, где товарищи занимаются более серьёзными вещами, а не Hello, world!!! пишут...
 

Mike22

Местный
Да где оскорбления то?

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

Изменения в основные ветки, всё равно вносят конкретные люди.
Вносят изменения авторы, а для попадания в основную ветку ядра изменения подтверждаются ответственным за эту часть проекта.
Но и до подтверждения это изменение уже присутствует в дереве исходников, просто оно в неподтверждённой (тестовой) ветке находится и при этом может быть доступно всем для тестирования и анализа.
 

sami

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

То что специалисты ищут решения на форуме городского интернет-провайдера - говорит о том, что в институте и с интернетом беда :lol:

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

SCTRWD

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

Я тоже думал, что гроши - оказалось - жуткие деньги :p МНОГО пользователей, все хотят поработать :)

То что специалисты ищут решения на форуме городского интернет-провайдера - говорит о том, что в институте и с интернетом беда :eek:

С интернетом, в последнее время, действительно, труба :D , однако же проблема не в этом.

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

Что за зверь? Можно поподробнее?

To Mike22. Кротко, проблема проста. Есть единый проект, открытый всем на чтение. Пользователь хочет локально внести в него изменения, но при этом не создавать полную копию всего проекта у себя. Во время работы над локальными изменениями основной проект может(и будет!) меняться. Хочется, чтобы пользователь при очередной сборке эти изменения почуйствовал, но при этом и свои не потерял. Сейчас у меня пользователь создаёт зеркало со ссылками(командой lndir) плюс хитрый Макеfile, котрый отделяет общее от локального. В итоге его локальные изменения линкуются с общим проектом, и он получает общий исполняемый файл со своими изменениями. Партизанщина, конечно, но вот программ, которые позволяют автоматизировать этот процесс, я не нашел(кроме упомянутого SniFF). Не знаю, понятно ли объяснил :D
 

sami

Местный
Я тоже думал, что гроши - оказалось - жуткие деньги :p МНОГО пользователей, все хотят поработать :)
RAID из 10 винтов по 250 гиг (не такие уж большие деньги) снимут напряженность. На одном проекте - наверняка.

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

Что за зверь? Можно поподробнее?
Я имел ввиду Inversion of control, или скорее даже Dependency inversion principle.
Только это скорее архитектурное решение, нежели административное. Оно позволит делать копию только исходников интерфейсных модулей и того модуля, в котором производятся изменения. Но не только это. Следствием применения такого подхода может быть значительное уменьшение времени сборки всего проекта.

Только вот я очень и очень и очень сильно сомневаюсь, что этот подход будет воспринят разработчиками, или теми, кто у руля проекта, с энтузиазмом (работал я в институте, очень хорошо представляю что там и как на ниве разработки).

To Mike22. Кротко, проблема проста. Есть единый проект, открытый всем на чтение. Пользователь хочет локально внести в него изменения, но при этом не создавать полную копию всего проекта у себя. Во время работы над локальными изменениями основной проект может(и будет!) меняться. Хочется, чтобы пользователь при очередной сборке эти изменения почуйствовал, но при этом и свои не потерял. Сейчас у меня пользователь создаёт зеркало со ссылками(командой lndir) плюс хитрый Макеfile, котрый отделяет общее от локального. В итоге его локальные изменения линкуются с общим проектом, и он получает общий исполняемый файл со своими изменениями.
То что вы хотите - это очень неправильно (имхо). На мой взгляд, куда более удобный подход, когда пользователь вносит изменения максимально изолированно от других пользователей, фактически в своей персональной ветке. Для этого создаются ветки per-developer-branch, per-feature-branch и даже per-version-branch. Я как разработчик, могу уйти в свою ветку на месяц, создать там независимо от остальных что-то, потом парой merge операций (forward integration и reverse integration) безболезненно синхронизовать свои изменения с главной веткой. Reverse integration вообще-то должен делать специальный человек, который убеждается, что функциональность проекта не нарушена, но я достаточно крут для этого.
В вашем случае, как я понимаю, forward integration будет производитсья автоматически без команды пользователя, и непременно будет отвлекать его от непосредственной задачи. Просто жутко представить, как это может повлиять на процесс отладки и тестирования. Отладка ведь в своем роде аналитический просецесс, где предположение о том, что только один пользователь может вносить изменения, влияющие на функциональность дает ощутимое преимущество.
 

SCTRWD

Местный
RAID из 10 винтов по 250 гиг (не такие уж большие деньги) снимут напряженность. На одном проекте - наверняка.

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

Здесь я пас. На свои деньги никто ничего покупать не будет, это точно :p

Я имел ввиду Inversion of control, или скорее даже Dependency inversion principle.
Только это скорее архитектурное решение, нежели административное. Оно позволит делать копию только исходников интерфейсных модулей и того модуля, в котором производятся изменения. Но не только это. Следствием применения такого подхода может быть значительное уменьшение времени сборки всего проекта.

Только вот я очень и очень и очень сильно сомневаюсь, что этот подход будет воспринят разработчиками, или теми, кто у руля проекта, с энтузиазмом (работал я в институте, очень хорошо представляю что там и как на ниве разработки).

Это Вы правильно сомневаетесь. Разработчики все разные, с разным уровнем подготовки, и разным бэкграундом.(Ажно доходит до того, что с Borland исходники суют :) )

То что вы хотите - это очень неправильно (имхо). На мой взгляд, куда более удобный подход, когда пользователь вносит изменения максимально изолированно от других пользователей, фактически в своей персональной ветке. Для этого создаются ветки per-developer-branch, per-feature-branch и даже per-version-branch. Я как разработчик, могу уйти в свою ветку на месяц, создать там независимо от остальных что-то, потом парой merge операций (forward integration и reverse integration) безболезненно синхронизовать свои изменения с главной веткой. Reverse integration вообще-то должен делать специальный человек, который убеждается, что функциональность проекта не нарушена, но я достаточно крут для этого.
В вашем случае, как я понимаю, forward integration будет производитсья автоматически без команды пользователя, и непременно будет отвлекать его от непосредственной задачи. Просто жутко представить, как это может повлиять на процесс отладки и тестирования. Отладка ведь в своем роде аналитический просецесс, где предположение о том, что только один пользователь может вносить изменения, влияющие на функциональность дает ощутимое преимущество.

Да всё не так ужасно. пользователь именно "вносит изменения максимально изолированно от других пользователей, фактически в своей персональной ветке". Так и есть. Просто, чтобы это обеспечить, надо поизвращаться, вот и всё. Я думал, есть какие-то готовые решения на этот счёт...
 

Mike22

Местный
sami, хорошо сказал, только улыбающегося смайлика в одном месте не хватает :p

SCTRWD, и ваша схема и то что говорит sami реализуется на базе систем контроля версий.
Вот вам ещё полезные ссылки -
http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%...%8F%D0%BC%D0%B8
http://alenacpp.blogspot.com/2007/09/blog-post.html
http://masters.donntu.edu.ua/2006/fvti/ilyenko/ind/index.htm
 

SCTRWD

Местный
sami, хорошо сказал, только улыбающегося смайлика в одном месте не хватает :)

SCTRWD, и ваша схема и то что говорит sami реализуется на базе систем контроля версий.
Вот вам ещё полезные ссылки -
http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%...%8F%D0%BC%D0%B8
http://alenacpp.blogspot.com/2007/09/blog-post.html
http://masters.donntu.edu.ua/2006/fvti/ilyenko/ind/index.htm

Mike22, ну уже не смешно, ну, уже устал повторять, что системы контроля версий меня НЕ интересуют. Не являются они системами СБОРКИ. Тупо система контроля версий файлов и всё. Это у меня и так уже есть. А вот обеспечить работу кучи пользователей с одним проектом, да так, чтобы было - БЫСТРО, ПРОСТО, и никому из них не пришлось вникать в оссобенности написания Makefile - вот это и есть проблема.

Есть большой проект. Юзер захотел внести изменения в один маленький файл. Нажал кнопку, и всё - все исполнямые файлы, завязанные на его изменении, - у него в директории. И всё, ничего больше :p
 

Mike22

Местный
Mike22, ну уже не смешно, ну, уже устал повторять, что системы контроля версий меня НЕ интересуют. Не являются они системами СБОРКИ.
И сразу после этого -
Есть большой проект. Юзер захотел внести изменения в один маленький файл
Вы себе не противоречите?
У вас проблема в организации процесса компиляции и сборки или в организации совместной многопользовательской работы над проектом?

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

Есть большой проект. Юзер захотел внести изменения в один маленький файл. Нажал кнопку, и всё - все исполнямые файлы, завязанные на его изменении, - у него в директории. И всё, ничего больше :p
Дак по вашим же словам - у всех пользователей уже есть доступ на чтение к полному дереву проекта.
В чём проблема?

... системы контроля версий меня НЕ интересуют ... /это/ ... тупо система контроля версий файлов и всё
Здесь вы сильно ошибаетесь. Познакомьтесь хоть с одной из систем.
Сходите уже наконец по ссылкам.
 

BuG2BuG

Демон FreeBSD
Ндя, странно это как-то всё. Обычно всё делается проще как тут подметили: большой проект разбивается на библиотеки / ветки / версии, каждый работает только с той, что ему нужна, пусть хоть укомпилируется у себя на машине, потом все изменения переносятся в головную ветку ответственным человеком репозитария, ночью производится полный билд. Или я тоже что-то не понимаю? У Вас настолько специфичная задача?
 

SCTRWD

Местный
Вы себе не противоречите?
У вас проблема в организации процесса компиляции и сборки или в организации совместной многопользовательской работы над проектом?

У меня проблема именно в организации процесса компиляции и сборки. Вы как собираете проект? Копируете себе в директорию и делаете маке? Отлично. Теперь дядя Вася хочет тоже, но с перламутровыми пуговицами. То есть хочет поменять какой-то файл в проекте. Что ему делать? Копировать весь проект к себе в директорию, менять этот файл и набирать маке? Вот именно этого и хочется избежать. Хочется, чтобы некая система позволила дяде Васе создать у себя виртуальный проект, как если бы он был у него в директории. Он бы там менял, что хотел, а потом, нажал на кнопку. И система сама разобралась, где лично его изменения, а где общие, и слинковала бы исполняемый файл, взяв измененные файлы у дяди Васи, а неизмененные - из Вашего (основного) проекта.

Исключив при этом необходимость копирования, непосредственного изменения Makefile, а при очередной пересборке дядей Васей своих изменений, - слинковаться с актуальными модулями из основного проекта, ибо он уже может поменяться к тому времени.
 

sami

Местный
У меня проблема именно в организации процесса компиляции и сборки. Вы как собираете проект? Копируете себе в директорию и делаете маке? Отлично. Теперь дядя Вася хочет тоже, но с перламутровыми пуговицами. То есть хочет поменять какой-то файл в проекте. Что ему делать? Копировать весь проект к себе в директорию, менять этот файл и набирать маке? Вот именно этого и хочется избежать.
Надо понимать, что сейчас сборка так происходит? И часто дяде Васе приходится копировать и пересобирать весь проект после изменения в одном файле? И так каждый из 30 разработчиков? Интересно отношение времени разработчиков, потраченного на сборку, ко времени, потраченному на собственно разработку....

Проблема скорее в организаци процесса.
 

SCTRWD

Местный
Надо понимать, что сейчас сборка так происходит? И часто дяде Васе приходится копировать и пересобирать весь проект после изменения в одном файле? И так каждый из 30 разработчиков? Интересно отношение времени разработчиков, потраченного на сборку, ко времени, потраченному на собственно разработку....

Проблема скорее в организаци процесса.

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

Пользователи делают это постоянно и не по разу. Именно минимум времени, потраченного на сборку маленького изменения в большом проекте, и позволяет это делать.

Просто, думал, есть уже готовые решения, но не встречал...
 

Mike22

Местный
... Просто, думал, есть уже готовые решения, но не встречал...
Готовые решения есть:
- множество ветвей проекта
- условные make-файлы и передача в них параметров при запуске компиляции
- отказ от ненужных компиляций проекта каждым участником и централизация сборки

и ещё можно несколько вариантов предложить.
Как уже было сказано выше - проблема не в отсутствии решений, она в неверной организации процесса.

Сейчас, конкретно у меня, пользователь создаёт зеркало из ссылок ... Дёшево, надёжно и практично. И главное - быстро, и минимум затраченного времени и дискового пространства.
Непонятно, как в этом случае реализуется контроль версий?
При этой схеме вообще очень много вопросов как? возникает.
 
Сверху