模块化很好,但如果需要同时修改多个Pod就比较繁琐了。
先在Example里修改了多个Pod的code,再手动copy到各个Pod比较麻烦,还容易漏
以下ruby脚本一键完成
需要先把各个Pod仓库Clone下来并切换到对应的分支,分支不对 不会同步的
TODO:
1、用脚本实现Clone和切换分支「easy」
2、通过gitlab api分析提交文件列表,在持续集成服务器执行同步Pod操作任务,并结果通知到提交者
# frozen_string_literal: true require 'pathname' # gem install git require 'git' require 'fileutils' # 目录结构如下 # ├── ABCPods1 # │ ├── ABCPods1 # │ │ └── Code.m # │ └── ABCPods1.podspec # ├── ABCPods2 # │ ├── ABCPods1 # │ │ └── Code.m # │ └── ABCPods1.podspec # ├── ABCPods3 # │ ├── ABCPods3 # │ │ └── Code.m # │ └── ABCPods3.podspec # └── Example # └── Pods # ├── ABCPods1 # │ └── Code.m # ├── ABCPods2 # │ └── Code.m # └── ABCPods3 # └── Code.m # 在Example里修改了多个模块的code。再手动copy到各个Pod比较麻烦,还容易漏 # 以下脚本一键完成 # 需要先把各个Pod手动切换到对应的分支,分支不对 不会同步的 Git.configure do |config| config.binary_path = '/usr/local/bin/git' end # 变量设置 pods_path = Pathname.new 'path/to/Example/Pods' git_container = Pathname.new '/path/to/gitcontainer/' start_filter = 'ABCPods' filter_branch = 'test_branch_name' # 找到文件夹列表 all_dir = pods_path.children.select { |e| e.basename.to_s.start_with?(start_filter) } # 组装数据 all_dir_map = all_dir.map { |e| [e, git_container + e.basename + e.basename] } all_dir_map.each do |path_list| # path_list 第一个是主工程的文件夹 第二个是Pod的代码文件夹 dest_item = path_list.last # next unless dest_item.basename.to_s.eql? 'ABCPods1' # use test next unless FileTest.exist? dest_item.parent g = Git.open dest_item.parent next unless g.current_branch.eql? filter_branch puts "#{path_list.first} copy to #{dest_item}" FileUtils.rm_r(dest_item, force: true) src = path_list.first + path_list.first.basename dest = dest_item.parent FileUtils.cp_r(src, dest) # 打印出有修改的,根据日志自己Review后提交 status_output = `git -C #{dest} status` puts status_output unless status_output.include? 'working tree clean' end 复制代码