我的一些 (Mac OS) 文件需要具有 TEXT 文件类型。我不是在谈论扩展,而是扩展属性。git 丢失了该功能。
所以我需要对具有特定扩展名的文件运行 SetFile 命令,但我还没有弄清楚如何去做。我只需要在结帐方向执行此操作 - 在提交期间不需要保存任何内容。
我将 Ruby 脚本视为涂抹过滤器,但不知道如何获取文件名。这是正确的方法还是钩子会更好?
(我无法控制对文件类型的需求——它是一个遗留系统,我无法改变它的工作方式。)
来自git hooks --help
:
post-checkout
This hook is invoked when a git checkout is run after having updated
the worktree. The hook is given three parameters: the ref of the
previous HEAD, the ref of the new HEAD (which may or may not have
changed), and a flag indicating whether the checkout was a branch
checkout (changing branches, flag=1) or a file checkout (retrieving a
file from the index, flag=0). This hook cannot affect the outcome of
git checkout.
因此,您可以有一个 post-checkout 挂钩,该挂钩运行在工作树中具有您关心的特定扩展名的所有文件上,并SetFile
在它们上调用。这并不完美,因为它将对未更改的文件重新执行操作,并且在 a 之后根本不会运行git reset --hard
,但可能足以满足您的需求。
将为所有命名的文件*.txt
(但没有其他文件)执行此操作的 post-checkout 挂钩非常简单:
#! /bin/sh
git ls-files -z -- '*.txt' | xargs -0 SetFile -t TEXT
和使其适用于硬情况路径名(例如,包含嵌入空格的路径名)-z
。-0