Одним из решений может быть использование smudge
фильтра и clean
фильтров.
Это решение имеет серьезные недостатки, о которых мы поговорим позже.
Вам нужно написать два сценария, которые действуют как фильтры, то есть читать со стандартного ввода и записывать в стандартный вывод. Из документации:
Драйвер фильтра состоит из команды clean и команды smudge, которые можно не указывать. При извлечении, когда указана команда smudge, команда получает объект blob со своего стандартного ввода, а его стандартный вывод используется для обновления файла рабочего дерева. Аналогично, команда clean используется для преобразования содержимого файла рабочего дерева при регистрации.
Например, при использовании openssl мы можем записать файлы fooenc.sh
:
#!/bin/sh
openssl enc -bf -nopad -pass pass:1KjeHD8d6YUI80bIIEAQ9iYr@njqLw3T
и foodec.sh
:
#!/bin/sh
openssl enc -bf -nopad -d -pass pass:1KjeHD8d6YUI80bIIEAQ9iYr@njqLw3T
Обратите внимание, что эти скрипты должны храниться вне хранилища и что они должны храниться в секрете, поскольку они содержат ключ! В противном случае они удобны, потому что не запрашивают парольную фразу при каждом вызове.
Несколько более безопасной альтернативой может быть использование GPG.
В файле .git/config
в вашем хранилище вы должны указать эти фильтры;
[filter "crypt"]
clean = fooenc.sh
smudge = foodec.sh
Это не опечатка! Смотрите выдержку из документации выше. Эта настройка шифрует данные при регистрации и расшифровывает при оформлении заказа.
Затем в файле репозитория .git/info/attributes
вы указываете использовать этот фильтр для всех файлов;
* filter=crypt
Пока доступны сценарии фильтрации, рабочий каталог будет содержать читаемые файлы. Но объекты git будут зашифрованы.
Обратите внимание, что это исключает использование файлов на любом компьютере, на котором нет необходимых сценариев. Таким образом, bitbucket будет работать только как хранилище.
Теперь о недостатках; Это решение также делает бесполезными такие инструменты, как git diff
и все, что от этого зависит, поскольку объекты git теперь являются зашифрованными BLOB-объектами.
Изменить: Есть такие возможности, как git-crypt или git-encrypt, чтобы помочь вам с шифрованием содержимого вашего репо.
И есть решение проблемы diff; использование специального фильтра для различий; использование textconv с дополнительным сценарием для дешифрования больших двоичных объектов перед их отображением.