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

SCTRWD

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

А зачем, если и так всё работает? Безо всяких параметров и т.д. Ну, не наделаете Вы всех параметров на все случаи жизни :) И надо учесть, что многие пользователи ничего не знают о Makefile, об особенностях сборки и т.д. Да и не должны знать. У них СВОЯ работа, и нельзя от них этого требовать.

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

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

Непонятно, как в этом случае реализуется контроль версий?
При этой схеме вообще очень много вопросов как? возникает.

Контроль версий делается внесением изменений в основной проект и применением команды import CVS.
Вопросы иногда возникают, но, как правило, их и CVS не может разрешить...
 

sami

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

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

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

Кроме того, я привык работать в IDE. IDE делает все вышеописанное за меня, но ничего без меня. IDE не может без моей воли вносить чьи-то изменения в мою локальную копию. IDE сама решает, что собирать. И собирает не все, на что повлияли изменения, а только необходимое для запуска тестов (запускаются одной кнопкой).
Далее, никто и никогда (практически) кроме сервера, не занимается сборкой всего проекта. В каждый момент разработчик работает лишь с малой частью проекта, потому локальная копия ветки достаточно мала. Сборка необходимого для работы осуществляется локально за 2-5 секунд. Достигается это тем, что устойчивых пакетов мало, устойчивые пакеты содержат минимум функциональности, поводов для их изменения обычно мало. Таким образом, наиболее частые изменения не влияют ни на что, кроме тестов, а потому перестраивать весь проект для разработчиков обычно нет необходимости. Даже если кто-то работает с устойчивыми пакетами - он делает это в своей ветке, потому эти изменения меня не касаются и не влияют на локальную сборку.
Таким образом, объем локальных копий (частичных) может быть действительно очень мал.

Вернемся к терминальной специфике.
Быть может то, что вы говорите, имеет смысл, т.к. все файлы на сервере локальные, можно обходиться ссылками... Но работать всем в одной ветке - это зло! Быть может я что-то неверно понял, но именно идея подхвата чужих изменений при персональном билде привела меня к мысле об единой ветке. А это для меня равносильно командной разработке на шаре :)

Решения, аналогичные вашему, может и есть... Но искать их надо у таких же терминальщиков, небогатых винтами. А таких, походу мало.
 

SCTRWD

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

Кроме того, я привык работать в IDE. IDE делает все вышеописанное за меня, но ничего без меня. IDE не может без моей воли вносить чьи-то изменения в мою локальную копию. IDE сама решает, что собирать. И собирает не все, на что повлияли изменения, а только необходимое для запуска тестов (запускаются одной кнопкой).
Далее, никто и никогда (практически) кроме сервера, не занимается сборкой всего проекта. В каждый момент разработчик работает лишь с малой частью проекта, потому локальная копия ветки достаточно мала. Сборка необходимого для работы осуществляется локально за 2-5 секунд. Достигается это тем, что устойчивых пакетов мало, устойчивые пакеты содержат минимум функциональности, поводов для их изменения обычно мало. Таким образом, наиболее частые изменения не влияют ни на что, кроме тестов, а потому перестраивать весь проект для разработчиков обычно нет необходимости. Даже если кто-то работает с устойчивыми пакетами - он делает это в своей ветке, потому эти изменения меня не касаются и не влияют на локальную сборку.
Таким образом, объем локальных копий (частичных) может быть действительно очень мал.

Вернемся к терминальной специфике.
Быть может то, что вы говорите, имеет смысл, т.к. все файлы на сервере локальные, можно обходиться ссылками... Но работать всем в одной ветке - это зло! Быть может я что-то неверно понял, но именно идея подхвата чужих изменений при персональном билде привела меня к мысле об единой ветке. А это для меня равносильно командной разработке на шаре :mellow:

Решения, аналогичные вашему, может и есть... Но искать их надо у таких же терминальщиков, небогатых винтами. А таких, походу мало.


Мда, не совсем понял. Но все мне известные IDE - тоже работают с полностью локальными проектами. Исключая, как я уже сказал, программы типа SniFF от некой кампании WindRiver(которая, по большей части делает встраиваемые системы для марсоходов НАСА :) ) И, к тому же, эти IDE хреново работают на больших серверах. Их разработчики, походу, ориентировались только на домашние машинки. Как правило, там, - статическая сборка и минимум разделяемости... Как и у большинства оконных манагеров - на своей персоналке всё классно, а на сервере со 100 клиентами - полные тормоза.
 

