赞
踩
公司从供应商获取到的sdk,解压出来后,里面是repo管理的源码仓库集合。但是我们要将这些仓库上传到我们自己的服务器进行管理。然而这个repo仓库不是mirror仓库。所以需要将里面的git按照原sdk来提取出来。因此写了这个脚本用来从sdk里面提取所有的裸仓库。
manifest完全可以用xml来解析,而不是按行来匹配。
按https://blog.csdn.net/mmh19891113/article/details/83024816这篇文章操作出现报错。
#! /usr/bin/env python # -*- coding: utf-8 -*- import argparse try: import configparser as configparser except Exception: import ConfigParser as configparser import os import re import shutil if __name__ == '__main__': parser = argparse.ArgumentParser(description='Get gits from repo project') parser.add_argument("-s", "--src", help="source absolute repo project dir") parser.add_argument("-d", "--dst", help="dest dir for save gits") args = parser.parse_args() print("source dir=%s", args.src) print("dst dir=%s", args.dst) project_list = os.path.join(args.src, ".repo", "project.list") manifest_xml = os.path.join(args.src, ".repo", "manifest.xml") with open(project_list) as p: p_lines = p.readlines() with open(manifest_xml) as m: m_lines = m.readlines() os.system("cd %s && repo start master --all" % args.src) pass_count = 0 for p in p_lines: path = "path=\"%s\"" % p.strip() is_find = False for m in m_lines: if path in m.strip(): src_git = os.path.join(args.src, p.strip()) d = re.search(r"name=\"([^\"]*)\"", m.strip(), re.M | re.I) dst_git = os.path.join(args.dst, d.group(1)) p_dst_git = os.path.dirname(dst_git) if not os.path.exists(p_dst_git): os.makedirs(p_dst_git) dst_git_name = os.path.basename(dst_git) + ".git" os.system("cd %s && git clone --bare %s %s" % (p_dst_git, src_git, dst_git_name)) # print("cd %s && git clone --bare %s %s" % (p_dst_git, src_git, dst_git_name)) is_find = True pass_count = pass_count + 1 print("[%d/%d]" % (pass_count, len(p_lines))) break if not is_find: print("cannot find %s" % p.strip()) exit(-1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。