我的某些(Mac OS)文件需要文件类型为TEXT。我不是在讨论扩展,而是扩展属性。 git丢失了这个功能。
所以我需要对具有特定扩展名的文件运行SetFile命令,但我还没弄明白该怎么做。我只需要在结账方向执行此操作 - 在提交期间无需保存任何内容。
我将Ruby脚本视为污迹过滤器,但不知道如何获取文件名。这是正确的方法还是更好的?
(我无法控制对文件类型的需求 - 它是一个遗留系统,我无法改变它的工作方式。)
答案 0 :(得分:0)
来自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
。这并不完美,因为它会对未更改的文件重新执行操作,并且在git reset --hard
之后根本不会运行,但可能满足您的需求。
对于名为*.txt
(但没有其他人)的所有文件执行此操作的post-checkout钩子非常简单:
#! /bin/sh
git ls-files -z -- '*.txt' | xargs -0 SetFile -t TEXT
-z
和-0
使这适用于硬案例路径名(例如,包含嵌入空格的路径名)。