使用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號