한 가지 해결책은 git 's smudge
및 clean
filters 를 사용하는 것 입니다. 그러나이 솔루션에는 몇 가지 심각한 단점이 있습니다.
필터 역할을하는 두 개의 스크립트, 즉 표준 입력에서 읽고 표준 출력에 쓰기를 작성해야합니다. 설명서에서 :
필터 드라이버는 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
필터링 스크립트를 사용할 수있는 한 작업 디렉토리에는 읽을 수있는 파일이 포함됩니다. 그러나 자식 객체는 암호화됩니다.
이 실제로 배제 참고 하여 필요한 스크립트가없는 모든 컴퓨터에있는 파일을. 따라서 bitbucket은 스토리지로만 작동합니다.
이제 단점은; 이 솔루션은 같은 도구를 만드는 git diff
그에 따라 모든 것을 쓸모 자식의 객체가 이제 모양을 암호화하기 때문에.
편집 : repo의 내용을 암호화 하는 데 도움이되는 git-crypt 또는 git-encrypt
와 같은 도구 가 있습니다.
그리고 diff 문제에 대한 해결책이 있습니다. diff에 특수 필터 사용; textconv 를 추가 스크립트와 함께 사용하여 블롭이 확산 되기 전에 해독합니다.