#git #git-repository #tool #cli-tool #cli #git-hook

app git-metafile

一个简单的工具,用于在 git 仓库中存储和恢复文件元数据(模式、所有者、组)。它特别适用于版本控制 /etc。

2 个版本

0.2.3 2022 年 7 月 4 日
0.2.2 2022 年 7 月 4 日

#35#git-hook

MIT 许可证

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 开发者,你可以使用 cargocrates.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]

  1. 安装git(使用您的系统包管理器)。

  2. 下载并解压适用于您的操作系统和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
    
  3. git-metafile安装到您的PATH路径上的某个位置,例如/usr/local/bin

    install -m 755 git-metafile-0.2.3-*/git-metafile /usr/local/bin/
    

从源tar包

  1. 安装git(使用您的系统包管理器)。

  2. 下载并解压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
    
  3. 使用cargo构建git-metafile

    cargo build --release --locked
    
  4. 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 savegit metafile apply

许可证

本项目采用MIT许可证许可。有关许可证的完整文本,请参阅LICENSE文件。

  1. musl libc静态链接

依赖项

~2MB
~39K SLoC