Да и нет.
Вы можете попытаться зависеть от крючка, но это предполагает, что они установлены в удаленных местах, и это не всегда надежно.
Другим способом достижения почти такого же эффекта было бы использование драйвера фильтра нечетких / чистых атрибутов , , но не для полного репо .
(Источник: Pro Git book : Настройка Git - атрибутов Git )
Таким образом, сценарий smudge может декодировать файлы, а сценарий clean будет их кодировать.
Опять же, это может работать для нескольких конфиденциальных файлов, , а не для полного репо .
Конечно, эти сценарии не будут находиться в самом репозитории, а будут управляться / передаваться другим способом.
Поскольку Alkaline указывает на в комментариях , эта идея не масштабируется для репо, поскольку главный сопровождающий git Junio C. Hamano комментирует еще в 2009 :
Поскольку единственным смыслом существования diff.textconv
является разрешение возможных потерь
преобразование (например, msword-to-text), примененное к прообразу и пост-образу
пара содержимого (которые должны быть "чистыми"), прежде чем дать текстовое
отличается от потребления человеком.
Вышеуказанная конфигурация может работать, но , если вы действительно хотите зашифрованное хранилище, вам следует использовать шифрованную файловую систему.
Это даст дополнительное преимущество, что дерево работы
связанный с вашим хранилищем также будет зашифрован .
Несмотря на то, что она не масштабируется до полного репо, идея была реализована (спустя 3 года в 2013 году) с git-crypt
, как подробно описано в Доминик Черизано ответ .
git-crypt
использует драйвер фильтра содержимого (реализован в cpp, с commands.cpp
, настраивающим .gitattributes
с соответствующими командами фильтра smudge
и clean
).
Как и любой драйвер фильтра содержимого, вы можете ограничить применение git-crypt
набором нужных вам файлов в том же файле .gitattributes
:
secretfile filter=git-crypt diff=git-crypt
*.key filter=git-crypt diff=git-crypt
Как упоминается в README
:
git-crypt
использует фильтры git, которые не были разработаны с шифрованием
в уме.
Как таковой, git-crypt
не самый лучший инструмент для шифрования большинства или
все файлы в хранилище.
Где git-crypt
действительно сияет, там, где большая часть вашего репозитория общедоступна, но у вас есть несколько файлов (возможно, закрытых ключей с именем *.key
или файл с учетными данными API), которые необходимо зашифровать.
Для шифрования всего хранилища рассмотрите возможность использования системы, такой как git-remote-gcrypt
.
(подробнее см. spwhitton / tech / code / git-remote-gcrypt , от Шон Уиттон )