如何在git工作树中的某些文件上更改(老式的Mac OS)文件类型?

时间:2012-04-07 01:36:41

标签: git osx-lion

我的某些(Mac OS)文件需要文件类型为TEXT。我不是在讨论扩展,而是扩展属性。 git丢失了这个功能。

所以我需要对具有特定扩展名的文件运行SetFile命令,但我还没弄明白该怎么做。我只需要在结账方向执行此操作 - 在提交期间无需保存任何内容。

我将Ruby脚本视为污迹过滤器,但不知道如何获取文件名。这是正确的方法还是更好的?

(我无法控制对文件类型的需求 - 它是一个遗留系统,我无法改变它的工作方式。)

1 个答案:

答案 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使这适用于硬案例路径名(例如,包含嵌入空格的路径名)。