我有一个golang项目,我把代码放在git服务器的某处。 我的所有代码现在都在$ GOPATH / mygitserver / folder /.
在gitserver更改url之前,所有内容都是商品,所以我需要将所有导入替换为新的gitserver url。因此,我不希望将来再次拥有它,并希望改变它的工作方式。
因此,我不打算只将软件包推送到我的git服务器,而是计划将整个工作区上传到git(排除外部库)。所以,我将有一个直接到src文件夹的包(例如:src / mypackage)。所以,当我更改gitserver网址时,一切都会有效。
问题是:这样做是否很好(将工作区上传到git)?或者我们还有其他选择吗?
此外,还有另一个以前不存在的问题。因此,在克隆我的工作区后,我必须为项目使用的所有库调用“go get”。 (这不会发生,因为当我调用go get mygitserver / package时,Golang会自动下载依赖项)。有没有办法让我的所有依赖项只下载一个命令?
答案 0 :(得分:3)
如果您希望服务器频繁移动,可能的解决方案是使用vanity import path。
虚荣导入路径允许您将代码保存在您拥有的域上的导入路径中,从而将您重定向到存储代码的位置。例如,如果您在Bitbucket上托管代码,但担心将来可能会移动并拥有域example.net
,则可以托管代码,以便用import "example.net/myproject"
导入代码。在幕后,go get
工具将从Bitbucket获取它。为此,您必须在所需的域上提供包含表单自定义元标记的文档:
<meta name="go-import" content="import-prefix vcs repo-root">
例如,在example.net/myproject
提供以下HTML文件会重定向go get
以克隆提供的Bitbucket URL(它当然也可以指向包括您自己的任何其他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程序的一个文件中被指定为package
行上的特殊注释(它与哪一个无关)。它们看起来像这样:
import mypackage // import "example.com/mypackage"
现在如果上面的代码实际上是托管在其他地方并且有人试图直接导入它,那么go get
会抱怨:
$ go get mygithosting.example.org/myName/myPackage package mygithosting.example.org/myName/myPackage:目录/go/mygithosting.example.org/myName/myPackage中的代码需要import&#34; example.com/mypackage"