web-dev-qa-db-ja.com

プライベートリポジトリを「取得」する適切な方法は何ですか?

多くのグーグルが試した後、私はプライベートリポジトリで$ go get作業を取得する方法を探しています。

最初の試行:

$ 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

はい、ログイン情報を提供する方法がわからなかったため、メタタグは表示されませんでした。

2回目の試行:

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があまり良くないときはいつでも実行できます。

89
secmask

設定することが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
48
JulienD

適切な方法は、リポジトリを手動で適切な場所に配置することです。リポジトリが存在すると、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
44
fuz

弊社のgitlabでプライベートリポジトリを使用してgo getで問題が発生しました。私は解決策を見つけようとして数分を失いました。そして、私はこれを見つけました:

  1. プライベートトークンを取得する必要があります:
    https://gitlab.mycompany.com/profile/account

  2. プライベートトークンでヘッダーを追加するようにgitを構成します。

    $ git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN
    
  3. リクエストをsshからhttpに変換するようにgitを設定します:

    $ git config --global url."[email protected]:".insteadOf "https://gitlab.mycompany.com/"
    
  4. 最後にgo getを通常通り使用できます:

    $ go get gitlab.com/company/private_repo
    
28

GitLab issue 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ドキュメントでメタタグを検出できません 」。

9
VonC

SSHを使用して既にgitを取得している場合、- この答えAmmar Bandukwala による簡単な回避策です。


$ go getgitを内部的に使用します。次の1つのライナーにより、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
Robert K. Bell

ユーザー固有のssh-configを作成したため、ユーザーは正しい資格情報とキーで自動的にログインします。

最初にキーペアを生成する必要がありました

ssh-keygen -t rsa -b 4096 -C "[email protected]"

~/.ssh/id_my_domainなどに保存しました。これは、Githubアカウントに接続したキーペア(プライベートとパブリック)でもあるため、私のものはin~/.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

UserHost、およびHostNameが正しく設定されていることを確認してください。

これで、goパスを参照し、go get <package>、たとえばgo get mainを参照できます。ファイルmain/main.goには、パッケージ(上記の最後の例)domain.com:username/private-repo.gitが含まれます。

3
Joachim

Github oauth token here を生成し、githubトークンを環境変数としてエクスポートします。

export GITHUB_TOKEN=123

基本認証URLを使用するようにgit configを設定します。

git config --global url."https://$GITHUB_TOKEN:[email protected]/".insteadOf "https://github.com/"

これで、プライベートリポジトリをgo getできます。

3
Miguel Mota