如何加密文件并将其存储在 LFS 上?

How to encrypt a file and store it on LFS?

我知道如何通过 git-crypt:

加密存储库中的文件
echo "*.crypt.* filter=git-crypt diff=git-crypt" > .gitattributes
echo "supersecret info" > somethingTo.crypt.txt
git add .gitattributes somethingTo.crypt.txt
git crypt status   # somethingTo.crypt.txt results encrypted
git commit
git push

并且我知道如何使用 git-lfs 存储文件(在自托管的 GitLab 上;在项目设置中启用了 LFS):

git lfs track somethingTo.crypt.txt
git add .gitattributes    # updated LFS rule for tracked file
git commit
git push

...但是,如何在同一个文件上同时使用它们?


即使 .gitattributesgit-filter 用于加密 before 用于存储在 LFS 上的过滤器,文件未加密(git crypt status | grep somethingTo 报告“未加密”)。 LFS 未跟踪的所有其他 *.crypt.* 文件均已正确加密。

我想问题出在我的 somethingTo.crypt.txt 现在只是存储库中的一个引用对象,而不是实际的(加密的)文件。但我希望(感谢 git-filters)文件在 被推送到 LFS Store[=42= 之前得到 filtered/encrypted ].


这两个过滤器扩展是否相互兼容?如何让它们协同工作?

您可以自己制作滤镜。你必须制作你自己的组合过滤器(以及那些模组安装的任何其他属性)来达到你想要的效果,git 不知道如何让 third-part 钩子相互协作,

Even if .gitattributes has the git-filter for encrypting before the filter for storing on LFS, the file doesn't get encrypted

那是因为属性不会累积,它们会覆盖。您为每个属性获得一个值,即在最后一场比赛中指定的值。如果您想要一个结合了两个 third-party 工具的效果的过滤器,您必须编写一个结合了这两个 third-party 工具的效果的过滤器。