完整自学手册
律师的协作新方式 · 零基础友好
学习杨卫薪律师的文章后整理
学习杨卫薪律师的文章《Git issue + PR:律师的下一代协作方式》时发现很多概念没搞清楚,于是通过和 AI 反复对话学习并整理,形成此手册。
🎯
你可能是
✅
读完你能
📖
阅读建议
目标:读完这个手册,你将能够用 GitHub 工作法管理法律项目,实现结构化协作。
场景一:版本地狱
问题:不敢删、不敢信
场景二:协作混乱
问题:意见散落各处
场景三:AI 用不起来
问题:无法持续协作
Git 是一个版本控制系统。 记录项目每次变化,随时可以回到过去任意时刻。
没有 GitHub,Git 照样工作。 GitHub/GitLab 只是基于 Git 的云端平台,用于远程备份和多人协作。
选择建议:团队内用 → GitLab(私有部署);开源协作 → GitHub。底层都是 Git,概念互通。
Repository = 一个被 Git 管理的项目文件夹。 中文常叫:仓库、项目仓库、代码库。一个 Repository 包含
像什么? 带自动存档功能的文件夹。改完可以存档,随时回到任意历史版本。
Commit = 给项目拍一张快照,永久保存。 不是"保存文件",是"保存这一刻整个项目的完整状态"。
# Commit: a1b2c3d...author: 张三date: 2026-04-23 14:30message: "补充违约金法条"parent: 32b7fae...tree: (当时所有文件的完整状态)
像什么? 游戏存档点。存了档,死了可以读档重来。
Branch = 一个可移动的指针,指向某个 Commit。 不是"复制文件",是"多了一个指针"。
核心:切换分支 = 移动指针,工作目录文件跟着变。
git checkout = 切换分支,或恢复文件到某个状态。 两个完全不同的功能,同一个命令。
git checkout maingit checkout feature-1
Git 把 HEAD 指针移到目标分支,工作目录的文件跟着变。
像什么? 换台——电视只有一个屏幕,换到频道1看新闻,换到频道2看体育。
git checkout -- 文件名git checkout a1b2c3d -- 文件名
放弃修改,恢复到最后一次提交。或恢复到某个 commit 的版本。
危险:切换分支时如果有未提交的修改,Git 会阻止切换。安全做法:先 git add . + git commit,再切换。
Worktree = 同一个仓库的额外工作目录。 让多个分支同时存在于不同文件夹。
git checkout 切换同一房间换桌子
git worktree add 创建同一栋楼不同房间同时办公
git worktree add ../project-feature feature-1 # 创建git worktree list# 查看git worktree remove ../project-feature # 删除
Fork = 在 GitHub/GitLab 上复制一个别人的仓库,变成你自己的。
给开源项目提改进: Fork → 修改 → 提 PR 给原项目
基于别人的项目做自己的事: Fork → 独立发展
像什么? 复印一本书,在复印件上随意修改。原书不变,复印件随你改。
Issue = 一个待办事项,带追踪功能。 不是"问题",是"任务"(虽然英文直译是"问题")
像什么? 白板上的便利贴 + 聊天记录 + 状态追踪。
Pull Request (PR) = 请求合并代码,等待审核。 Merge Request (MR) = GitLab 的叫法,和 PR 是一回事。
像什么? PR = 论文投稿。写完论文 → 投稿 → 审稿人评审 → 大修/小修/接收。
.gitignore = 告诉 Git"这些文件别追踪"。 为什么需要?临时文件、依赖、敏感信息、编译产物都不该进 Git。
# 忽略所有 .tmp 文件*.tmp# 忽略整个文件夹node_modules/dist/# 忽略敏感配置.envconfig.json# 不忽略某个文件(例外)!important.tmp
不要把客户资料、证据原件、敏感文档提交到 Git。
# 法律项目 .gitignore*.pdf*.docx证据材料/客户信息/# 但保留索引文件!materials-index.md
已提交过的文件:再加 .gitignore 无效。需要先 git rm --cached 文件名
Git 对文件只有两种态度:已追踪 / 未追踪。 新文件默认未追踪,必须 git add 告诉 Git"我要管"。
✅ 很省,不是问题
⚠️ 爆炸,迅速膨胀
务实方案:文本(研究、论证、草稿)→ Git 管理。二进制(PDF、图片、视频)→ 外部存储,Git 里只存索引。
目标:把一个案件文件夹变成 Git 仓库
# 1. 进入文件夹cd ~/我的案件# 2. 初始化 Gitgit init# 3. 创建项目说明echo "# 合同纠纷案" > README.md# 4. 添加到暂存区git add README.md# 5. 提交(拍第一张快照)git commit -m "初始提交:创建案件项目"# 6. 查看状态和历史git statusgit log --oneline
现在你有:一个 Repository + 一个 Commit + 一个 main 分支。
# 1. 创建文件echo "## 相关法条" > 法条检索.md# 2. 查看状态git status# → Untracked files: 法条检索.md# 3. 添加到暂存区git add 法条检索.md# 4. 提交git commit -m "添加基础法条检索"
# 编辑文件后git diff# 绿色:增加 | 红色:删除# 添加并提交git add 法条检索.mdgit commit -m "补充违约金法条"
git add 的作用:告诉 Git"我要管这个文件",暂存区像购物车,选好商品后统一结账(commit)。
场景:想尝试一个新论证角度,但不想影响主线
# 当前在 main 分支git branch# * main# 创建并切换到新分支git checkout -b 新论证角度# 修改文件、提交echo "## 新论证思路" >> 答辩状.mdgit add 答辩状.mdgit commit -m "尝试新论证角度"# 现在有两个分支,可以随意切换git checkout main # 答辩状恢复原样git checkout 新论证角度 # 新内容又回来了
分支让你可以:大胆尝试,不行就扔;多个思路并行;随时对比哪个更好。
场景:新论证角度效果不错,合并到主线
# 1. 切换到目标分支git checkout main# 2. 合并git merge 新论证角度# 3. 如果有冲突,Git 会标记# 手动解决后:git add 文件名git commit -m "解决合并冲突"# 4. 查看历史git log --oneline --graph
合并冲突:是因为同一处被两个人改了。Git 无法判断谁对谁错,需要你决定保留什么。
场景:一个复杂诉讼,拆成多个任务
#1 检索相关法条
#2 整理证据链
#3 起草答辩状
#4 准备庭审材料
1
建 Issue:"答辩点3:损失构成分析"
2
git checkout -b issue-003-损失构成
3
干活:检索、论证,写材料 → git add . → git commit -m "完成损失构成分析"
4
git push origin issue-003-损失构成
5
提 PR:网页上点击 "Create Pull Request",写清楚改了什么、依据、还有什么不确定
6
审核:主办律师看 diff,批注、提问
7
修改:按反馈调整 → git push
8
合并 + 关闭 Issue
场景:同时处理三个任务,不想来回切换
# 主仓库在 ~/litigationcd ~/litigation# 创建三个 worktreegit worktree add ~/litigation-main maingit worktree add ~/litigation-issue-001 issue-001-法条检索git worktree add ~/litigation-issue-002 issue-002-证据链# 现在你有三个文件夹,可以同时打开工作# 每个文件夹独立,互不干扰,提交都回到同一个仓库git worktree list# 查看git worktree remove ~/litigation-issue-001 # 用完删除
优势:不用来回切换分支,同时保持多个任务的上下文。
架构:一台电脑当 Git 服务器
# 电脑A设置:mkdir ~/git-repos && cd ~/git-reposgit init --bare litigation.git# 电脑B、C连接:git clone ssh://电脑A的IP/~/git-repos/litigation.git# 日常工作:git pull# 获取最新git push# 提交回去
仓库(Git 管理)├── 案件概述.md├── 证据索引.md ← 只存清单│ └── 证据1.pdf → ../materials/└── 答辩状.md外部存储└── materials/ ├── 证据1.pdf (50MB) └── 证据2.pdf (30MB)
# 安装 Git LFSgit lfs install# 追踪 PDF 文件git lfs track "*.pdf"# PDF 会存到 LFS 服务器# .git 里只存指针
建议:法律项目优先用方案一,PDF/扫描件存外部,Git 只管文本主线。
| GitHub Desktop | ||
| Fork | ||
| GitKraken | ||
| VS Code | ||
| Obsidian |
建议:先学命令行理解原理,再用图形界面提高效率。命令行是内功,图形界面是轻功。
git init# 初始化git clone <地址> # 克隆git status# 查看状态git log --oneline # 查看历史
git add <文件> # 添加到暂存git add . # 添加所有git commit -m "消息" # 提交git commit -am "消息" # 添加并提交
git branch# 查看分支git branch <名字> # 创建分支git checkout <分支> # 切换git checkout -b <名> # 创建并切换git merge <分支> # 合并
git push origin <分支> # 推送git pull# 拉取git worktree list# 查看git worktree add <路径> <分支>
最后建议:不要试图一次学会所有。先创建一个仓库,做几个 commit,建几个 branch,提一个 PR。动手比看十遍都强。
📄
那篇启发文章
📚
官方文档
推荐书籍:《Pro Git》(免费在线版)· 《Git 权威指南》
动手试试吧
开始了,就成功了一半
mkdir my-projectcd my-projectgit initecho "# 我的第一个项目" > README.mdgit add README.mdgit commit -m "初始提交"
《GitHub 法律工作法学习笔记》
基于杨卫薪律师文章整理