Я ищу способ получить $ go get
работу с частным репозиторием после многих попыток Google.
Первая попытка:
$ go get -v gitlab.com/secmask/awserver-go
Fetching https://gitlab.com/secmask/awserver-go?go-get=1
https fetch failed.
Fetching http://gitlab.com/secmask/awserver-go?go-get=1
Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200)
import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags
package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go
Да, он не видел метатеги, потому что я не знал, как предоставить информацию для входа.
Вторая попытка:
Следуйте https://gist.github.com/shurcooL/6927554 . Добавьте конфиг в .gitconfig.
[url "ssh://git@gitlab.com/"]
insteadOf = https://gitlab.com/
$ go get -v gitlab.com/secmask/awserver-go --> not work
$ go get -v gitlab.com/secmask/awserver-go.git --> work but I got src/gitlab.com/secmask/awserer-go.git
Да, это работает, но с .git
расширением с именем моего проекта я могу переименовать его в оригинальное, но делать это каждый раз $ go get
не так хорошо, есть ли другой способ?
cat
команда предназначена только для проверки.go env -w GOPRIVATE=github.com/<OrgNameHere>/*
как описано здесь stackoverflow.com/questions/58305567/…Правильный способ - вручную поместить репозиторий в нужное место. Как только репозиторий появится, вы можете использовать его
go get -u
для обновления пакета иgo install
его установки. Пакет с именемgithub.com/secmask/awserver-go
переходит в
$GOPATH/src/github.com/secmask/awserver-go
Вы вводите следующие команды:
cd $GOPATH/src/github.com/secmask git clone git@github.com:secmask/awserver-go.git
источник
go get
разработан как инструмент для общего случая. Команда Go прямо решила не добавлять возможности настройки, чтобы люди придерживались стандартов, вместо того, чтобы выкладывать свой собственный мусор. Он никогда не создавался для вашего случая (например, частных репозиториев).У меня возникла проблема с
go get
использованием частного репозитория на gitlab от нашей компании. Я потерял несколько минут, пытаясь найти решение. И я нашел вот это:Вам необходимо получить приватный токен по адресу:
https://gitlab.mycompany.com/profile/account.
Настройте git, чтобы добавить дополнительный заголовок с вашим личным токеном:
$ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
Настройте свой git для преобразования запросов из http в ssh :
$ git config --global url."git@gitlab.mycompany.com:".insteadOf "https://gitlab.mycompany.com/"
Наконец, вы можете использовать свой
go get
обычный:$ go get gitlab.com/company/private_repo
источник
http.extraheader
. +1--global
также отправить личный маркер другого серверу мерзавца в случае , если вы используете много репо? любой безопасный риск?git config --global url."https://${user}:${personal_access_token}@mygitlab.com".insteadOf "https://mygitlab.com"
Все вышеперечисленное у меня не сработало. Клонирование репо работало правильно, но я все еще получал
unrecognized import
ошибку.Поскольку это означает Go v1.13, я обнаружил в документе, что мы должны использовать переменную GOPRIVATE env следующим образом:
$ GOPRIVATE=github.com/ORGANISATION_OR_USER_NAME go get -u github.com/ORGANISATION_OR_USER_NAME/REPO_NAME
источник
Это похоже на проблема 5769 GitLab .
Предполагается, что это будет решено в разделе « Добавлена поддержка извлечения репозитория Go. # 5958 », при условии, что установлены правильные метатеги .
Хотя для самого Go все еще существует проблема: «
cmd/go
: go get не может обнаружить метатег в документах HTML5 ».источник
go get
можно видеть метатеги без входа в систему)go get
команда будет выглядетьgo get gitlab.com/secmask/awserver-go.git.git
(запросит базовую аутентификацию http), что тоже выглядит не очень хорошо.Разработай GitHub OAuth маркер здесь и экспортировать ваш GitHub фишку как переменная окружения:
export GITHUB_TOKEN=123
Настройте git config на использование базового URL-адреса авторизации:
git config --global url."https://$GITHUB_TOKEN:x-oauth-basic@github.com/".insteadOf "https://github.com/"
Теперь вы можете сделать
go get
частное репо.источник
Если у вас уже есть мерзавец с помощью SSH, этот ответ на Аммар Bandukwala простой обходной путь:
$ go get
используетgit
внутренне. Следующие лайнеры сделаютgit
и, следовательно,$ go get
клонировать ваш пакет через SSH.Github:
$ git config --global url."git@github.com:".insteadOf "https://github.com/"
BitBucket:
$ git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"
источник
Я создал ssh-config для конкретного пользователя, поэтому мой пользователь автоматически входит в систему с правильными учетными данными и ключом.
Сначала мне нужно было сгенерировать пару ключей
ssh-keygen -t rsa -b 4096 -C "my@email.here"
и сохранил его, например
~/.ssh/id_my_domain
. Обратите внимание, что это также пара ключей (закрытая и общедоступная), которую я подключил к своей учетной записи Github, поэтому мой хранится в~/.ssh/id_github_com
.Затем я создал (или изменил) файл
~/.ssh/config
с записью:На другом сервере "ssh-url" имеет вид,
admin@domain.com:username/private-repo.git
и запись для этого сервера будет:Просто чтобы прояснить , что вам нужно убедиться , что
User
,Host
иHostName
установлены правильно.Теперь я могу просто перейти по пути перехода, а затем
go get <package>
, например,go get main
туда , где файлmain/main.go
включает пакет (из последнего примера выше)domain.com:username/private-repo.git
.источник
go get hostname.com/username/repo.git
(расширение .git имеет решающее значение)..git
и почему это происходит?.git
расширения это то, что в моей локальной конфигурации gitgit config --global url."git@gitlab.myserver.com:".insteadOf "https://gitlab.myserver.com/"
, но субдоменgitlab.myserver.com
не имеет сертификата ssl, поэтому я используюhttp
вместо этогоhttps
сейчасЯ наткнулся
.netrc
и нашел это относящимся к этому.Создайте файл
~/.netrc
со следующим содержанием:Выполнено!
Кроме того, для последних версий GO вам может потребоваться добавить это в переменные среды
GOPRIVATE=github.com
(я добавил это в свои.zshrc
)netrc
также улучшает настройку моей среды разработки, так как мой личный доступ к github для HTTPS теперь настроен для использования на всей машине (как и моя конфигурация SSH).Создайте токены личного доступа GitHub: https://github.com/settings/tokens
Смотрите этот ответ для его использования с Git в Windows, в частности
Ссылка: справочная страница netrc
Если вы хотите придерживаться аутентификации SSH, то замаскируйте запрос на принудительное использование ssh.
git config --global url."git@github.com:".insteadOf "https://github.com/"
Дополнительные методы настройки доступа к git: https://gist.github.com/technoweenie/1072829#gistcomment-2979908
источник
~/.aws
. А с токеном личного доступа GitHub я могу детализировать доступ в соответствии с требованиями и ротацией элементов управления. Также есть способ SSH 👆Для меня решения, предлагаемые другими, по-прежнему давали следующую ошибку во время
go get
Что требовалось для этого решения
Как заявили другие:
git config --global url."git@github.com:".insteadOf "https://github.com/"
Удаление парольной фразы из моего
./ssh/id_rsa
ключа, который использовался для аутентификации соединения с репозиторием. Это можно сделать, введя пустой пароль в ответ на запрос:ssh-keygen -p
Почему это работает
Это не лучший обходной путь, так как всегда лучше иметь парольную фразу для вашего закрытого ключа, но это вызывало проблемы где-то внутри OpenSSH.
go get
использует внутренне git, который использует openssh для открытия соединения. OpenSSH берет сертификаты, необходимые для аутентификации, из.ssh/id_rsa
. При выполнении команд git из командной строки агент может позаботиться об открытии файла id_rsa для вас, чтобы вам не приходилось каждый раз указывать кодовую фразу, но при выполнении в животе go get это почему-то не сработало в моем кейс. OpenSSH хочет запросить у вас пароль, но, поскольку это невозможно из-за того, как он был вызван, он печатает в своем журнале отладки:И просто не получается. Если вы удалите кодовую фразу из ключевого файла, OpenSSH перейдет к вашему ключу без этого запроса, и он будет работать.
Это может быть вызвано тем, что Go одновременно загружает модули и одновременно открывает несколько SSH-соединений с Github (как описано в этой статье. ). В некоторой степени это подтверждается тем фактом, что журнал отладки OpenSSH показал, что первоначальное соединение с репозиторием было успешным, но позже по какой-то причине попытались снова, и на этот раз решили запросить парольную фразу.
Однако решение использовать мультиплексирование SSH-соединений, предложенное в упомянутой статье, у меня не сработало. Для записи автор предложил добавить следующую конфигурацию в файл конфигурации ssh для затронутого хоста:
ControlMaster auto ControlPersist 3600 ControlPath ~/.ssh/%r@%h:%p
Но как уже говорилось, для меня это не сработало, может я ошибся
источник
После настройки
GOPRIVATE
иgit config ...
Люди могут по-прежнему сталкиваться с подобными проблемами при получении частного источника:
https fetch: Get "https://private/user/repo?go-get=1": EOF
Они не могут использовать частное репо без
.git
расширения.Причиной этого является инструментом идти не имеет ни малейшего представления о протоколе VCS этого репо,
git
илиsvn
или любой другой, в отличие отgithub.com
илиgolang.org
их жестко закодированы в источник Гоу.Затем инструмент go выполнит
https
запрос перед получением вашего частного репо:https://private/user/repo?go-get=1
Если ваше частное репо не поддерживает
https
запросы, используйте,replace
чтобы сообщить об этом напрямую:require private/user/repo v1.0.0 ... replace private/user/repo => private.server/user/repo.git v1.0.0
https://golang.org/cmd/go/#hdr-Remote_import_paths
источник