使用gitmodules文件自动增加子分支
前言
最近使用git,遇到了下载zip后子仓库未正确拉取的情况.
查了一圈发现只能使用git clone,十分不友好,因此写了个脚本,基于.gitmodules自动把子仓库拉取下来.
代码
使用前要先git init初始化仓库
import os
import subprocess
def read_gitmodules():
gitmodules_path = ".gitmodules"
if not os.path.exists(gitmodules_path):
print(f"文件 {gitmodules_path} 不存在。")
return []
with open(gitmodules_path, "r", encoding="utf-8") as file:
content = file.read()
return content
def parse_gitmodules(content):
submodules = []
lines = content.splitlines()
submodule = {}
for line in lines:
line = line.strip()
if line.startswith("[") and line.endswith("]"):
submodule["name"] = line[1:-1]
elif line.startswith("path = "):
submodule["path"] = line.split(" = ")[1]
elif line.startswith("url = "):
submodule["url"] = line.split(" = ")[1]
elif line.startswith("branch = "):
submodule["branch"] = line.split(" = ")[1]
# 通常branch作为最后一个字段,追加到上一个submodules列表中
submodules[-1]["branch"] = submodule["branch"]
submodule = {}
if submodule and "path" in submodule and "url" in submodule:
submodules.append(submodule)
submodule = {}
return submodules
def add_submodules(submodules):
for submodule in submodules:
if submodule:
print(submodule)
name = submodule["name"]
path = submodule["path"]
url = submodule["url"]
branch = submodule.get("branch", None)
if branch:
print(f"添加子模块: {path} ({url} {branch})")
try:
subprocess.run(
[
"git",
"submodule",
"add",
"-b",
branch,
url,
path,
]
)
except Exception as e:
print(f"添加子模块: {name} 失败: {e}")
else:
print(f"添加子模块: {path} ({url})")
try:
subprocess.run(["git", "submodule", "add", url, path])
except Exception as e:
print(f"添加子模块: {name} 失败: {e}")
if __name__ == "__main__":
content = read_gitmodules()
submodules = parse_gitmodules(content)
add_submodules(submodules)

浙公网安备 33010602011771号