2 个版本
0.2.3 | 2022 年 7 月 4 日 |
---|---|
0.2.2 | 2022 年 7 月 4 日 |
#35 在 #git-hook
21KB
400 行
Git Metafile
一个简单的工具,用于在 git 仓库中存储和恢复完整的文件元数据(模式、所有者、组)。它特别适用于版本控制 /etc。
元数据使用 .metafile
文件进行跟踪,该文件会自动更新并添加到提交中。此文件采用 TSV(制表符分隔值)格式,便于阅读和比较。
示例 .metafile.
#%GIT-METAFILE 1
# <path> <mode> <uid> <gid>
.gitignore 100644 0 0
.metafile 100644 0 0
profile.d 40755 0 0
shadow 100640 0 42
安装
在 Alpine Linux 上
如果你使用 Alpine Linux,你可以从 Alpine 的社区仓库安装 git-metafile 软件包
apk add git-metafile
在 Arch Linux 上
如果你使用 Arch Linux,你可以从 AUR 安装 git-metafile 软件包
yay -S git-metafile
或者使用另一个 AUR 辅助工具。
使用 cargo
如果你是 Rust 开发者,你可以使用 cargo
从 crates.io 构建 和 安装 git-metafile
cargo install git-metafile
注意,二进制文件可能比预期大,因为它包含调试符号。要删除调试符号并因此减小文件大小,请在二进制文件上运行 strip
使用预构建的二进制文件
如果你的包管理器没有提供 git-metafile,你可以使用预构建的二进制文件。
在 Linux 上,你可以选择一个静态链接 [1] (static) 二进制文件,它应该在每个 Linux 系统上工作(发行版),或者如果你使用的是足够新的基于 GNU/libc 的 (glibc) 发行版(大多数主要发行版),则可以选择动态链接的二进制文件。
🐧 Linux (static): [x86_64] [aarch64] [armv7]
🐧 Linux (glibc): [x86_64] [ppc64le] [riscv64gc]
macOS: [x86_64]
-
安装git(使用您的系统包管理器)。
-
下载并解压适用于您的操作系统和CPU架构的发布版tar包(从上面的列表中选择正确的链接)
curl -sSLO https://github.com/jirutka/git-metafile/releases/download/v0.2.3/git-metafile-0.2.3-x86_64-linux.tar.gz curl -sSL https://github.com/jirutka/git-metafile/releases/download/v0.2.3/checksums.txt | sha256sum -c --ignore-missing tar -xzf git-metafile-0.2.3-*.tar.gz
-
将
git-metafile
安装到您的PATH
路径上的某个位置,例如/usr/local/bin
install -m 755 git-metafile-0.2.3-*/git-metafile /usr/local/bin/
从源tar包
-
安装git(使用您的系统包管理器)。
-
下载并解压tar包
wget https://github.com/jirutka/git-metafile/archive/v0.2.3/git-metafile-0.2.3.tar.gz tar -xzf git-metafile-0.2.3.tar.gz cd git-metafile-0.2.3
-
使用cargo构建git-metafile
cargo build --release --locked
-
从
target/release/git-metafile
获取二进制文件,并将其安装到您的PATH
路径上的某个位置,例如/usr/local/bin
install -D -m755 target/release/git-metafile -t /usr/local/bin/
如何使用
要自动记录每次提交的文件属性并在每次检出时恢复它们,请设置git钩子
cat >> .git/hooks/pre-commit <<EOF
#!/bin/sh
git-metafile save && git add .metafile
EOF
chmod +x .git/hooks/pre-commit
cat >> .git/hooks/post-checkout <<EOF
#!/bin/sh
git-metafile apply
EOF
chmod +x .git/hooks/post-checkout
ln -s post-checkout .git/hooks/post-rewrite
这应该适用于所有基本操作,因此您不再需要考虑它。然而,在rebase时必须小心——在rebase模式下提交更改之前以及git在rebase期间检出文件时不会运行任何钩子!
要手动记录更改或恢复文件属性,可以分别运行git metafile save
或git metafile apply
。
许可证
本项目采用MIT许可证许可。有关许可证的完整文本,请参阅LICENSE文件。
- 与musl libc静态链接
依赖项
~2MB
~39K SLoC