经常有这样的事情,当你在一个项目上工作时,你需要在其中使用另外一个项目。也许它是一个第三方开发的库或者是你独立开发和并在多个父项目中使用的。这个场景下一个常见的问题产生了:你想将两个项目单独处理但是又需要在其中一个中使用另外一个。一般来说我只能在父项目中维护一段逻辑来同步这些子项目。在同时维护多个父项目的时候这个过程将变得非常麻烦。
其中最官方的方法是使用git本身的submodule,它本身带了非常全面的功能。但实际上在工程中,它丰富的功能导致了它反而很可能因为操作失误而影响父子项目之间的独立性。(例如在编辑父项目时修改到子项目的代码并提交了)
针对这个问题,借鉴了gitsubmodule的形式设计了一个小工具来进行子项目管理。它只会保留clone
与pull --rebase
,避免影响到仓库。github链接:https://github.com/williamfzc/pysubmodule
使用
根目录新建pysub.json(名字可自定义),配置好你的子模块
{
"demo1": {
"url": "https://github.com/williamfzc/tornado_demo.git",
"path": ".",
"desc": "JUST USE IT AS EXAMPLE"
},
"demo2": {
"url": "https://github.com/williamfzc/tornado_demo.git",
"path": "abc/def",
"desc": "JUST USE IT AS EXAMPLE"
}
}
在主模块中你只需要
import pysubmodule
pysubmodule.sync('/Users/williamfzc/abc/pysub.json')
这样做之后,在执行代码时,pysubmodule会自动同步配置在json中的子模块。
执行前目录结构
.
├── pysub.json
└── run.py
执行后目录结构
.
├── abc
│ └── def
│ └── tornado_demo
│ ├── README.md
│ └── run.py
├── pysub.json
├── run.py
└── tornado_demo
├── README.md
└── run.py
Bug & 讨论
欢迎star与fork :)
欢迎PR与issue指教
这里提供一种动态获取json绝对路径的方法
import pysubmodule
import os
root_path = os.path.dirname(__file__)
json_file = os.path.join(root_path, 'pysub.json')
pysubmodule.sync(json_file)