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**
我在我导入的存储库 .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**