2016-10-24 7 views
0

私はgolangプロジェクトを持っており、コードをgit serverのどこかに置いています。 私のすべてのコードは、$ GOPATH/mygitserver/folder /にあります。プロジェクト用のGolangワークスペース

gitserverがURLを変更するまですべてが商品ですので、すべてのインポートを新しいgitserver URLに置き換える必要があります。だから、私は将来それをもう一度持っていきたいと思っていて、それが動作する方法を変えたいと思っています。

パッケージを私のgitサーバーにプッシュするのではなく、今度はgit(外部ライブラリを除外する)にワークスペース全体をアップロードする予定です。そこで、srcフォルダ(src/mypackageなど)に直接パッケージを作ります。ですから、gitserverのURLを変更すると、すべてが動作します。

質問があります:それを行うことをお勧めしますか(ワークスペースをgitにアップロードしますか?)あるいは別の選択肢がありますか?

また、これまで存在しなかった別の問題もあります。ワークスペースをクローンした後は、プロジェクトで使用しているすべての図書館の "go get"を呼び出す必要があります。 (これは、私がmygitserver/packageを入手して呼び出すときに、Golangが自動的に依存関係をダウンロードするために発生しません)。すべての依存関係をダウンロードして1つのコマンドにする方法はありますか?

答えて

3

サーバが頻繁に移動すると思われる場合は、vanity import pathを使用することをお勧めします。

バニティインポートパスを使用すると、所有するドメインのインポートパスにコードを保存して、コードが格納されている場所にリダイレクトすることができます。たとえば、Bitbucketでコードをホストしていて、将来移動する可能性があり、ドメインexample.netを所有している場合は、import "example.net/myproject"でインポートするようにコードをホストし、go getツールでコードをフェッチすることができますBitbucketから。これを行うには、あなたはそれがフォームのカスタムメタタグが含まれていたいドメイン上のドキュメントを提供する必要があります。

提供のBitbucketのURLのクローンを作成する go getをリダイレクトします example.net/myprojectで次のようにHTMLファイルを提供する例えばので
<meta name="go-import" content="import-prefix vcs repo-root"> 

(それはあなた自身を含め、他のGitサービスにコースのポイントのもあります):

<meta name="go-import" content="example.net/myproject git https://bitbucket.org/myname/myproject.git"> 

は、これらのリダイレクトを提供するためにnginxのを設定するには、以下のような設定を使用することができます(myPackageを交換し、プロジェクト名を持つURLもちろん、URL):

location ~ /myPackage/[a-z][a-z0-9]* { 
    if ($args = "go-get=1") { 
     add_header Content-Type text/html; 
     return 200 '<meta name="go-import" content="$host/myPackage git https://bitbucket.org/myName/myPackage.git">'; 
    } 
    rewrite^https://mygithosting.example.org/myName/myPackage? permanent; 
} 
location ~ /myPackage$ { 
    if ($args = "go-get=1") { 
     add_header Content-Type text/html; 
     return 200 '<meta name="go-import" content="$host/myPackage git https://mygithosting.example.org/myName/myPackage.git">'; 
    } 
    rewrite^https://mygithosting.example.org/myName/myPackage? permanent; 
} 

Gitサーバーを移動するたびに、メタタグのURLを変更するだけで済みます。

バニティインポートパスを使用してGitサーバーや他のユーザーから直接インポートするユーザーがいる場合は、このパスを正規のインポートパスとして設定することもできます。正規のインポートパスは、Goプログラムの1つのファイル内のpackage行の特別なコメントとして指定されます(どちらのプログラムでも問題ありません)。彼らは、次のようになります。上記のコードは、実際にどこかにホストされていると、誰かがそれを直接インポートしようとした場合

import mypackage // import "example.com/mypackage" 

今、 go getは文句を言うでしょう:

$ mygithosting.example.org/myName/myPackageを取りに行きます パッケージmygithosting.example.org/myName/myPackage:ディレクトリー/go/mygithosting.example.org/myName/myPackage expects import "のコード。com/mypackage "

+0

回答ありがとうございますが、アップロードしてワークスペース全体が良いとお考えですか? – Apin

+0

おっと、申し訳ありませんが、私は最初の質問に対処できました。あなたの仕事場が成長するにつれて物事を管理するのが難しくなり、人々は仕事場を作ってそれを作るためにハックをしなければならなくなるだろうと言っています。通常の開発プロセス(グローバルなものではなく、誤ってGitにチェックインしたくない作業領域内のものが必要な場合)に適合します。 –