Используйте go get, чтобы потребовать зависимости от частного репозитория github на WSL 2

Я пробую WSL 2 на Windows 10, и пока все идет хорошо, но я уже 2 недели изо всех сил пытался сделать эту работу, потому что по какой-то причине go get не использует или не может сделать диспетчер учетных данных Git чтобы запросить мои учетные данные.

Я подписался на этот блог, чтобы настроить WSL2 с помощью GCM https://www.edwardthomson.com/blog/git_credential_manager_with_windows_subsystem_for_linux.html

И он отлично работает для большинства повседневных задач, таких как клонирование, чтение и запись. Но при использовании go get я получаю эту ошибку.

go get <remote github repo>@<latest commit id>
go: <remote github repo> 681dceefc81203e094872401c184d038090d6049 => v0.0.17-0.20200501212733-681dceefc812
go get: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812/go.mod: verifying module: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812/go.mod: reading https://sum.golang.org/lookup/<remote github repo>@v0.0.17-0.20200501212733-681dceefc812: 410 Gone
        server response:
        not found: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /tmp/gopath/pkg/mod/cache/vcs/232ff028cb2fdebd254e30bfc612843483f0fe3fbeb18d5fc8fb4b20f21c9021: exit status 128:
                fatal: could not read Username for 'https://github.com': terminal prompts disabled

Уже пробовали ssh-ключи и предлагаемые здесь решения получить результаты с ошибкой" подсказки терминала отключены "для частного репозитория github

Но ошибка остается той же, при включении env GIT_TERMINAL_PROMPT=1 ничего не происходит, я думаю, это потому, что WSL 2 не имеет разрешений на это. В любом случае я также пробовал этот инструмент https://github.com/microsoft/Git-Credential-Manager-for-Mac-and-Linux и, задав переменную для простого хранилища учетных данных, запрашивает учетные данные в терминале. Но я использую двухфакторную аутентификацию, потому что это требует организация, и в приглашении запрашивается только имя пользователя и пароль, поэтому аутентификация не выполняется.

Поэтому мне нужно связаться с товарищем, который использует Mac. Он может go get зависимость повлиять на go.mod, сделать фиксацию и подтолкнуть изменение, чтобы я мог вытащить его и продолжить оттуда. Но, конечно, это не идеально, и у него нет никаких проблем, он использует osxkeychain для управления своими учетными данными git.

Кто-нибудь сталкивался с этой проблемой? или знаете как это решить? Огромное спасибо заранее.


person Migdress    schedule 05.05.2020    source источник
comment
›Но я использую двухфакторную аутентификацию, потому что она требуется организацией, и в приглашении запрашивается только имя пользователя и пароль, поэтому аутентификация не выполняется: вы должны иметь возможность ввести свое имя пользователя и PAT (токен личного доступа) в качестве пароля. (help.github.com/en/github/authenticating-to-github/)   -  person VonC    schedule 05.05.2020
comment
Большое спасибо! когда я это сделал, я смог успешно пройти аутентификацию, но затем ответ сервера показал ту же ошибку. Я начинаю думать, что это связано не с аутентификацией пользователя, а с проблемой разрешения.   -  person Migdress    schedule 08.05.2020


Ответы (1)


Go не может понять, что некоторые модули являются частными, и их контрольная сумма не должна проверяться по библиотеке контрольных сумм go. Следующая ошибка возникает из-за этого

verifying module: <remote github repo>@v0.0.17-0.20200501212733-681dceefc812/go.mod: reading https://sum.golang.org/lookup/<remote github repo>@v0.0.17-0.20200501212733-681dceefc812: 410 Gone

Если возможно, используйте по крайней мере 1.13 или выше. Go представил переменные env с именами GOPRIVATE, GONOPROXY и GONOSUMDB для лучшего управления частными модулями. Самый простой способ сообщить Go о том, что вы импортируете частное репо, - использовать GOPRIVATE. Установите для шаблона частных репозиториев GOPRIVATE переменную env, чтобы подавить проверку контрольной суммы и использование GOPROXY. В приведенном ниже примере не используются контрольные суммы для всех репозиториев в этой иерархии:

GOPRIVATE=github.com/<your org>/*

Ознакомьтесь с ответами здесь и здесь. Вы также можете обратиться за помощью go help module-private.

person praveent    schedule 06.05.2020
comment
Я использую Go 1.14, а зависимость использует Go 1.12. Но, используя GOPRIVATE=<my private repo> go get ..., я смог заставить его работать! большое спасибо. Я отмечаю этот ответ как правильный. - person Migdress; 08.05.2020