假设您有一个存储库,github.com/someone/repo
并将其分叉github.com/you/repo
.你想使用你的fork代替主repo,所以你做了
go get github.com/you/repo
Run Code Online (Sandbox Code Playgroud)
现在,此仓库中的所有导入路径都将"损坏",这意味着,如果存储库中有多个包通过绝对URL相互引用,则它们将引用源,而不是fork.
有没有更好的方法将其手动克隆到正确的路径?
git clone git@github.com:you/repo.git $GOPATH/src/github.com/someone/repo
Run Code Online (Sandbox Code Playgroud)
Iva*_*ave 79
github.com/someone/repo
github.com/you/repo
go get github.com/someone/repo
http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html
https://github.com/golang/go/wiki/PackageManagementTools
Shl*_*ach 20
解决问题的一种方法是由Ivan Rave和http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html建议- 分叉的方式.
另一个是解决golang行为.当你go get
,golang以与存储库URI中相同的名称布局你的目录,这就是麻烦开始的地方.
相反,如果您自己发布git clone
,则可以将存储库克隆到以原始存储库命名的路径上的文件系统上.
假设存在原始存储库github.com/awsome-org/tool
并将其分叉github.com/awesome-you/tool
,您可以:
cd $GOPATH
mkdir -p {src,bin,pkg}
mkdir -p src/github.com/awesome-org/
cd src/github.com/awesome-org/
git clone git@github.com:awesome-you/tool.git # OR: git clone https://github.com/awesome-you/tool.git
cd tool/
go get ./...
Run Code Online (Sandbox Code Playgroud)
golang非常乐意继续使用这个存储库,并且实际上并不关心某些上层目录awesome-org
在git remote是的时候有名字awesome-you
.所有导入awesome-org
都将通过您刚刚创建的目录进行恢复,这是您的本地工作集.
更详细,请参阅我的博客文章:在GitHub上分叉Golang存储库并管理导入路径
编辑:固定目录路径
Yog*_*esh 14
该
replace
指令允许您提供另一个导入路径,该路径可能是VCS(GitHub或其他地方)中的另一个模块,或者是具有相对或绝对文件路径的本地文件系统上的另一个模块。replace
使用指令中的新导入路径,而无需更新实际源代码中的导入路径。
所以你可以在下面做
module github.com/yogeshlonkar/openapi-to-postman
go 1.12
require (
github.com/someone/repo v1.20.0
)
replace github.com/someone/repo => github.com/you/repo v3.2.1
Run Code Online (Sandbox Code Playgroud)
仓库v3.2.1
中的标签在哪里。也可以通过CLI完成
go mod edit -replace="github.com/someone/repo@v0.0.0=github.com/you/repo@v1.1.1"
Run Code Online (Sandbox Code Playgroud)
如果您的fork只是临时的(即您打算将其合并),那么只需进行原位开发,例如$GOPATH/src/launchpad.net/goamz
.
然后,您可以使用版本控制系统的功能(例如git remote
)将上游存储库设置为存储库而不是原始存储库.
这使得其他人更难以使用您的存储库,go get
但更容易将其集成到上游.
事实上,我有一个goamz的存储库lp:~nick-craig-wood/goamz/goamz
,我正是以这种方式开发的.也许作者有一天会合并它!