From 01b506180ad27c841d2fefed28cc3cffde06f3a7 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sat, 12 Aug 2023 14:45:12 +0300 Subject: [PATCH] =?utf8?q?Go=20=D0=B8=20SHA256=20Git=20=D1=80=D0=B5=D0=BF?= =?utf8?q?=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Мне казалось, что вроде бы Go без проблем работал с Git репозиториями в которых используется SHA256 (73555bc7b599082947d066015b3010be9a3e9c5f, 7a48b1fda8f0429e5d0e1c61d961891b83d97ffb). Сделал тут один модуль, тоже в подобном репозитории, но Go не в состоянии его был склонировать. Проблема в том, что Go делает "git init", а затем внутри этой директории "git fetch". Если просто выполнять "git clone", то проблем нет. А git-init уже фиксирует формат репозитория и поэтому с сервером клиент уже не может договориться. Смотрел как бы сделать отдачу модулей не через ссылку на Git репозиторий, а через отдачу модуля в виде tarball-а. github.com/goproxy/goproxy может помочь в создании GOPROXY сервера, который на файловой системе и нужные @v-like файлы наплодит, которые уже раздавать как готовые модули. Но геморройно как-то это всё пока. На данный момент решаю проблему так: при попытке go get он падает и выдаёт путь на экране до директории с репозиторием в который не удалось ничего склонировать. Перехожу туда, руками делаю: git config core.repositoryformatversion 1 git config extensions.objectformat sha256 и снова вызываю go get, который уже сможет выполнить fetch, а дальше уже будет использоваться закэшированная версия модуля. Менять тут формат репозитория можно безопасно, так как абсолютно ни одного объекта ещё не было скачано и ломаться нечему. Что-то предлагать или отправлять патчи разработчикам Go бесполезно. В рассылке патчи они игнорируют. А официально их можно отправить только через платформы которые недопускают россиян (типа GitHub). -- 2.50.0