一日一技:如何正确在自己项目里面集成别人的代码?

简介: 一日一技:如何正确在自己项目里面集成别人的代码?

我们知道,在使用 Python 的时候,如果我想使用别人发布的第三方库,那么我们可以使用pip进行安装。但如果这个第三方库的作者没有把它上传到 pypi 上面,只上传到了 Github 上面,我们应该怎么集成呢?如果项目里面有setup.py文件,那么我们也许可以使用pip直接从 Github 上面安装。但如果对方连这个文件也没有呢?


更进一步,这个代码不是 Python 写的,可能是 Golang,可能是 Node.js,可能是 C++。如果你的项目想直接调用对方的代码,又应该怎么办呢?


有人说,那就把别人的代码先下载到本地,然后复制到自己项目中。但这样有一个问题,如果别人代码更新了,你如何即时更新呢?


以我之前的一个项目 kingname/JsonPathFinder[1] 为例。这个项目里面没有setup.py,也没有把它上传到pypi 上面。所以你没有办法使用 pip 进行安装。要使用它本身很简单,直接把这个文件JsonPathFinder.py复制到你自己的项目里面就可以了。但是这样一来,你不知道我什么时候更新了代码,难道你每天要上来看看我有没有更新?


为了解决这个问题,我们可以使用git submodule功能。这个功能,可以让你把一个 Git 源挂载到另外一个源里面。


假设我们现在有一个项目:test_module,它想使用JsonPathFinder来解析 JSON,假设项目的代码如下图所示:


1.png


显然,现在运行肯定会报错,因为我还没有把JsonPathFinder.py文件复制过来。但我并不准备直接复制文件,相反,我要做的是,以子模块的形式,把JsonPathFinder项目添加进来。


首先确保我们目前的项目已经使用 git进行了源码管理。如果你还没有,那么,记得执行git init


然后,我们执行如下命令:


git submodule add https://github.com/kingname/JsonPathFinder.git


运行效果如下图所示:


2.png


现在,我们再来运行main.py,可以看到代码已经被正常执行了:


3.png


并且 git 会自动 Clone 子模块到对应的文件夹里面。我们使用子模块里面的代码,就像是直接使用复制粘贴下来的代码一样。


那么,当子模块的原作者更新了代码,我们怎么同步更新呢?实际上非常简单,你不需要进入子模块里面。你要做的,只是在你自己的项目根目录执行命令:


git submodule update --remote


Git 就会自动更新子模块的代码了。你完全可以把这条命令写到 Makefile 里面,结合我以前讲 Makefile 的文章,做一个自动更新的功能,每次当你要运行自己项目的时候,都自动更新一下子模块。


关于子模块的更多操作,你可以参考 Git 的官方文档:Git - 子模块[2]


参考资料

[1]

kingname/JsonPathFinder: https://github.com/kingname/JsonPathFinder

[2]

Git - 子模块: https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
4月前
|
jenkins Java 持续交付
【项目集成工具】Jenkins
【项目集成工具】Jenkins
|
1天前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
|
4月前
|
负载均衡 应用服务中间件 Linux
JavaWeb项目自动部署,持续集成
JavaWeb项目自动部署,持续集成
37 0
|
1月前
|
JavaScript Go 项目管理
云效常见问题之使用gitlab仓库将代码合并评审环节集成到云效如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
97 1
|
1月前
|
XML Java 数据格式
springboot 微服务项目如何集成 html 页面
springboot 微服务项目如何集成 html 页面
29 0
|
2月前
|
安全 Java 网络安全
【Shiro】第四章 Web项目集成Shiro
【Shiro】第四章 Web项目集成Shiro
65 1
|
3月前
|
存储 NoSQL Java
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖集成Redis(九)
基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖集成Redis(九)
|
3月前
|
监控 Java BI
springboot集成积木报表项目springboot启动报错 Unable to load cache item
springboot集成积木报表项目springboot启动报错 Unable to load cache item
|
18天前
|
消息中间件 Java Kafka
Springboot集成高低版本kafka
Springboot集成高低版本kafka
|
24天前
|
NoSQL Java Redis
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
264 0