一日一技:难以置信,还有人不知道反斜杠和引号的关系
717
2022-05-30
更进一步,这个代码不是 Python 写的,可能是 Golang,可能是 Node.js,可能是 C++。如果你的项目想直接调用对方的代码,又应该怎么办呢?
有人说,那就把别人的代码先下载到本地,然后复制到自己项目中。但这样有一个问题,如果别人代码更新了,你如何即时更新呢?
以我之前的一个项目 kingname/JsonPathFinder[1] 为例。这个项目里面没有setup.py,也没有把它上传到pypi 上面。所以你没有办法使用 pip 进行安装。要使用它本身很简单,直接把这个文件JsonPathFinder.py复制到你自己的项目里面就可以了。但是这样一来,你不知道我什么时候更新了代码,难道你每天要上来看看我有没有更新?
为了解决这个问题,我们可以使用git submodule功能。这个功能,可以让你把一个 Git 源挂载到另外一个源里面。
假设我们现在有一个项目:test_module,它想使用JsonPathFinder来解析 JSON,假设项目的代码如下图所示:
显然,现在运行肯定会报错,因为我还没有把JsonPathFinder.py文件复制过来。但我并不准备直接复制文件,相反,我要做的是,以子模块的形式,把JsonPathFinder项目添加进来。
首先确保我们目前的项目已经使用 git进行了源码管理。如果你还没有,那么,记得执行git init。
然后,我们执行如下命令:
git submodule add https://github.com/kingname/JsonPathFinder.git
运行效果如下图所示:
现在,我们再来运行main.py,可以看到代码已经被正常执行了:
并且 git 会自动 Clone 子模块到对应的文件夹里面。我们使用子模块里面的代码,就像是直接使用复制粘贴下来的代码一样。
git submodule update --remote
Git 就会自动更新子模块的代码了。你完全可以把这条命令写到 Makefile 里面,结合我以前讲 Makefile 的文章,做一个自动更新的功能,每次当你要运行自己项目的时候,都自动更新一下子模块。
关于子模块的更多操作,你可以参考 Git 的官方文档:Git - 子模块[2]。
参考资料
Git
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。