Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Среднее число пользователей скрипта — 40-60 человек.
Да, всё верно, но не было ни одного пожелания от разработчика видеть код в репозитории, чтобы участвовать в разработке. Однако, и хостинг юзерскриптов содержит всё для контроля версий. Дублирование где-нибудь ещё создало бы ненужную копию, а сейчас всё просто: актуальная версия — на хостинге скрипта.
Форкание на Гит-хостинг, тем не менее, очень просто: вместо клика по кнопке просто делаете копипейст, а затем сообщаете о пулл-реквесте.
> Там только старые версии и diff’ы. Нет объяснений «что изменилось»,Я с самого начала установил систему, что в 3-4 строчках метафайла (директивы // @ update и другие в начале юзерскрипта) описаны объяснения, что изменилось. Больше изменений — больше строчек. Причём, с системой контроля версий, встроенной с скрипт там всё достаточно удобно.
> нет информации об авторах измененийВ те же @ update вписываются авторы, если бы их было более одного. Но вообще — это продукт одного автора, а он написан в мета-директивах (@ author).
> Ненужная копия — это файлы на userscripts.Этот сайт — основной канал распространения и поддержки контроля версий скрипта.
> при использовании патчей вы лишаетесь умных алгоритмов слиянияdiff на 1 файле никто не отменял
> Куда проще либо пройти мимо, либо ограничиться созданием задачи на reformal.ru, чем убеждать автора использовать VCS.У меня в использовании коллективных VCS большой опыт. Просто не было ни единого разработчика, желавшего участвовать в проекте на JS.
Чтобы сказать, что VCS не нужно, потому что разработчики не просят, надо знать, почему они не просят и сколько было тех, кто воспользовался первыми двумя вариантамиЯ могу это оценить: 6-7 дельных предложений через Реформал (скорее, не от разработчиков, а от пользователей). Не просят коллективной разработки — потому что вообще разрабочиков юзерскриптов мало (это можно видеть по количеству активных и старых скриптов на userscripts.org), а более-менее опытный с лёгкостью напишет свой скрипт, чем будет участвовать в другом проекте. Написать скрипт под свои нужды 1 задачи — дело от 30 минут до нескольких часов (пример). Для этого не надо вливаться в чужой проект и даже форкать его.
1) открываете настройки скрипта;Это удобно для обычных пользователей, и то когда скриптов мало. Если настройки браузера уже под констролем СКВ, то обновление всего хозяйства силами этой СКВ гораздо удобнее. Впрочем, обновление силами пакетного менеджера обычно ещё удобнее, чем нецелевое использование СКВ. Для userjs я специализированных программ для их обновления не знаю, но не знаю ≠ не существует.
2) клик по «проверка обновлений» — выводятся апдейты с нового метафайла, если он появился на хостинге. Там же — номер и дата новой версии;
3) если заинтересовало, можете тут же 1 кликом инсталлировать новую версию или по ссылке перейти на дифф.
Этот сайт — основной канал распространения и поддержки контроля версий скрипта.Это не означает, что эта копия нужна. Для того же www.vim.org как‐то пытались написать систему, которая забирает все нужные данные (README и сам исходный код дополнения) прямо из удалённого репозитория безо всяких костылей вроде скрипта, но проект заглох.
Далее Вы говорите о своей системе сборки для плагина Vim. Я полностью в курсе таких систем. Но в поддержке юзерскрипта решил не использовать сборщик, используя особенность юзерскрипта в том, что он поставляется в виде единственного файла. Держа этот файл в некотором порядке, я избавляюсь от необходимости сборки.Скрипт пишется за десяток минут, большая часть которых уходит на освежение в памяти документации по WWW::Mechanize или аналога на вашем любимом ЯП. А один файл на 4000+ строк, да ещё из без проставленных маркеров складок — слишком большой размер для одного файла.
Если бы я делал аддоны и расширения для 4 основных браузеров, то система сборки понадобилась бы. Но пока что нужды скриптов для сайта полностью обеспечиваются юзерскриптом. Это упрощает ведЕние единой версии вместо 4 разных для браузеров. Хотя там кроссбраузерные и версионные проблемы регулярно появляются.Она и сейчас нужна. Без неё можно обойтись, но … У меня уже есть один проект такого вида (один файл на много‐много строк), так один раз забросив на несколько месяцев разработку я теперь боюсь его трогать; несмотря даже на наличие этих самых маркеров складок и разделение на относительно независимые модули внутри файла.
Далее, о том, что «просто копипейст» не работает. Если бы кто-то когда-то хотел делать форк, мы бы об этом узнали. На самом деле, никого этого до сих пор не интересовало. Только один человек помог сделать стили в формате Less в рамках своей инициативы, но его код ни он, ни кто другой далее не поддерживал (и договорённости не было). Поэтому, зачем изобретать то, что не востребовано?Ничего бы не узнали. Для того, чтобы сделать форк, нужно чтобы было что форкать. Для того, чтобы было, что форкать, нужно убедить автора воспользоваться DVCS (причём здесь именно D). Убеждать кого‐то сделать то, что нужно тебе, а не ему — занятие неблагодарное, проще пройти мимо.
diff на 1 файле никто не отменялКонфликты тоже. Слияние в DVCS использует также и информацию об общем предке. А diff’ы — ещё хуже, чем процедура слияния в subversion, до сих пор остающаяся одной из основных претензий к нему.
Вообще, Вы как-то очень механистично рассматриваете пулл-реквест. Если второй разработчик не договорился с первым о совместной разработке, то сложности будут обеспечены в любой СКВ.Наблюдая и учавствуя в разработке некоторых проектов, в том числе крупных вроде vim практически никогда не видел, чтобы кто‐то о чём‐то договаривался перед созданием запроса на слияние. Изредка запрашивают мнение разработчиков и пользователей о некотором планируемом изменении, ещё реже всё же договариваются: последнее нужно только для крупных изменений. Никаких сложностей — вы просто делаете изменение и запрашиваете слияние. И такое возможно именно благодаря СКВ.
Для своих других задач я использую Git и Битбакет. Это — многофайловые проекты, в которых имеются наблюдатели, скачивающие проект для своих нужд. Для однофайлового скрипта — не вижу необходимости создавать копию. Сам код скрипта открыт под LGPLv3 — это значит, что если другой разработчик имеет такие же убеждения, как у Вас, то ему даже спрашивать меня не надо — он может самостоятельно скопировать проект в репозиторий и пригласить меня же для продолжения.Для этого нужно написать скрипт, импортирующий текущую версию в СКВ: потому что пока разработчик создаёт изменение вы запросто можете не раз обновить скрипт на userjs. Или вносить ваши изменения туда самому.
Я могу это оценить: 6-7 дельных предложений через Реформал (скорее, не от разработчиков, а от пользователей). Не просят коллективной разработки — потому что вообще разрабочиков юзерскриптов мало (это можно видеть по количеству активных и старых скриптов на userscripts.org), а более-менее опытный с лёгкостью напишет свой скрипт, чем будет участвовать в другом проекте. Написать скрипт под свои нужды 1 задачи — дело от 30 минут до нескольких часов (пример). Для этого не надо вливаться в чужой проект и даже форкать его.Насчёт ситуации с разработчиками userjs я не в курсе. Боюсь, до повсеместного распространения pathogen и Vundle то же самое было и с дополнениями к Vim. (После старо проще использовать репозиторий на github, что не увеличило количество разработчиков, но создало дополнительные причины использовать git+github, причём именно их.)
так, один раз забросив на несколько месяцев разработку я теперь боюсь его трогать; несмотря даже на наличие этих самых маркеров складок и разделение на относительно независимые модули внутри файла.Аналогом можно считать вот это моё восстановление поддержки Firefox 3.6 и Iceweasel. Я уже подзабыл, что не работает в 3.6 и какие совместимые коды приходилось писать. Однако, при отладке в браузере относительно легко ищется, что не работает. Если бы проект был разобран на файлы, это бы не помогло в отладке таких случаев.
Насчёт ситуации с разработчиками userjs я не в курсе.А я общался с некоторыми по другим скриптам и наблюдал историю правок юзерскриптов, в том числе на Гитхабе. Везде разработчикам удобнее находиться в рамках своей системы, внутри своего скрипта. Даже когда я достигал совместимости своих скриптов с другими, ответных действий других разработчиков можно было не дождаться. Как кому удобно, тот так и делает. Это следствие неразвитости культуры совместных разработок, конечно.
Для этого нужно написать скрипт, импортирующий текущую версию в СКВ: потому что пока разработчик создаёт изменение вы запросто можете не раз обновить скрипт на userjs. Или вносить ваши изменения туда самому.Такой ситуации совместной разработки попросту не возникает. Например, года 2 назад был проект, похожий на мой в плане сбора многих фич в юзерскрипте, и, насколько помню, только под Хром. Он пожил месяцев 5, а до этого разработчик патчил его на Гитхабе довольно часто раз 3-7 дней. Была у меня мысль включиться? Нет, потому что мне нужен был кроссбраузерный скрипт, потому что у того разработчика была своя система разработки. Так примерно и сейчас. Даже если кто-то посмотрит на мой код, не захочет участвовать. А новых скриптов на userscript.org появляется мало.
Наблюдая и учавствуя в разработке некоторых проектов, в том числе крупных вроде vim практически никогда не видел, чтобы кто‐то о чём‐то договаривался перед созданием запроса на слияние. Изредка запрашивают мнение разработчиков и пользователей о некотором планируемом изменении, ещё реже всё же договариваются: последнее нужно только для крупных изменений. Никаких сложностей — вы просто делаете изменение и запрашиваете слияние. И такое возможно именно благодаря СКВ.Я бы тоже не договаривался. Но вот что получается. Изменил я кое что в d3.js. Захотел сделать пулл-реквест. Склонировал я там d3.js, в Гитхабе. А он там, оказывается разобранный. Для проектирования, может быть, хорошо. Но нигде не написано, что за сборщик используется и как с проектом работать. Работать с репозиторием оказалось затрууднительно, нужно спрашивать разработчика или догадываться самому.
Сборка проекта полезна, если он обфусцируется или сжимается для каких-то целей. Но в этом случае наличие сборщика не упростило бы работу с проектом. Итого, проект в VCS представлял бы собой тот же 1 файл + ещё вспомогательные для сборки и сопровождения и ухудшил бы порог вхождения потенциального участника.
Я постепенно упрощаю структуру проекта — вот это может быть полезнее для потенциального подключения разработчиков, да и то мало реально.Это прежде всего полезно для вас самих. Если бы я завершил refactoring того проекта с файлом на много‐много строк я бы не так опасался его трогать, хотя он всё также остался бы одним файлом с кодом.
Я бы тоже не договаривался. Но вот что получается. Изменил я кое что в d3.js. Захотел сделать пулл-реквест. Склонировал я там d3.js, в Гитхабе. А он там, оказывается разобранный. Для проектирования, может быть, хорошо. Но нигде не написано, что за сборщик используется и как с проектом работать. Работать с репозиторием оказалось затрууднительно, нужно спрашивать разработчика или догадываться самому.Здесь не договариваться нужно. Это типичный проект на одного разработчика (или небольшую команду фиксированного состава), здесь нужны README (и, возможно, CONTRIBUTING) в корне с описанием того, как произвести сборку (во втором файле — что ещё надо знать другому разработчику). В таком случае логично спросить, написать README и отправить PR с ним. Но «спросить, как осуществляется сборка» и «договориться о том, что вы внесёте некоторые изменения» — это разные вещи.
Редактирование своей статьи на Хабре через выделение цитаты в HabrAjax; поддержка Iceweasel