sami

Местный
А зачем, если и так всё работает? Безо всяких параметров и т.д. Ну, не наделаете Вы всех параметров на все случаи жизни :) И надо учесть, что многие пользователи ничего не знают о Makefile, об особенностях сборки и т.д. Да и не должны знать. У них СВОЯ работа, и нельзя от них этого требовать.


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

И, к тому же, эти IDE хреново работают на больших серверах. Их разработчики, походу, ориентировались только на домашние машинки. Как правило, там, - статическая сборка и минимум разделяемости... Как и у большинства оконных манагеров - на своей персоналке всё классно, а на сервере со 100 клиентами - полные тормоза.
И правильно, я считаю. Терминалы не для разработки. Они чтобы билеты на вокзалах продавать.
 

Mike22

Местный
Разговор зашёл в тупик.
Сначала спрашивают совет, люди искренне пытаются помочь, объяснить что не так.
В ответ - полное игнорирование советов.
У меня складывается ощущение что никакие советы вам не нужны и менять вы ничего не хотите.
Вам либо хочется чудес - "чтобы оно само и никому ничего не пришлось делать", либо вы просто решили поделиться своей "технологией".

Если кому-то нравится есть кактусы, то зачем тратить силы и отучать его от этого?

Я в этом бессмысленном разговоре больше не участвую.
 

SCTRWD

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

Почему ж одной только управлением сборкой? Есть и контроль версий. Ажно с 2001 года(Любой пользователь может восстановить версию за любой момент с 2001 года). То, что все довольны, ИМХО, и есть правильно :) И меняют все всё как хотят.

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

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

sami

Местный
Почему ж одной только управлением сборкой? Есть и контроль версий. Ажно с 2001 года(Любой пользователь может восстановить версию за любой момент с 2001 года). То, что все довольны, ИМХО, и есть правильно :) И меняют все всё как хотят.
Есть контроль версий? Я правильно понял, что в нем только одна ветка? Если да, то я бы сказал, что контроль версий присутствует, но не используется по назначению.

Всё правильно, я тоже так думал. А потом понял, что есть пользователи твоей системы - а есть разработчики. И пользователь ничего знать - НЕ обязан. Это мы для него, а не он для нас. Если ему нужна откровенная глупость, значит - обеспечь ему это. Понимаю, что многим из читающих это не нравится, но - такава селя-ва.
Извиняюсь, не хочу никого обидеть, но такая селя-ва характерна для организаций, где процесс важнее результата и где квалификация разработчика измеряется количеством походов в баню с начальством.
 

SCTRWD

Местный
Разговор зашёл в тупик.
Сначала спрашивают совет, люди искренне пытаются помочь, объяснить что не так.
В ответ - полное игнорирование советов.
У меня складывается ощущение что никакие советы вам не нужны и менять вы ничего не хотите.
Вам либо хочется чудес - "чтобы оно само и никому ничего не пришлось делать", либо вы просто решили поделиться своей "технологией".

Если кому-то нравится есть кактусы, то зачем тратить силы и отучать его от этого?

Я в этом бессмысленном разговоре больше не участвую.

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

Какие советы? Про контроль версий? Я с самого начала пытаюсь объяснить, что у меня не в этом проблема. Mike22, я ходил по Вашим ссылкам, и хочу это снова повторить(см. начало абзаца)
 

SCTRWD

Местный
Есть контроль версий? Я правильно понял, что в нем только одна ветка? Если да, то я бы сказал, что контроль версий присутствует, но не используется по назначению.

В нём есть всё что нужно. А именно: возможность восстановить версию(отдельные файлы-директории) программы за любой момент, возможность сравнить любые изменения за любые два момента времени, возможность изучить историю изменений любого файла-директории между двух моментов времени, возможность просмотреть журнал изменений и много что ещё. Что ещё я не могу, чего можете Вы?

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

Такая селя-ва характерна для организаций, где работает много народу: разных возрастов, разной квалификации, с разным опытом программирования и т.д.
 

SCTRWD

Местный

Да я тоже умею поисковиками пользоваться. Только акромя team building и прочей херни, думал, есть вполне конкретные ссылки на решение конректной проблемы :) Видимо нет, да и другие форумы говорят, что - нет - все делают, как и я - извратами со ссылками и хитрыми Makefile - ми.
 

