Pull to refresh

Comments 55

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

Вот тут я получил вывих мозга.
Это переводчик вывих мозга получил. В оригинале речь шла о том, что в том репозитории nVidia не так много кода — в основном код для «склейки» их проприетарного «блоба» (==собственно драйвера) с ядром Linux'а, но так как оный блоб не содержит никакого кода из ядра, то код в том репозитории — это прекрасный пример того как нечто разрабатывается сторонней организацией, которая никогда даже не собиралась играть по «правилам» игры, которые устанавливают разработчики ядра.

Честно говоря, немного не понял как осуществляется процесс отправки патча от разработчика к мейнтейнеру.

По email. Просто вставляешь патч в письмо и отправляешь с CC в список рассылки.

Может кто-нибудь сказать: почему нельзя вместо отдельных репозитариев — по сути форков — в которых ведётся работа над подсистемами, использовать ветки? Сугубо с точки зрения разделения кода. Если я правильно понял (не факт, что правильно понял — я всё ещё объят сном, сейчас мне кто-нибудь объяснит, я хлопну себя по лбу и скажу: а-а, да… пардон, я сонный), то вместо разделения проекта на модули ядро просто назначает: вот в этой копии репозитария мы работаем над сетью, а в этой над файловой системой. Потом контрибьюторы шлют изменения, майтайнеры анализируют их и возможно координируют дела со смежными форками (если изменения затрагивают несколько подсистем или ведётся конфликтующий набор изменений), потом всё идёт ещё выше большими пулл-реквестами, и в конце-концов приземляется в репозитарии Линуса. Так репозиторий один, весь код виден всем сразу, но работа организована иерархически. Поэтому мне просто интересно, не могут ли — чисто технически — долгоживущие ветки (на стороне основного репозитария) заменить отдельные репозитарии. Договориться об именовании веток (скажем, в net майнтайнер будет собирать работу для сети, а дальше в net/* уже ведутся изменения, из которых посылать патчи), должно такое работать или нет? Просто я смотрю на копии репозитариев у майнтайнеров подсистем (и опять же, скорее всего чего-то важного не вижу), и они мне кажутся такими glorified branches.

По крайней мере с правами доступа проблема. Насколько я понимаю для связки типа git+ssh нельзя назначить доступ людям на основе веток. В github вроде нет таких проблем. Но с ним другая проблема, если всю работу сосредоточить в одном репозитории с ветками для мантейнеров есть большая вероятность утонуть под количеством issue и pull request, даже при наличии меток и прочего.

Вроде бы можно… я не уверен, но, помнится, ещё gitolite в своё время позволял назначать очень мелкозернистые права, ограничивать пространства имён веток, где и кому можно создавать ветки (например, студентам разрешить создавать ветки под lab1/*), квоты — как будто всё для этого имелось. Поправьте, если кто лучше знает.


Ну и с issue — это уже другая проблема, я именно поэтому уточнил "… сугубо с точки зрения разделения кода", бактрекер — это уже не контроль версий. Меня интересовало, это мне чудится, или действительно такие копии репозитариев — это на самом деле такие вручную сделанные ветки. Кстати, а pull request при чём? Я имею в виду не гитхабовский pull request, а просто — почему можно формировать pull request между копиями репозитариев, но нельзя тем же способом между ветками?

Меня интересовало, это мне чудится, или действительно такие копии репозитариев — это на самом деле такие вручную сделанные ветки.
Не вручную всё-таки, а с помощью специально для этого написанной программы. Git называется.

Просто Линус вдоволь насмотрелся на тему срача вокруг «committer access»а и «branch creation criteria» в разных *BSD и GCC и был принципиально против системы в которой понятие «committer access» вообще существует.
Так репозиторий один, весь код виден всем сразу, но работа организована иерархически.
Собственно git изначально был написан так, чтобы удовлетворять одному простому требованию: код, написанный Intel для поддержки ещё не выпущенных процессоров Intel (на самом деле тогда Transmeta — но неважно), должен физически находиться только на серверах Intel (с контролируемым доступом, понятно).

В этом — смысл D в DVCS. Линус категорически отказывался пользоваться VCS, которые не удовлетворяли этому условию, а когда доступа к единственной системе контроля версий, удовлетворяющей этому условию (и при этом «промышеленной», не умирающей на проектах масштаба ядра Linux), его лишили — написал свою.

Просто я смотрю на копии репозитариев у майнтайнеров подсистем (и опять же, скорее всего чего-то важного не вижу), и они мне кажутся такими glorified branches.
Они и есть «glorified branches» — но с двумя важными отличиями:

  1. Кто угодно может их создавать не спрашивая ничьего разрешения
  2. Об их существовании нельзя узнать если только сам автор этого не захочет

Оба момента для Линуса были принципиально важны.

Нет-нет, я понимаю саму оригинальную задумку DVCS — чтобы у каждого был полноправный репозитарий, а коммиты могли курсировать между репозитариями. (Про нюанс с проприетарным кодом Intel — вот этого не знал.) Меня интересовал сам технический вопрос, в более узком смысле — автор упомянул, что от гитхаба им нужно только более гибкое взаимодействие между форками (чтобы они трактовались как части одного проекта), вот и подумалось, что по сути-то они трактуют репозитарии как ветки. Понятно, что всё ещё потребуется возможность анонимного создания веток контрибьюторами.

Полезное дополнение про процессоры, как-то тогда намного логичнее в этом случае выглядит необходимость DVCS.
На GitHub [пулл-реквесты] это единственный способ разработчикам внести предложенные патчи в общий код.
Довольно странное утверждение. Можно открыть ишью и приложить патч (я обычно так и делаю), можно дать ссылку на сторонний багтрекер или репозиторий. Часто, действительно, просят сделать pull request, но лично мне это неудобно. Иногда я иду навстречу, иногда вежливо отказываюсь, объясняя, что постоянно работать над этим кодом не собираюсь, и смысла клонировать проект только для того, чтобы сделать один-два пулл-реквеста, не вижу.

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

UFO just landed and posted this here

Закоммитить локально, сформировать письмо с патчем (git format-patch), потом отправить по почте кому-нибудь (git sendmail). Например, другим разработчикам проекта. А чтобы применить изменения, сделанные другими пользователями, нужно получить письмо с патчем и выполнить git am.
Т.е. грубо говоря, git push в удалённый репозиторий заменяется на git sendmail, а git pull на git am. При этом вариант с почтой получается p2p, т.е. изменения пользователям приходят напрямую от других пользователей.

Спасибо, очень интересная статья. Но многое не понятно. Существует ли текст, которые доступно описывает организацию работы над ядром?

Плюсую этого комментатора, было бы интересно изучить в деталях.
Вот, например, в упомянутое "дерево интеграции linux-next" как всё сливается? Через subtree?

UFO just landed and posted this here

Там в целом написано. Сам по себе Linus никому не указ, у каждой компании своя ветка, так что если репозиторий чисто Linus'а больше не будет работать, существенно ничего не поменяется. Ведь по сути, ни в одном дистрибутиве Linux нет ванильного ядра.

Если Линус лично принимает все изменения в мастер репозиторий и выкатывает релиз, то в случае, если он не будет в состоянии этого делать, кто будет ответственен за дальнейшие релизы?
Я думаю вначале будет много неразберихи, но через год-два всё устаканится.

А главное, будут ли компании-производители доверять этому человеку или каждый сделает свой форк и начнется хаос?
А этих «форков» и сейчас… как грязи. Большинство железячников, в частности, ядро от Линуса не волнует от слова «никак» — они пользуют ядро от Android'а. А многие — и куда более древние ядра от разных компаний.

В том-то и фишка, что ядро Линукса — это реально распределённый проект и очень многие фичи годами живут вне основной ветки. Чисто так для примера: OverlayFS в ядре Линуса появилась-таки в 2014м году. Притом что первая версия этой идеи (под названияем IFS — Inherited File System) появилась в Slackware, на минуточку, в 1993м (sic!) году.
IFS напоминает Integrated file system от IBM… я сначала подумал, что IBM-овская версия появилась раньше, но погуглил — вроде как, она появилась с системы IBM i5/OS, датируемоей 2004 годом…
если он не будет в состоянии этого делать, кто будет ответственен за дальнейшие релизы?
ИМХО кто-нибудь из основных разработчиков. Грег Кроа-Хартманн, например.

Мне кажется автор статьи, за кучей текста, упустил один простой момент. Распределённый репозиторий он на то и распределённый, что не хостится в одном месте. Никто не запрещает хостить на гитхабе свой форк ядра и слать из него патчи в апстрим. Думаю многие так и делают. Никто не запрещает делать то же самое на любом другом публичном гит-хостинге, либо где-то на своём сервере.
Каждый выбирает то что лично ему удобнее (включая Линуса, выпускающего официальные релизы со своей ветки). Очевидно, свой сервер всегда будет более гибким, чем чей-то (например гитхабовский), поэтому всегда будут те, кто эту гибкость желает использовать.
А те, кто ВСЮ работу с кодом ведут только через один хостинг — по сути не используют распределённость, ради которой гит создавался, и с тем же успехом могли бы пользоваться свн (наверно даже удобнее, если распределённость не нужна), но выбрали гит по причине модности.

Попробуйте в svn использовать какой-то git-flow и вы почувствуете боль. Реальная полезность git'а, за которую его любят разработчики, в духе "одна фича — одна ветка" и прочие штуки не зависят от того, где именно его хостить.

Ну очевидно что конкретный инструмент "git-flow" был сделан для git. Но не вижу проблем реализовать ту же логику и в svn, если всё в одном репозитории на одном сервере. Есть ли для этого готовые инструменты или нет — не в курсе.

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


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

"Полная копия" любого дерева в свн делается за мгновение, детали не изучал но очевидно данные при этом не копируются а просто делается пометка что копия = оригиналу в этой ревизии.


git push = svn commit (перенос локальных правок на сервер)
git commit = svn просто локальные правки, да их нельзя сортировать и подтверждать инкрементально перед отправкой на сервер, как в гите, забыл про это отличие, но по-моему оно и не особо нужно и может даже мешать лишними действиями при централизованном репозитории (хотя кому как)

Но вот переключение, бранчей, например, делается дольше: https://habrahabr.ru/post/320704/


Ну и да, возможность коммитить локально — очень полезная штука, которая позволяет забить, скажем, на временную недоступность централизованной штуки (например, gitlab.com в последнее время иногда падает).

В svn merge всегда будет болью, а если мержиться практически невозможно — никакой инструмент не поможет.

Я не понимаю, а кто мешает сделать паралельный форк ядра на гитхабе? GPL жИ! Бери исходники и делай, не забывая форк вести под GPL. Там уже можешь плясать как тебе вздумается, хоть в стиле кантри, хоть гопак! А Линус может факами своими истыкать хоть весь ютуб, выкладывая в день по видео с факом в твою сторону! Тебя и твой форк уже будет не остановить!

Потому что этот новый форк будет никому не нужен?)

Собственно как и ванильное ядро от Линуса без допиливания, если не ошибаюсь никому не нужно кроме Патрика (который Бох, хотя может и тоже допиливают, но вроде как в Слаке ванильное ядро). Популярные дистрибутивы допиливают ядро под свои особенности на своих серверах. Но собственно никто не запрещает это делать в том числе и на гитхабе. Но как по мне свой сервер для этой задачи гораздо удобней и приятней в работе. Опять же Git распределенная система контроля версий. Можно вообще организовать бессерверную работу отправляя «диктатору» патчи по электронной почте.
UFO just landed and posted this here

А зачем вообще разработчикам ядра фичи гитхаба? Git сделан децентрализованным и распределенным прежде всего потому, что сама модель разработки децентрализована. E-mail — тоже в достаточной мере децентрализованная штука. А гитхаб (в смысле, не репозиторий на нем, а issues и pull requests) станет single point of failure.

Я думаю не все в курсе, а статья не упоминает, что сам Git был разработан Линусом, как раз таки специально для того чтобы хостить код ядра. Github же предоставляет достаточно урезанную по функциональности версию Git.

Это вы о чем вообще? Если про гитхабовский git-клиент — он делался для домохозяек, никто не мешает использовать обычный консольный git.

Это я о том что Git изначально заточен под работу именно в стиле kernel. Те кто пользуется Github используют в лучшем случае 20% от всей функциональности Git'а, а остальные функции для этих пользователей выглядят сложными и часто ненужными (достаточно погуглить на англ про git-rebase, например, очень много кто не понимает разницу, или тот же cherry-pick, хотя обе функции активно используются в kernel и других масштабных проектах).
А что есть такие которые используют github без консольного управления? Оне наверно гении у них внутре неонка.
UFO just landed and posted this here
Это ведет к деградации. Да и все эти гуевые инструменты никогда не заменят консольные команды.
UFO just landed and posted this here
просто зайдите на тостер в раздел git и оцените размеры вселенских батхертов поклонников гуя, когда что-то идет не так.
UFO just landed and posted this here
Это проблемы Git

Да нет, это проблемы ленивых людей не любящих читать мануалы и профильные книги и отчего-то уверенных, что кто-то за них обязан придумать кнопку на каждую функцию. Гит это хороший, увесистый молоток. К нему можно даже приложить комикс из трех картинок по использованию(гуй). Только вот, если руки из задницы и сам ты ленивый забивать им гвозди лучше не получится.
UFO just landed and posted this here
Не буду спорить. Когда обкакаетесь на нестандартной задаче, тогда и поговорим.
UFO just landed and posted this here

Сервер без GUI, доступ к нему по ssh. Как, не прибегая к консоли, склонировать на сервер репозиторий и управлять им?

X'ы поверх ssh?
P.S. сам GUI к VCS никогда не пользовался.
UFO just landed and posted this here

В JetBrains-овских IDE в целом сделано неплохо, но некоторые вещи удобнее делать с консоли. Я совмещаю.


Ну и add -p там вообще нет, тикет уже 7 лет висит. Хотя вроде начались подвижки.

Это не пользователи github, а большинство пользователей git. Для мелких проектов с полутора разработчиками большего и не требуется. А если начнут работать в нормальной команде — научатся, никуда не денутся (достаточно будет один раз получить по шапке).

Дай бог в GitLab запилят, они иногда быстрее фичи выпускают

Sign up to leave a comment.

Articles