[О блоге] [наверх] [пред] [2023-08-12 14:45:12+03:00] [01b506180ad27c841d2fefed28cc3cffde06f3a7]
Темы: [git][go][hate]

Go и SHA256 Git репозитории

Мне казалось, что вроде бы 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).

    [оставить комментарий]