git-获取与n次提交前比对有变化的文件并导出

import os
import datetime
import shutil

def get_dir_and_file(src_file_path, work_dir, desc_dir):
    """获取需要拷贝的文件的源路径和目标路径"""
    if '/' in src_file_path:
        file_path = src_file_path.split('/')
        src_file_path = work_dir + '/' + '/'.join(file_path)
        desc_dir_path = desc_dir + '/' + '/'.join(file_path[:-1])
        desc_file_path = desc_dir + '/' + '/'.join(file_path)
    else:
        source_file_path = src_file_path
        src_file_path = work_dir + '/' + source_file_path
        desc_dir_path = desc_dir
        desc_file_path = desc_dir + '/' + source_file_path

    return src_file_path, desc_dir_path, desc_file_path



def get_work_dir(work_dir, desc_dir):
    """获取目标目录的名称"""
    now = datetime.datetime.now()
    now = [str(now.month), str(now.day), str(now.hour), str(now.minute), str(now.second)]
    now = "_".join(now)

    desc_dir = desc_dir + '_' + now

    return work_dir, desc_dir


def get_src_file_list(work_dir, commit_lvl):
    """获取需要拷贝的文件的路径"""
    os.chdir(work_dir)

    update_files = os.popen("git diff --name-only HEAD~" + str(commit_lvl)).read()
    update_files = update_files.split('\n')
    update_files.pop()

    os.chdir('..')

    return update_files


def start(work_dir, desc_dir, commit_lvl):
    work_dir, desc_dir = get_work_dir(work_dir, desc_dir)
    update_files = get_src_file_list(work_dir, commit_lvl)

    os.mkdir(desc_dir)

    for src_file_path in update_files:
        src_file_path, desc_dir_path, desc_file_path = get_dir_and_file(src_file_path, work_dir, desc_dir)
        if desc_dir_path and not os.path.exists(desc_dir_path):
            os.makedirs(desc_dir_path)
        shutil.copy(src_file_path, desc_file_path)


if __name__ == '__main__':
    work_dir = "git_test_2"  # git 目录
    desc_dir = 'update_files'  # 目标目录
    commit_lvl = 1  # 工作区文件与 n 次提交之前的的文件比对, commit_lvl 为 n 的值
    start(work_dir, desc_dir, commit_lvl)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值