Techyou labs
文章RSS
评论RSS
登录
真正的爱应该超越生命的长度、心灵的宽度、 灵魂的深度
搜索
关于作者
文章分类
Default
Linux/Unix
Database
Cloud
Networking
Security
Programming
最新文章
商城优惠券设计
Pulumi 新一代基础设施管理工具
装机神器-u盘启动手术刀Ventoy
使用 mergefs 创建虚拟挂载点
使用minio存储docker容器数据
Linux Mint 19/Ubuntu18 多点触摸和手势
Mint 19.2升级后若干问题
poetry, python依赖管理新军刀
docker 中运行 openwrt
Inxi:一把获取 Linux 系统信息的军刀
最新评论
renothing: 二次反向代理跟你应用程序得处理时间有关系吧?尤其是...
二次反向代理性能很差,怎么优化的?: 我也用nginx 做了个二次反向代理,但是并发连3...
hostyep: 交换链接么?目前每天保持30个左右对口IP,每月都...
yzhkpli: error while loading share...
美肤宝: 感谢分享。。。
lq: 嗯 喜欢弄得点单点
按月归档
February 2021
September 2020
May 2020
September 2019
August 2019
July 2019
June 2019
May 2019
January 2019
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
April 2018
March 2018
December 2017
October 2017
September 2017
August 2017
April 2017
March 2017
February 2017
August 2016
July 2015
November 2014
September 2014
August 2014
July 2014
June 2014
July 2013
April 2013
September 2012
July 2012
May 2012
April 2012
February 2012
January 2012
December 2011
November 2011
October 2011
September 2011
August 2011
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
December 2009
November 2009
October 2009
September 2009
June 2009
May 2009
April 2009
March 2009
February 2009
December 2008
November 2008
September 2008
August 2008
July 2008
June 2008
常用标签
Mysql
nginx
mysql优化
linux
apache
Powered by
Typecho)))
Optimized by
EAimTY
git合作开发时gopath的问题
September 9, 2018
项目开发的一般流程是先fork项目,然后基于自己fork的项目开发,最后通过提交PR将自己的代码merge到上游。 这里会涉及到两个:上游仓库和自己fork的仓库,它们之间最终通过PR关联起来。 但是,由于Golang特定的GOPATH依赖,导致这种方式针对于Golang项目会有些问题。 # 常见开发流程: 1. 将项目fork自己的账户下; 2. Clone自己fork的项目到本地,并进行开发; 3. 将修改的代码push到自己fork的项目中; 4. 从fork的项目中为自己的代码创建PR; 5. 等这个PR被merge后,自己的代码才能进入上游项目。 举个例子,来演示整个过程。为描述清晰、方便,有如下约定: 上游项目为org/repo fork项目为user/repo 按照常规的Git开发流程,在本地clone的fork项目中直接go build,会存在依赖问题: Fork出来的项目在GOPATH中的路径发生了改变,但是代码中import的路径没有改变,所以没有使用fork项目中的package。 即使构建成功,但是真正使用也不是fork项目中修改的代码 有可能GOPATH中已经存在org/repo,所以按照上面的方式构建,不会提示错误。但是如果在user/repo中修改的代码,是无法生效的。 因为代码中引用的是org/repo的package,不是user/repo中修改过的package。 # Golang依赖的优先级: 1. 当前目录下有vendor,就在当前目录vendor下找 2. 如果当前目录下没有vendor,就在其父目录下找vendor 3. 在系统$GOPATH/src中找 4. 在$GOROOT中找 5. 在$GOROOT/src中找 > 注:上面任何一步中找到了依赖,就不再继续。 # 解决办法 了解了golang依赖解析规则后,我们来个变通办法,更改本地remote地址来达到目的,本地开发中路径仍然采用上有路径,这样不必更改import中的依赖路径 1: 重命名克隆下来的user/repo远端: ``` git remote rename origin fork ``` 2: 添加/org/repo远端作为依赖拉取路径 ``` git remote add official http://xxx.com/org/repo.git ``` 3: 更改本地远端映射关系 ``` git branch --set-upstream-to=official/master ``` 4: 正常开发调试 5:push到自己远端仓库fork ``` git push fork ``` 6: 向org/repo请求pull request 7: 合并pr # 小结 其实,添加多个remote地址的方式适用于任何语言的git项目,能够帮助高效、快捷地在upstream和fork项目中协作。并且结合git rebase能让整个变更历史更加自然清爽,避免过多分叉。
暂无评论
添加新评论
称呼
Email
网站
取消回复
内容
发表评论