sami

Местный
В нём есть всё что нужно. А именно: возможность восстановить версию(отдельные файлы-директории) программы за любой момент, возможность сравнить любые изменения за любые два момента времени, возможность изучить историю изменений любого файла-директории между двух моментов времени, возможность просмотреть журнал изменений и много что ещё. Что ещё я не могу, чего можете Вы?
- работать над проектом независимо от других разработчиков, работать над конкретными версиями проекта со всеми возможностями, что Вы указали.

Такая селя-ва характерна для организаций, где работает много народу: разных возрастов, разной квалификации, с разным опытом программирования и т.д.
Взять например Люксофт: много народу, разных возрастов, разной квалификации и с разным опытом... Разработчиков, не знающих азы работы с системой контроля версий после первых двух недель работы там наверняка нет даже на внутренних проектах. А среди Team-Lead-ов тупо нет таких кто бы не знал как нужно строить архитектуру проекта, да и вообще организацию процесса.


Ой :)
Только заметил, что я в форуме про Linux и xBSD... Вообще-то я виндузятник и в линуксе ни бум-бум.
 

SCTRWD

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

Да какие проблемы. Каждый и так работает над своим проектом. Для этого ничего и не надо делать - оно само по себе уже так и есть.

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

Здесь нет возможности выбирать и отсеивать. Здесь всё - НАОБОРОТ. Не они под тебя подстравиваются, а ты под них. А с Вашими азами "контроля версий", "архитектурами проекта" - Вы долго не задержитесь: Вы нам не подходите и всё. И идите искать Вам подобных там, где Вас поймут, но не здесь. В крайнем случае, Вам предложат попробовать донести свою мысль до людей, никогда этим не занимавшихся, и не ЖЕЛАЮЩИХ заниматься. Не получилось? Звиняйте... Умейте делать ВСЕМ удобно, и так, чтобы не за счёт других. Не можете? А что Вы хотели...?
 

sami

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

Здесь нет возможности выбирать и отсеивать. Здесь всё - НАОБОРОТ. Не они под тебя подстравиваются, а ты под них. А с Вашими азами "контроля версий", "архитектурами проекта" - Вы долго не задержитесь: Вы нам не подходите и всё. И идите искать Вам подобных там, где Вас поймут, но не здесь. В крайнем случае, Вам предложат попробовать донести свою мысль до людей, никогда этим не занимавшихся, и не ЖЕЛАЮЩИХ заниматься. Не получилось? Звиняйте... Умейте делать ВСЕМ удобно, и так, чтобы не за счёт других. Не можете? А что Вы хотели...?
Да да, плавал, помню. У руля люди никогда этим не занимавшиеся и не ЖЕЛАЮЩИЕ заниматься. Остальные под них подстраиваются. Говорю же процесс важнее.
Только не я не подошел, а наоборот. :)
 

Mek_ph

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

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

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

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

В нашем горячо любимом :huh: институте год назад особым шиком считался гиг памяти на борту, давались такие машины под расчеты, где в общем то дешевле 4 гига поставить чем из-за нехватки оперативки массивы по винту гонять... Но считается что это проблемы того кто расчеты будет делать, пусть выкручивается...
 

Mike22

Местный
В заметке "Как происходит компиляция" (автор Mike Diehl, перевод А.Тарасова) подробно объясняется ход процесса компиляции исходного текста в исполняемую программу. В первой части рассмотрены этапы компиляции, выполняемые компилятором GCC - обработка препроцессором, трансляция, ассемблирование и линковка. Во второй части процесс линковки рассмотрен более подробно. Также описаны системные вызовы Linux и то, как компилятор GCC проводит оптимизации.
http://rus-linux.net/lib.php?name=MyLDP/algol/index
Обсуждение статьи - http://www.linux.org.ru/view-message.jsp?msgid=3266268
 

notacat

