Go 去不工作/去其他地方

Go 去不工作/去其他地方,go,Go,我正在尝试获取一个项目,该项目最初托管在一个不可用的a.com服务器上。 同一项目现在在B.com下提供,但代码内的所有导入都指向A.com(例如import A.com/user/projet/lib) 当我尝试获取B.com/user/projet时,它是从B.com克隆git repo,然后尝试从A.com下载资源 如何判断go-get包A.com/user/projet现在在B.com/user/projet上提供(不在代码内部重写导入)?这很难做到 正如我和@jimb之前所建议的,重新

我正在尝试
获取一个项目,该项目最初托管在一个不可用的
a.com
服务器上。 同一项目现在在
B.com
下提供,但代码内的所有导入都指向
A.com
(例如
import A.com/user/projet/lib

当我尝试
获取B.com/user/projet
时,它是从
B.com
克隆git repo,然后尝试从
A.com
下载资源

如何判断
go-get
A.com/user/projet
现在在
B.com/user/projet
上提供(不在代码内部重写导入)?

这很难做到

正如我和@jimb之前所建议的,重新编写路径会更容易。然而,你可以做一些事情

当导入路径不是已知代码宿主站点时 文本是命令
go-help-importpath

如果导入路径不是已知的代码宿主站点,并且缺少 版本控制限定符,go工具尝试获取导入 并在文档的HTML中查找
标记

meta标记的形式如下:

<meta name="go-import" content="import-prefix vcs repo-root">
go-import
meta标记告诉
go-get
从何处获取,以及
go-source
源代码的浏览位置

请参阅下面一篇关于此功能的有用文章

其他更值得怀疑的把戏 代理和/或主机文件条目 其他非常肮脏的技巧是代理问题中的服务器(使用类似nginx和主机条目的东西),或者只使用主机文件将url指向新位置,但每次克隆时都需要有该主机条目

不推荐

通过git子模块提供包和技巧 另一种选择是在源存储库中提供包,这样
go get
将不再尝试导入包,并且它将忽略您在
gopath
上的任何内容

如果将包作为子模块添加到存储库中的新位置,您仍然可以将两个代码库分开,但由于导入的包将位于供应商文件夹中,因此
go-get
将永远不会尝试导入任何内容

在我看来,如果你不能做
go-get
meta标记,那么两个坏处就比较小了

我建议您看看
git子树
,作为
git子模块
的替代方案。他们很酷,也很容易对付

  • 有关git子模块的更多信息,请访问:
  • 有关git子树的更多信息,请访问:

我希望这能有所帮助。

这很难做到

正如我和@jimb之前所建议的,重新编写路径会更容易。然而,你可以做一些事情

当导入路径不是已知代码宿主站点时 文本是命令
go-help-importpath

如果导入路径不是已知的代码宿主站点,并且缺少 版本控制限定符,go工具尝试获取导入 并在文档的HTML中查找
标记

meta标记的形式如下:

<meta name="go-import" content="import-prefix vcs repo-root">
go-import
meta标记告诉
go-get
从何处获取,以及
go-source
源代码的浏览位置

请参阅下面一篇关于此功能的有用文章

其他更值得怀疑的把戏 代理和/或主机文件条目 其他非常肮脏的技巧是代理问题中的服务器(使用类似nginx和主机条目的东西),或者只使用主机文件将url指向新位置,但每次克隆时都需要有该主机条目

不推荐

通过git子模块提供包和技巧 另一种选择是在源存储库中提供包,这样
go get
将不再尝试导入包,并且它将忽略您在
gopath
上的任何内容

如果将包作为子模块添加到存储库中的新位置,您仍然可以将两个代码库分开,但由于导入的包将位于供应商文件夹中,因此
go-get
将永远不会尝试导入任何内容

在我看来,如果你不能做
go-get
meta标记,那么两个坏处就比较小了

我建议您看看
git子树
,作为
git子模块
的替代方案。他们很酷,也很容易对付

  • 有关git子模块的更多信息,请访问:
  • 有关git子树的更多信息,请访问:


我希望这会有所帮助。

还有另一个没人提到的肮脏把戏-在维护者自己重写导入之前,手动
git clone
git pull
package,在$GOPATH/src/A.com/package中<代码>开始构建
开始安装
按预期工作。这一次我做的是快速破解。

还有另一个没人提到的肮脏把戏-手动
git clone
git pull
package在$GOPATH/src/A.com/package中,在维护者自己重写导入之前<代码>开始构建,
开始安装
按预期工作。我这一次做得很快。

你不能。你需要重写import语句。事实上,你必须重写那里的语句。你可以做一些肮脏的把戏,但没有一个是正确的recommended@Cerber:代码已经被破坏,因此将其分叉到您自己的回购协议并重写导入可能不是那么不合理。重写导入并不难,有一些工具比sed更容易实现。这就是说,如果您不想更改它,只需将它放在
供应商/
目录中,然后处理它。@JimB我理解这一点,但因为我不是维护者