如何找出 Git 仓库中可能过时的文件
· 阅读需 11 分钟
使用场景
在维护 Git 仓库,特别是文档类型的仓库,随着文档数量的增加,很容易出现信息不准确或过时的情况。为了解决这个问题,你可以将文档的内容与对应功能的代码或存在的 issue 绑定,当上游代码发生变化时,自动触发文档的更新。这种方式适合文档项目从 0 到 1 的初期,但是对于已经存在的文档项目重新维护这样的绑定关系就会变得很麻烦。
为了及时发现文档仓库中可能过时的内容,你可以使用 git log
命令获取文档的最后一次更新信息,以发现长期未更新的文档。下面具体介绍如何使用 git log
生成指定目录下所有 Markdown 文件的最后一次 commit 信息。
使用方法
备注
如果在 macOS 上使用该脚本,需要先安装 gnu-sed
和 findutils
:
brew install gnu-sed findutils
-
获取需要使用的脚本
generate_last_commit_report.sh
:- Command
- Shell script
git clone https://gist.github.com/862f24cec9a5915c71019dea2795c423.git scripts
chmod +x scripts/generate_last_commit_report.shgenerate_last_commit_report.sh#!/bin/bash
set -e
DIR=$1
REPO=$2
FIND=$(which gfind || which find)
SED=$(which gsed || which sed)
(
echo '| File | Last Commit Author | Last Commit Date | Relative Date |'
echo '| ---- | ------------------ | ---------------- | ------------- |'
(
cd "$DIR"
$FIND . -name '*.md' | $SED 's~^./~~' | while read -r FILE; do
git --no-pager log -1 --format=format:'%at | '"[$FILE](https://github.com/$REPO/blob/%H/$FILE)"' | %an | %as | %ar |%n' "$FILE"
done
) | sort --numeric-sort | $SED -E 's~^[0-9]+ ~~'
) >"$DIR"_commit_log.md -
获取某个文档仓库、某个分支的最新内容:
git clone https://github.com/{OWNER}/{REPO}.git {DOC_REPO}
cd {DOC_REPO}
git checkout {BRANCH}