1

我的一些 (Mac OS) 文件需要具有 TEXT 文件类型。我不是在谈论扩展,而是扩展属性。git 丢失了该功能。

所以我需要对具有特定扩展名的文件运行 SetFile 命令,但我还没有弄清楚如何去做。我只需要在结帐方向执行此操作 - 在提交期间不需要保存任何内容。

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

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

4

1 回答 1

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在它们上调用。这并不完美,因为它将对未更改的文件重新执行操作,并且在 a 之后根本不会运行git reset --hard,但可能足以满足您的需求。

将为所有命名的文件*.txt(但没有其他文件)执行此操作的 post-checkout 挂钩非常简单:

#! /bin/sh
git ls-files -z -- '*.txt' | xargs -0 SetFile -t TEXT

和使其适用于硬情况路径名(例如,包含嵌入空格的路径名)-z-0

于 2012-04-07T09:04:39.790 回答