gitlab进行批量导入仓库需要用到manifests.xml,其中的路径name必须和gerrit项目名称一样。
如果manifest文件里的name路径和项目名称不一样,需要改为和项目名称一样。
gitlab导入仓库是以http、https、git来同步的。不能以ssh来导入。
导入仓库的时候,需要gitlab可以访问到gerrit项目仓库地址,所以需要将项目仓库可以让匿名用户访问。这样gitlab就可以访问成功。
需要将manifest文件进行path路径排序,从小到大依次,因为从gitlab批量导入的话,如果是混乱的,那么路径就也会混乱的导入,例如:
device/autochips/common
device/autochips/common/carlink
carlink提前导入进去,common就会提示路径被占用。
common提前导入进去,carlink会被自动分配到用户的项目下,而不是组下面。
kernel/kernel-4.9
kernel/kernel-4.9/drivers/soc/autochips/videoin
kernel-4.9提前导入进去,会自动创建一个drivers组,然后将仓库导入进去。
videoin提前导入进去,kernel-4.9就会提示路径被占用。
解决办法:
最短的路径进行更改路径名称
排序脚本:
# 导入正则表达式模块
import re
# 打开文件并读取每一行内容
with open(r'windows路径\manifests.xml', 'r') as f:
lines = f.readlines()
# 定义正则表达式,用于匹配每个项目的名称和路径
pattern = re.compile(r'name="(.+?)"\s+path="(.+?)"')
# 创建一个列表,用于存储每个项目的名称和路径
names_paths = []
# 遍历文件中的每一行,并使用正则表达式进行匹配
for line in lines:
match = pattern.search(line)
if match:
# 将匹配到的项目名称和路径添加到列表中
names_paths.append((match.group(1), match.group(2)))
# 对存储项目名称和路径的列表进行排序,按照路径长度进行排序
names_paths_sorted = sorted(names_paths, key=lambda x: len(x[1]))
# 创建一个新的字符串,用于存储排序后的项目名称和路径
line_new = ''
for name, path in names_paths_sorted:
# 将每个项目的名称和路径格式化为XML标签,并将其添加到新的字符串中
line_new += f'<project name="{name}" path="{path}" />\n'
# 将新的字符串写入一个名为"file_new.xml"的文件中
with open(r'windows路径\file_new.xml', 'w') as f:
f.write(line_new)
排序是按照path里内容进行排序,groups如果有的话也会进行排序,等到排序完成后,将其替换,dest也需要进行添加。还有manifest文件开头结尾也需要添加。