Каким образом можно "получить" частный репозиторий?
Я ищу способ получить $ 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://[email protected]/"]
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
не так хорош, есть ли другой путь?
Ответы
Ответ 1
У вас есть одна вещь для настройки. Пример основан на GitHub, но это не должно изменить процесс:
$ git config --global [email protected]:.insteadOf https://github.com/
$ cat ~/.gitconfig
[url "[email protected]:"]
insteadOf = https://github.com/
$ go get github.com/private/repo
Ответ 2
Правильный способ - вручную разместить репозиторий в нужном месте. Как только репозиторий существует, вы можете использовать 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 [email protected]:secmask/awserver-go.git
Ответ 3
У меня была проблема с go get
, используя личное хранилище на gitlab от нашей компании. Я потерял несколько минут, пытаясь найти решение. И я нашел это:
-
Вам необходимо получить личный токен по адресу:
https://gitlab.mycompany.com/profile/account
-
Сконфигурируйте ваш git для добавления дополнительного заголовка с вашим личным токеном:
$ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
-
Сконфигурируйте ваш git для преобразования запросов из ssh в http:
$ git config --global url."[email protected]:".insteadOf "https://gitlab.mycompany.com/"
-
Наконец, вы можете использовать свой go get
нормально:
$ go get gitlab.com/company/private_repo
Ответ 4
Это похоже на выпуск GitLab 5769.
В GitLab, поскольку репозитории всегда заканчиваются на .git
, я должен указать .git
в конце имени репозитория, чтобы он работал, например:
import "example.org/myuser/mygorepo.git"
А также:
$ go get example.org/myuser/mygorepo.git
Похоже, GitHub решает эту проблему, добавляя ".git"
.
Предполагается, что это будет решено в разделе " Добавлена поддержка поиска в репозитории Go. # 5958 ", при условии наличия правильных метатегов.
Хотя для самого Go все еще есть проблема: " cmd/go
: go get не может обнаружить метатег в документах HTML5 ".
Ответ 5
Если у вас уже есть git с использованием SSH, ответ Аммара Бандуквала - это простой обходной путь:
$ go get
использует git
внутреннего использования. Следующие строки сделают git
и, следовательно, $ go get
клонирование вашего пакета через SSH.
Github:
$ git config --global url."[email protected]:".insteadOf "https://github.com/"
BitBucket:
$ git config --global url."[email protected]:".insteadOf "https://bitbucket.org/"
Ответ 6
Я создал пользовательский ssh-config, поэтому мой пользователь автоматически регистрируется с правильными учетными данными и ключом.
Сначала мне нужно было создать пару ключей
ssh-keygen -t rsa -b 4096 -C "[email protected]"
и сохранил его, например, ~/.ssh/id_my_domain
. Обратите внимание, что это также ключевая пара (закрытая и открытая), которую я подключил к моей учетной записи Github, поэтому моя хранится в ~/.ssh/id_github_com
.
Затем я создал (или изменил) файл с именем ~/.ssh/config
с записью:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_github_com
На другом сервере "ssh-url" [email protected]:username/private-repo.git
, и запись для этого сервера была бы:
Host domain.com
HostName domain.com
User admin
IdentityFile ~/.ssh/id_domain_com
Чтобы уточнить, что вам нужно убедиться, что параметры User
, Host
и HostName
установлены правильно.
Теперь я могу просто перейти в путь go, а затем go get <package>
, например go get main
, где файл main/main.go
содержит пакет (из предыдущего примера выше) domain.com:username/private-repo.git
.
Ответ 7
Сформировать GitHub OAuth маркер здесь и экспортировать маркер GitHub в качестве переменной среды:
export GITHUB_TOKEN=123
Установите git config для использования основного URL-адреса аутентификации:
git config --global url."https://$GITHUB_TOKEN:[email protected]/".insteadOf "https://github.com/"
Теперь вы можете go get
свой личный репо.
Ответ 8
Все вышеперечисленное не работает для меня. Клонирование репозитория работало правильно, но я все еще получал ошибку unrecognized import
.
В переводе на Go v1.13 я обнаружил в документе, что мы должны использовать переменную GOPRIVATE следующим образом:
GOPRIVATE=github.com/ORGANISATION_OR_USER_NAME go get -u github.com/ORGANISATION_OR_USER_NAME/REPO_NAME