GIT 过滤器的相对目录?

Relative directory for a GIT filter?

我在我导入的存储库 .gitconfig 文件中定义了以下 GIT 过滤器。

[filter "csprojarrange"]
  clean = CsProjArrange

但是,只有当 CsProjArrange.exe 是我的 PATH 的一部分时它才有效,如果 CsProjArrange.exe 被签入存储库的根目录则无效。

是否可以让 GIT 过滤器在相对目录上工作?

正如我在评论中提到的,Git 不这样做的一个重要原因是它存在巨大的安全风险。

使用当今的工具和技术,减轻该风险的明显方法是 运行 一个 in-repo 过滤器,当且仅当该过滤器具有有效的 digital signature(a la PGP / GPG 签名。也就是说,您的 .gitattributes 文件将显示为:

[filter "csprojarrange"]
  clean = helper-check-git-signature CsProjArrange

或类似的。同时 helper-check-git-signature 将是您必须独立于 Git 和任何存储库安装的程序;但是您永远只需要安装一次。 (也许你的 OS 附带了一些合适的东西,因为这种数字签名技术是一些 phone OSes 审查应用程序的方式,尽管他们倾向于在下载期间执行一次,而不是每次都执行filter-run.)

助手的工作是在存储库中找到文件,验证它是否可以 运行,然后 运行 它。由于助手安装在计算机的 "trusted" 部分(例如 Linux 上的 /usr/local/bin$HOME/bin),它只是 运行s。在存储库中更新过滤器时不需要重新安装它。

这里没有 "canned" 的部分是助手如何进行验证(如果你有 gpg,你可能想使用它,因为它有所有 signature-checking 和撤销支持你需要),签名本身与 in-repo 过滤器的位置,助手 定位 各个部分的方式,等等。想想把这样的事情当作一个商业机会,也许。 :-)

你可以使用这样的东西:

[filter "csprojarrange"]
  clean = $PWD/CsProjArrange

这里,$PWD 是您当前的工作区目录。之后,您可以根据需要设置路径。 例如,如果 CsProjArrange 在您的工作空间中位于 workspaceroot/dir1/dir2/CsProjArrange 的位置可用,那么您可以设置...

[filter "csprojarrange"]
  clean = **$PWD/dir1/DIR2/CsProjArrange**