Git进阶技巧

1 基于GPT的自动代码审核

项目地址 3.1k⭐

Star History Chart

目前支持多种部署方式,官方推荐为使用 Github Action

  1. 添加OPENAI_API_KEY到你的 github action 密钥(Setting - Secrets and variables - Actions - New repository secret,输入GPT相关的API密钥)
  2. 创建.github/workflows/cr.yml添加以下内容(Actions - New workflow - set up a workflow yourself - yml文件重命名,撰写具体的配置信息):
# cr.yml
name: Code Review

permissions:
  contents: read
  pull-requests: write

on:
  pull_request:
    types: [opened, reopened]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: anc95/ChatGPT-CodeReview@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          # optional
          LANGUAGE: Chinese
          # OPENAI_API_ENDPOINT: https://api.chatanywhere.com.cn/v1 # 支持第三方API 
          # PROMPT:

2 Git中的垃圾回收机制

Git中的垃圾回收机制包括数据打包、清理垃圾数据和清理过期数据三部分

  • 数据打包主要是针对松散的对象文件、pack文件和引用文件进行操作
  • 垃圾数据是指没有引用和引用日志指向的数据(不可达对象),通常是之前被reset掉的数据
  • 过期数据包括reflog、worktree元数据和rerere元数据
  • git的gc机制可以自动触发;底层子命令可以用来执行具体的垃圾回收动作。

常用底层命令:

  • pack-refs:用来打包引用文件
  • repack:用来打包数据对象
  • reflog expire:用来删除超期的日志信息
  • prune:用来删除不可达的松散数据对象文件
  • worktree prune:用来删除残留的worktree元数据
  • rerere gc:用来删除rerere记录的冲突解决元数据

需要注意的是,prune只能删除不可达的松散数据对象文件。如果对象已经被打包到pack文件中,则不能被删除。pack中的不可达对象需要使用repack来删除。参考:Git技术内幕-垃圾回收那些事

3 处理占用较大的项目

  • 在一个大型项目中只克隆一个目录,以提升下载速度:sparse clone和sparse checkout通过设置sparse参数和filter参数,可以只下载需要的部分内容
  • 将这些目录独立成一个新项目 git subtree split -P 【目录】 -b 【新分支名】
  • 浅克隆(shallow clone):git checkout --depth=1 只取最新版本,也可以提交代码、创建分支和标签

其他相关处理技巧: 【GitFAQ-如何拆分大仓库】
【GitFAQ-如何管理大文件】
【GitFAQ-如何删除提交记录中的大文件】

往年同期文章