The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Представлена вторая версия протокола Git

18.05.2018 21:50

Разработчики из компании Google представили вторую версию коммуникационного протокола Git, который используется для обмена данными при удалённом подключении клиента к Git-серверу. При подготовке второй версии основное внимание было уделено повышению эффективности обмена данными, оптимизации для работы поверх HTTP и решению проблемы с расширяемостью. Реализация нового протокола уже принята в основной состав Git и ожидается в версии Git 2.18.

Среди ключевых новшеств отмечается обеспечение возможности фильтрации ссылок (веток и тегов) на стороне сервера, что позволяет отсеивать ссылки на удалённой стороне без необходимости загрузки списка всех ссылок. В первой версии протокола полный список ссылок в репозитории всегда отправлялся клиенту при выполнении любой команды извлечения, даже когда клиент обновлял только одну ветку ("git fetch origin master").

Для репозиториев, содержащих сотни тысяч ссылок (например, в репозитории Chromium насчитывается более 500 тысяч веток и тегов), сервер вынужден был передавать десятки мегабайт лишних данных, которые просто игнорировались на стороне клиента. Все эти заведомо ненужные данные приводили к напрасной трате времени и пропускной способности, особенно когда клиент обновлял в большом репозитории ветку с несколькими коммитами или просто проверял актуальность своей копии репозитория. Внедрение второй версии протокола в Google позволило до трёх раз ускорить выполнения холостых запросов (при отсутствии изменений) в репозитории Chromium и до восьми раз сократить объём трафика, отправляемого с серверов googlesource.com.

Вторым важным улучшением стало предоставление средств для расширения протокола, дающих возможность добавлять в протокол новые возможности по мере расширения функциональности инструментария. Например, расширения позволили добавить поддержку извлечения и отправки (fetch/push) символических ссылок (symref). Новая версия протокола также переработана для упрощения обработки соединений на клиентской стороне при применении в качестве транспорта HTTP (удалённый обработчик теперь функционирует как прокси).

При реализации второй версии протокола пришлось искать обходные пути для решения проблемы с отсутствием механизма согласования версии протокола между клиентом и сервером. Для транспорта "https://" выход был найден в форме добавления при запросе нового HTTP-заголовка "Git-Protocol: version=2", указывающего на поддержку второй версии протокола. Для транспорта "ssh://" передача версии протокола реализована через установку переменной окружения "GIT_PROTOCOL=version=2" на удалённой стороне после соединения (требует разрешения установки своих переменных окружения в конфигурации SSH).