Местный
Извините, что вмешиваюсь. Я правильно понимаю, что контроль версий у вас на cvs построен? А зачем вообще сдалось строить что-то именно локально? Что у вас люди с этими локально построенными версиями потом делают?
Чтобы нормально поотлаживаться, все равно обычно хочется максимум исходников иметь.
Хотя из ваших рассказов не совсем ясно, что для вас означает "локально", если все на одном сервере работают и поэтому там места не хватает. Или все-таки локально - это реально у каждого на локальной машине?
Ну пусть разработчик внесет изменение в файл на сервере, раз это всегда можно откатить, и на сервере же и построит.
А билды, которые должны идти в работу (т.е. не оттестированные и не одобренные), просто надо либо в отдельном брэнче держать, либо метить.
Ну например - я правлю файл, кладу его в на сервер, на сервере происходит какой-нибудь тестовый билд с этим файлом, результаты я могу посмотреть, показать начальству и т.д. Когда результаты всех устраивают - на этом файле двигается метка, по которой собирается рабочий билд. Локально можно вообще ничего не строить и править все в обычном текстовом редакторе.
Я правда только под Windows с этим сталкивалась, но вполне все получалось построить на cvs и обычных bat файлайх, которые в той же cvs лежат. Bat файлы может один человек писать, все про это знать не обязаны. Каждый конкретный исполнитель должен уметь только свои файлы в нужное место складывать.

Хотя вот в TFS еще лучше получается, и тоже никто не обязан что-то локально строить - все можно сделать на сервере и потом только поизучать результаты.
 

SCTRWD

Местный
Извините, что вмешиваюсь. Я правильно понимаю, что контроль версий у вас на cvs построен? А зачем вообще сдалось строить что-то именно локально? Что у вас люди с этими локально построенными версиями потом делают?
Чтобы нормально поотлаживаться, все равно обычно хочется максимум исходников иметь.
Хотя из ваших рассказов не совсем ясно, что для вас означает "локально", если все на одном сервере работают и поэтому там места не хватает. Или все-таки локально - это реально у каждого на локальной машине?
Ну пусть разработчик внесет изменение в файл на сервере, раз это всегда можно откатить, и на сервере же и построит.
А билды, которые должны идти в работу (т.е. не оттестированные и не одобренные), просто надо либо в отдельном брэнче держать, либо метить.
Ну например - я правлю файл, кладу его в на сервер, на сервере происходит какой-нибудь тестовый билд с этим файлом, результаты я могу посмотреть, показать начальству и т.д. Когда результаты всех устраивают - на этом файле двигается метка, по которой собирается рабочий билд. Локально можно вообще ничего не строить и править все в обычном текстовом редакторе.
Я правда только под Windows с этим сталкивалась, но вполне все получалось построить на cvs и обычных bat файлайх, которые в той же cvs лежат. Bat файлы может один человек писать, все про это знать не обязаны. Каждый конкретный исполнитель должен уметь только свои файлы в нужное место складывать.

Хотя вот в TFS еще лучше получается, и тоже никто не обязан что-то локально строить - все можно сделать на сервере и потом только поизучать результаты.

Контроль версий у меня построен на cvs, но это НИКАКОГО отношения к вопросу не имеет, я об этом сказал уже не раз, и не два, и даже не три.. :angry: Речь о СБОРКЕ проекта. Таким образом, чтобы человек мог создать у себя в домашке "зеркало" всего проекта(НЕ копию),и совершенно прозрачно менять там любые файлы, после чего нажать на кнопку и получить у себя в домашке исполняемый файл, где его изменившиеся модули слинкованы с текущими модулями основного проекта. Нету никакого внешнего сервера, есть один сервер с основным проектом, и куча пользователей, регулярно заходящих на него и вносящих свои маленькие изменения в текущую версию основного проекта(т.е. в своей локальной копии-"зеракле"). И вопрос заключался именно в том, чтобы каждому пользователю для этого, НЕ пришлось создавать у себя в домашке ПОЛНУЮ копию всего проекта. Потому как дисковое место ограничено, пользователей много, и у каждого в работе может быть не одно независимое изменение. А также, немаловажно, что в процессе их работы над своими изменениями основной проект заведомо может измениться.

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

notacat

Местный
Кажется я поняла. Не верю в существование такой проги, выше уже кто-то писал, почему. У вас хоть резервные копии есть?
 

SCTRWD

Местный
Кажется я поняла. Не верю в существование такой проги, выше уже кто-то писал, почему. У вас хоть резервные копии есть?

Смеётесь, что ли? У меня каждый пользователь может восстановить полную версию основного проекта одной командой, за ЛЮБОЙ момент времени, начиная с января 2001 года! Опять же, спасибо CVS :angry: А уж резервное сохранение самого репозитария ведётся исправно. :)
 
Сверху