Подтвердить что ты не робот

Каким образом можно "получить" частный репозиторий?

Я ищу способ получить $ 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 не так хорош, есть ли другой путь?

4b9b3361

Ответ 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 от нашей компании. Я потерял несколько минут, пытаясь найти решение. И я нашел это:

  1. Вам необходимо получить личный токен по адресу:
    https://gitlab.mycompany.com/profile/account

  2. Сконфигурируйте ваш git для добавления дополнительного заголовка с вашим личным токеном:

    $ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
    
  3. Сконфигурируйте ваш git для преобразования запросов из ssh в http:

    $ git config --global url."[email protected]:".insteadOf "https://gitlab.mycompany.com/"
    
  4. Наконец, вы можете использовать свой 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