是的,也不是。
您可以尝试依赖钩子,但这假设它们安装在远程位置,并且并不总是可靠的。
实现几乎相同效果的另一种方法是使用污迹/清洁属性过滤器驱动程序 https://stackoverflow.com/questions/2154948/how-can-i-track-system-specific-config-files-in-a-repo-project/2155355#2155355, 但不适用于完整的回购协议.
(Source: Pro Git book http://git-scm.com/book/en/v2/: Customizing Git - Git Attributes http://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes)
这样,污迹脚本就能够对文件进行解码,而干净的脚本将对它们进行编码。
同样,这可能适用于一些敏感文件,不适用于完整的回购协议.
当然,这些脚本不会位于存储库本身中,而是会通过另一种方式进行管理/通信。
As Alkaline https://stackoverflow.com/users/1556338/alkaline指出在评论中 https://stackoverflow.com/questions/2456954/git-encrypt-decrypt-remote-repository-files-while-push-pull/2457006#comment54706421_2457006,作为主要的 git 维护者,这个想法无法扩展为 repoJunio C. Hamano 于 2009 年发表的评论 http://article.gmane.org/gmane.comp.version-control.git/113221:
作为唯一存在的理由diff.textconv
是允许潜在的有损
应用于原像和后像的转换(例如 msword-to-text)
在给出文本之前的一对内容(应该是“干净的”)
与人类消费的差异。
上面的配置可能看起来有效,但是如果您确实想要一个加密的存储库,您应该使用加密文件系统。
这将给工作树带来额外的好处
与您的存储库关联的也将被加密.
尽管它没有扩展到完整的回购协议,但这个想法还是被实施了(3年后的2013年)git-crypt https://github.com/AGWA/git-crypt,详见多米尼克·塞里萨诺 https://stackoverflow.com/users/1048170/dominic-cerisano's answer https://stackoverflow.com/a/45047100/6309.
git-crypt
uses a 内容过滤器驱动程序(在cpp中实现,带有commands.cpp https://github.com/AGWA/git-crypt/blob/788a6a99f4289745e6bd12fae2ad8014af320a4f/commands.cpp#L149-L168设置你的.gitattributes
与相关的smudge
and clean
过滤命令)。
与任何内容过滤器驱动程序一样,您可以限制应用程序git-crypt
到您想要的文件集,在同一个.gitattributes
file:
secretfile filter=git-crypt diff=git-crypt
*.key filter=git-crypt diff=git-crypt
As 中提到的README https://github.com/AGWA/git-crypt/blob/788a6a99f4289745e6bd12fae2ad8014af320a4f/README#L93-L102:
git-crypt
依赖于 git 过滤器,该过滤器没有加密设计
心里。
像这样,git-crypt
不是加密大多数或
存储库中的所有文件。
在哪里git-crypt
真正的亮点是你的大部分存储库都是公开的,但你有一些文件(可能是名为*.key
,或具有 API 凭据的文件),您需要对其进行加密。
要加密整个存储库,请考虑使用类似的系统git-remote-gcrypt https://spwhitton.name/tech/code/git-remote-gcrypt/反而。
(更多信息请访问spwhitton/技术/代码/git-remote-gcrypt https://spwhitton.name/tech/code/git-remote-gcrypt/, from 肖恩·惠顿 https://spwhitton.name/)