我有一个golang项目,并将代码放在git服务器中的某个位置。
我所有的代码现在都在$ GOPATH / mygitserver / folder /上。
直到gitserver更改URL之前,一切都已准备就绪,因此我需要将所有导入都替换为新的gitserver URL。因此,我不想在将来再次拥有它,并且想要更改其工作方式。
因此,现在我计划将整个工作空间上传到git(不包括外部库),而不是将包仅推送到我的git服务器。因此,我将有一个直接指向src文件夹的包(例如:src / mypackage)。因此,当我更改gitserver网址时,所有内容仍然可以使用。
问题是:执行此操作(将工作区上传到git)是否是一种好习惯?还是我们还有其他选择?
而且还带来了另一个以前不存在的问题。因此,克隆工作区后,必须为该项目使用的所有库调用" go get"。 (以前不会发生这种情况,因为当我调用go get mygitserver / package时,Golang会自动下载依赖项)。有什么办法可以使所有依赖项下载只是我的一个命令?
如果您希望服务器频繁移动,则一种可行的解决方案是使用虚荣导入路径。
Vanity导入路径使您可以将代码保留在您拥有的域上的导入路径中,该域会将您重定向到代码存储的位置。例如,如果您将代码托管在Bitbucket上,但担心将来可能会迁移并且拥有域
1 | <meta name="go-import" content="import-prefix vcs repo-root"> |
因此,例如在
1 | <meta name="go-import" content="example.net/myproject git https://bitbucket.org/myname/myproject.git"> |
要将Nginx配置为提供这些重定向,可以使用类似以下的配置(用您的项目名称和URL替换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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服务器,就可以在meta标签中更改URL。
如果您担心某些用户直接从Git服务器进行导入,而另一些用户则使用虚荣导入路径,则可以将此路径设置为软件包规范导入路径。规范导入路径在Go程序的一个文件中的
1 | import mypackage // import"example.com/mypackage" |
现在,如果上面的代码实际上托管在其他地方,并且有人尝试直接将其导入,则
$去获取mygithosting.example.org/myName/myPackage
程序包mygithosting.example.org/myName/myPackage:/go/mygithosting.example.org/myName/myPackage目录中的代码希望导入" example.com/mypackage"
- 感谢您的回答,但是您认为通过上传整个工作区是否很好?
- 糟糕,对不起,是的,我可以在一开始就解决最初的问题。 我不太了解您的特定用例,但总的来说,Id表示"不,那是个坏主意"。 随着工作空间的增长,这只会使事情变得更难管理,人们将不得不创建变通和黑客手段,使其适应正常的开发流程(他们可能希望工作空间中的事物在全球范围内无法适应, 但他们不想意外签到Git)。