Для транспорта "git://" с добавлением параметра с номером версии пришлось повозиться, так как число параметров было ограничено после исправления в 2009 году ошибки, приводящей к зацикливанию. Проблема была решена "хаком", позволившим обойти ограничения через использование двух нулевых символов подряд, т.е. параметры передаются в виде "003egit-upload-pack /project.git\0host=myserver.com\0\0version=2\0".

  1. Главная ссылка к новости (https://opensource.googleblog....)
  2. OpenNews: Выпуск распределенной системы управления исходными текстами Git 2.17
  3. OpenNews: GitHub выпустил Git LFS 2.4.0
  4. OpenNews: Уязвимость в Git, Subversion и Mercurial, допускающая подстановку команд через URL ssh://
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/48622-git
Ключевые слова: git
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (52) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (-), 21:56, 18/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > При реализации второй версии протокола пришлось искать обходные пути для решения проблемы с отсутствием механизма согласования версии протокола между клиентом и сервером

    Говорили же им.

    > When you design protocols or file formats, make them sufficiently self-describing to be extensible. Always, always either include a version number

    http://www.faqs.org/docs/artu/ch01s06.html

     
  • 1.3, Аноним (-), 21:57, 18/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Можно было ведь добавить git2:// и не делать хак.
     
     
  • 2.4, Аноним (-), 22:07, 18/05/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Расскажи об этом w3c. А то они бедные никак не догадаются добавить версию после протокола http.
     
     
  • 3.31, пох (?), 10:34, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > Расскажи об этом w3c. А то они бедные никак не догадаются добавить версию после протокола http.

    а им как раз и не надо - они-то (были) умные, и с 95го года добавили версию непосредственно в протокол.
    А еще до 94го старательно определили что должен делать протокол с незнакомыми заголовками, поэтому добавление версии еще и обратную совместимость им не сломало.

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

     
     
  • 4.48, Анонимный психотерапевт (?), 22:33, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> гитовские гугло-обезьянки умом не обладают

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

     
  • 4.61, Попугай Кеша (?), 14:47, 26/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Чувак, я на твоей стороне ;)
     
  • 2.25, Нанобот (ok), 08:50, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это замена одного хака на другой. И, вместо того, чтобы разруливать ситуацию автоматически, ты предлагаешь перенести ответственность на людей (считаю такой перенос ответственности признаком криворукости разработчика)
     
     
  • 3.30, Аноним (-), 10:03, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    так если механизм не заложен - так и есть
     
  • 3.47, нурок (?), 20:59, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    так всё и будет автоматически, обновляешь свой гит на компе и всё он уже шлёт запросы к серваку по второму протоколу с фолбэком на первый. а с SSH конфигом к счастью автоматически ничего не происходит, только руками.
     

  • 1.5, анонимус (??), 22:09, 18/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > например, в репозитории Chromium насчитывается более 500 тысяч веток и тегов

    На гитхабе в репе chromium написано 6 branches, где там 500 000 веток? Это безумное количество, никто бы не допустил такого числа веток. Или там 494 000 тегов и 6 веток? :)

     
     
  • 2.6, apollo2k4 (ok), 22:15, 18/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Chromium как бы не на GitHub хостится, там только зеркало…
     
     
  • 3.12, Андрей (??), 23:17, 18/05/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    кривое зеркало, значит.
     
     
  • 4.62, Попугай Кеша (?), 14:47, 26/07/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Черное зеркало...
     
  • 2.24, Andrey Mitrofanov (?), 07:28, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> например, в репозитории Chromium насчитывается более 500 тысяч веток и тегов
    > На гитхабе в репе chromium написано 6 branches, где там 500 000
    > веток? Это безумное количество, никто бы не допустил такого числа веток.
    > Или там 494 000 тегов и 6 веток? :)

    На https://chromium.googlesource.com/chromium/src/+refs "всего" 14тыс. тэгов.

    Может, укушенные CVS-ом и https://chromium.googlesource.com/All-Projects/ фрибсдешниками и их реп-всё-в-куче?

     
  • 2.43, Аноним (-), 17:09, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Разве у слитых веток ссылки не остаются? А уж делить-объединять ветки в git'е это сам Линус завещал.
     

  • 1.7, Аноним (-), 22:22, 18/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >Для репозиториев, содержащих сотни тысяч ссылок (например, в репозитории Chromium насчитывается более 500 тысяч веток и тегов),

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

     
     
  • 2.16, anonymous (??), 04:58, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    потрясающе, вы вот гит не разрабатываете, а делаете такие громкие заявляния
     
     
  • 3.35, Аноним (-), 13:18, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Поздравляю вы никогда не видели ребу хромиума на мнение о божественном гите имеете
     
  • 2.40, Аноним (-), 15:04, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Действительно в каком вменяемом случае может понадобиться иметь репозиторий с т... большой текст свёрнут, показать
     
     
  • 3.49, Аноним (-), 00:59, 20/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В свн столько веток тоже не держа. Но там дело не столько в ветках сколько в тегах. С свн они его как раз не перепутали, они просто эмулируют логику свн поверх гита.
     
     
  • 4.50, Andrey Mitrofanov (?), 08:34, 20/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > не перепутали, они просто эмулируют логику

    файлопомойки поверх

    >свн поверх гита.

    Они просто не любят Микрософт, не хотят покупать ms-сервер, не хотят использовать msgvfs, но ... хотят, чтоб былО, как в микрософте.

     

  • 1.10, Crazy Alex (ok), 23:02, 18/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Эх, ещё б они какую-нибудь механику докачки прикрутили...
     
     
  • 2.14, Андрей (??), 23:19, 18/05/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Подождите, а что не прикрутили?! А я именно об этом гигантском улучшении подумал в первую очередь.
     
  • 2.15, Аноним (-), 00:37, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • –5 +/
    На диалапе сидишь?
     
  • 2.19, Аноним (-), 06:34, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты мазохист что ли, работать с большими репами на диалапе?

    Но даже если у тебя ничего другого нет, то есть опции, радикально ограничивающие количество качаемого: --depth и --single-branch

    Завязывай с своим неосиляторским нытьём.

     
     
  • 3.39, Crazy Alex (ok), 15:01, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Как разок понадобится таки вытащить большую репу, сидя с отпуске с не сильно хорошей мобильной связью - по-другому запоёте.

    И алючиаи эти не помогут (а ветки ещё выгрести для начала надо).

     
     
  • 4.41, Аноним (-), 16:25, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зачем Вы так жестоко ломаете картину мира диванному админу?
     
  • 4.44, Андрей (??), 18:21, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Кстати, хороший пример: inkscape. Кроме недостатка самого протокола, у них в репе ещё куча мусора. Склонировал 1,5 ГБ!!! Запустил git gc --aggressive - и оказалось, что на самом деле в репе всего-то 440 МБ.
     

  • 1.11, Аноним (-), 23:10, 18/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    Ведро линукс по прежнему нельзя скачать на плохом канале? Хорошо зделоли.
     
     
  • 2.17, Anonimous (?), 05:00, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А чего,
    $ git clone --depth 1 --branch linux-4.16.y  \
    git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

    не работает?

     
     
  • 3.20, Аноним (-), 06:35, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Да ему лишь бы сирануть, а решение проблемы до лампочки.
     
  • 3.26, Нанобот (ok), 08:52, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > А чего,
    > $ git clone --depth 1 --branch linux-4.16.y  \
    > git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
    > не работает?

    Может человеку нужны все ветки, одна уже не вставляет

     
  • 3.34, Андрей (??), 12:35, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > git clone --depth 1

    Недавно была новость: 6 млн. git объектов! Тут, казалось, бы всего 1 последний коммит загружается. А придётся загрузить достаточно много: всего в 10 раз меньше чем полный клон со всеми миллионами объектов!

    > --branch linux-4.16.y

    Причём тут это? Никакого влияния на размер загружаемого не влияет. Просто сокращение: чекаутнуть вот эту ветку после клонирования.

     
  • 3.37, name (??), 14:16, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Почему же, отлично работает. Только это 180 мегабайт. И на дерьмовом канале это может затянуться очень надолго. Может поведаете, что должно помешать разрабатывать ведро линукс на том же диалапе, кроме дерьмового протокола гита?
     
     
  • 4.55, KonstantinB (ok), 16:00, 20/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Может поведаете, что должно помешать разрабатывать ведро линукс на том же диалапе

    Анониму с опеннета помешает то, что он и не собирался ничего разрабатывать.

    Тот же, кто способен это делать, в состоянии нагуглить про git-bundle за 30 секунд даже с диалапа.

     
  • 2.45, Старый одмин (?), 20:01, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Используй дары смерти от Майкрософт
    https://github.com/Microsoft/GVFS
     
     
  • 3.51, Andrey Mitrofanov (?), 08:36, 20/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Используй дары смерти от Майкрософт
    >\/Microsoft/GVFS

    Микрософт?... Микрософт и докачка? И работающаяя докачка??  Не шути так, мне больно!111 </<<<

     
  • 2.52, Сергей (??), 11:00, 20/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    https://www.kernel.org/cloning-linux-from-a-bundle.html
     
     
  • 3.58, Андрей (??), 04:32, 21/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А inkscape? gcc? gimp? llvm? ...
     

  • 1.13, Андрей (??), 23:17, 18/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Наконец-то!!!
     
  • 1.18, Дуплик (ok), 06:12, 19/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Когда новые хеши будут? SHA1 уже на помойке истории. Небезопасная туфта.
     
     
  • 2.21, Аноним (-), 06:36, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    - Хочу домой.
    - Ну так пошли.
    - Хочу домой быстро!
    - Ну тогда побежали...

    (с) известный анекдот про мужика, нашедшего в пустыне лампу с джинном

     
  • 2.28, аноним 12 (?), 09:26, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    И от какой же опасности ты собираешься тут защищаться новыми хешами?
     
  • 2.29, KonstantinB (ok), 09:49, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Давай ты сначала продемонстрируешь подмену коммита на другой, и не тупо с рандомным мусором, а с компилирующимся вредоносным кодом, так чтобы sha1 был тот же. А потом поговорим о безопасности.
     
     
  • 3.32, anomymous (?), 10:55, 19/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Давай ты сначала продемонстрируешь... MD2...
    Давай ты сначала продемонстрируешь... MD4...
    Давай ты сначала продемонстрируешь... MD5...
    <==== вы находитесь здесь
    Давай ты сначала продемонстрируешь... SHA1...
    Давай ты сначала продемонстрируешь... SHA256...
    Давай ты сначала продемонстрируешь... SHA384...
    Давай ты сначала продемонстрируешь... SHA512...
    ...
     
     
  • 4.57, Аноним (-), 00:08, 21/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Даже для md5 такое нелегко продемонстрировать, если ты не Гугл. Сложность md5 preimage attack - 2^122.
     
  • 4.59, Аноним (-), 07:08, 21/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Давай ты сначала продемонстрируешь... MD2...
    > Давай ты сначала продемонстрируешь... MD4...
    > Давай ты сначала продемонстрируешь... MD5...

    Так где эксплойты то? Так и не было? Впрочем, ничего нового.

     

  • 1.42, Аноним (-), 16:31, 19/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > обеспечение возможности фильтрации ссылок (веток и тегов) на стороне сервера

    Наступило щястье!

     
  • 1.53, Николай Величко (?), 13:56, 20/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Разработчики из компании Google представили

    Какого xpeна? Кто они такие чтобы представлять? Git - это разработка Линуса Торвальдса, а не Google. Что это еще за фокусы? Какие новые протоколы? Они там упоролись? Или это их внутренний форк для своих нужд? Если они это не толкают в массы, то пусть месят свой форк и не лезут к остальным. Линус сам знает как лучше развивать Git.

     
     
  • 2.54, Andrey Mitrofanov (?), 14:23, 20/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> Разработчики из компании Google представили
    > Какого xpeна? Кто они такие чтобы представлять? Git - это разработка Линуса
    > Торвальдса, а не Google. Что это еще за фокусы? Какие новые

    ЛТ уже довольно давно не у руля https://lwn.net/Articles/145123/ .

    > свой форк и не лезут к остальным. Линус сам знает как
    > лучше развивать Git.

    Виновые кеши приняли, и гуглёвые протоколы схавают.

     
  • 2.56, Crazy Alex (ok), 20:02, 20/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это открытый софт. Кому что надо - тот и разрабатывает.
     

  • 1.60, Влад (??), 03:08, 24/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > требует разрешения установки своих переменных окружения в конфигурации SSH

    вангую, что скоро вскроется уязвимость

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру