Contents

Use git-crypt to encrypt files in Git

git-crypt is a tool for encrypting and decrypting files that integrates seamlessly with Git repositories, allowing users to securely store and share sensitive data.

Install git-crypt

1
❯ brew install git-crypt

Initialize git-crypt and back up the encryption key

1
2
3
4
5
6
7
8
9
❯ git-crypt init
Generating key...
❯ git-crypt export-key /Users/damonguo/Workspace/keys/git-crypt-v1.key
❯ diff .git/git-crypt/keys/default /Users/damonguo/Workspace/keys/git-crypt-v1.key

❯ echo "git-crypt/api.key filter=git-crypt diff=git-crypt" > .gitattributes
❯ git add .gitattributes
❯ git commit -m "feat: tell git-crypt to encrypt git-crypt/api.key"
❯ git push

Create git-crypt demo files

1
2
3
4
5
6
❯ mkdir git-crypt
❯ echo "This is some text" > git-crypt/file.txt
❯ echo "dummy value" > git-crypt/api.key
❯ git add git-crypt
❯ git commit -m "feat: add git-crypt demo files"
❯ git push

Verify encryption and decryption status

Use the git-crypt status command to view the server side encryption and decryption status

1
2
3
❯ git-crypt status git-crypt
    encrypted: git-crypt/api.key
not encrypted: git-crypt/file.txt

View the server side encryption and decryption status on the GitLab Web

git_crypt_encrypted_file

Encrypt and decrypt the git-crypt/api.key locally with git-crypt lock/unlock commands

1
2
3
4
5
6
7
8
9
❯ git-crypt lock
❯ file git-crypt/api.key
git-crypt/api.key: data

❯ git-crypt unlock /Users/damonguo/Workspace/keys/git-crypt-v1.key
❯ file git-crypt/api.key
git-crypt/api.key: ASCII text
❯ cat git-crypt/api.key
dummy value

Working in team with git-crypt

Share the exported encryption key /Users/damonguo/Workspace/keys/git-crypt-v1.key with team members in a secure way.

Then they can import encryption key and decrypt the repository by command: git-crypt unlock /path/to/git-crypt-v1.key.

Renew the git-crypt encryption key

Create a new git-crypt encryption key

1
2
3
4
5
6
❯ git-crypt unlock /Users/damonguo/Workspace/keys/git-crypt-v1.key
❯ rm -rf .git/git-crypt/keys
❯ git-crypt init
Generating key...
❯ git-crypt export-key /Users/damonguo/Workspace/keys/git-crypt-v2.key
❯ diff .git/git-crypt/keys/default /Users/damonguo/Workspace/keys/git-crypt-v2.key

Trigger an update and apply the new git-crypt encryption key.

1
2
3
4
❯ echo "new dummy value" > git-crypt/api.key
❯ git add git-crypt/api.key
❯ git commit -m "feat: update api.key with new git-crypt encryption key"
❯ git push

Share the new git-crypt encryption key /Users/damonguo/Workspace/keys/git-crypt-v2.key with team members in a secure way.

Then ask them to hold on the git push and pull actions, import the new encryption key first: git-crypt unlock /path/to/git-crypt-v2.key.

References

https://buddy.works/guides/git-crypt