📜  显示提交的文件列表 (1)

📅  最后修改于: 2023-12-03 15:26:20.226000             🧑  作者: Mango

显示提交的文件列表

当我们使用版本控制系统(如Git)管理项目代码时,每次提交代码都要包含修改的文件列表。在某些情况下,我们可能需要在程序中显示提交的文件列表,这个过程可以通过以下几个步骤实现:

1. 获取提交记录

首先,需要从Git仓库中获取最新的提交记录。这可以通过Git命令git log来实现。以下是Python代码片段,使用subprocess模块调用Git命令并返回提交记录的结果:

import subprocess

def get_commit_logs():
    cmd = ['git', 'log', '--pretty=format:%H,%an,%ae,%s', '--abbrev-commit']
    result = subprocess.check_output(cmd).decode().strip()
    return result.split('\n')
2. 解析提交记录

从Git命令git log获取的提交记录包含提交ID、作者姓名、作者邮箱和提交信息等信息。为了获取修改的文件列表,我们需要解析提交信息。

以下是Python代码片段,用于解析提交信息并返回包含修改的文件列表的字典:

def parse_commit_info(commit_info):
    commit_info = commit_info.split(',')
    commit_id = commit_info[0]
    author_name = commit_info[1]
    author_email = commit_info[2]
    message = commit_info[3]
    cmd = ['git', 'show', '--name-only', commit_id]
    files = subprocess.check_output(cmd).decode().strip().split('\n')[4:]
    return {'commit_id': commit_id, 'author_name': author_name, 'author_email': author_email, 'message': message, 'files': files}
3. 生成Markdown格式的文件列表

最后,我们可以将修改的文件列表以Markdown格式返回或显示。以下是Python代码片段,用于将文件列表转换为Markdown格式:

def format_files_md(files):
    result = '### Modified Files:\n'
    for f in files:
        result += '- {}\n'.format(f)
    return result

完整代码:

import subprocess

def get_commit_logs():
    cmd = ['git', 'log', '--pretty=format:%H,%an,%ae,%s', '--abbrev-commit']
    result = subprocess.check_output(cmd).decode().strip()
    return result.split('\n')

def parse_commit_info(commit_info):
    commit_info = commit_info.split(',')
    commit_id = commit_info[0]
    author_name = commit_info[1]
    author_email = commit_info[2]
    message = commit_info[3]
    cmd = ['git', 'show', '--name-only', commit_id]
    files = subprocess.check_output(cmd).decode().strip().split('\n')[4:]
    return {'commit_id': commit_id, 'author_name': author_name, 'author_email': author_email, 'message': message, 'files': files}

def format_files_md(files):
    result = '### Modified Files:\n'
    for f in files:
        result += '- {}\n'.format(f)
    return result

if __name__ == '__main__':
    commit_logs = get_commit_logs()
    for commit_info in commit_logs:
        commit_dict = parse_commit_info(commit_info)
        files_md = format_files_md(commit_dict['files'])
        print(files_md)

以上就是通过Python程序显示提交的文件列表的方法,可根据实际需求进行修改和拓展。