100 Commits
Author SHA1 Message Date
Andrew Ayer 1f1f5e41bd Upgrade GitHub Actions
Closes: #285
2025-09-24 10:03:32 -04:00
Andrew Ayer 567aec5222 Improve formatting of NEWS.md 2025-09-24 09:08:36 -04:00
Andrew Ayer dd1b1f4e2a Remove plaintext README and NEWS files
It's easier to just have the markdown files.

Fixes: #274
2025-09-24 09:08:22 -04:00
Andrew Ayer 2322f618e1 GitHub Actions: use older version of Ubuntu for better compatibility
So compiled binaries will work on older Linux distros like Debian 12.
2025-09-24 08:56:07 -04:00
Andrew Ayer 669eae3c08 Build linux-arm64 binaries
I initially tried cross-compiling from the amd64 runner, but of course that's not as easy as it should be:
https://discourse.ubuntu.com/t/failing-to-pull-arm64-apt-packages-in-ubuntu-docker-containers/59377
https://discourse.ubuntu.com/t/http-404-when-attempting-to-fetch-arm64-packages-on-24-04-1/53243
https://github.com/actions/runner-images/issues/12878
https://github.com/actions/runner-images/issues/10901
2025-09-24 08:53:04 -04:00
Andrew Ayer 247da931aa GitHub Actions: explicitly specify Ubuntu version 2025-09-24 08:50:04 -04:00
Andrew Ayer 6ca139c364 GitHub Actions: fix Windows build 2025-09-24 08:41:06 -04:00
Andrew Ayer 1d3055d8c2 Remove unneeded include 2025-09-24 08:40:59 -04:00
Andrew Ayer 160cf642e1 Prepare 0.8.0 release 2025-09-23 20:41:07 -04:00
Andrew Ayer 4dd5c20243 Drop support for OpenSSL 1.0; fix compilation with OpenSSL 3 2025-09-23 20:37:48 -04:00
Andrew Ayer 968c924798 GitHub actions: upgrade download/upload artifacts
Closes: #313
2024-09-03 19:30:58 -04:00
Andrew Ayer 08dbdcfed4 When adding GPG collaborator, include full fingerprint in commit message
Short key IDs are bad (https://evil32.com/)

Closes: #253
2022-06-07 12:34:52 -04:00
Andrew Ayer a1e6311f56 Prepare 0.7.0 release 2022-04-21 13:08:16 -04:00
Andrew Ayer 12c422228a Add GitHub Actions to build & upload release binaries
Closes: #227
2022-04-21 13:02:07 -04:00
Andrew Ayer 1c905faeb5 Remove references to the mailing lists
Since the git-crypt mailing lists have barely been used, and mailing
lists seem to be falling out of fashion for open source projects, I've
decided to shut down the git-crypt mailing lists in favor of functionality
provided by GitHub.

For announcements of new releases, you can watch the git-crypt
repository (https://github.com/AGWA/git-crypt) for new releases.

For bug reports, you can file an issue:
https://github.com/AGWA/git-crypt/issues

For discussions, you can use GitHub's new discussions feature:
https://github.com/AGWA/git-crypt/discussions
2021-02-28 10:15:20 -05:00
Andrew Ayer 7c129cdd38 Don't interpret a literal "-" as an option argument on command line
This allows the following command to work properly:

git-crypt export-key -

Previously, you had to run this command, because - was being interpreted
as an option argument:

git-crypt export-key -- -
2020-04-28 09:14:29 -04:00
Andrew Ayer 89bcafa1a6 Use an enum for git checkout batch size instead of hard-coding constant 2020-01-25 10:21:23 -05:00
Andrew Ayer 88705f996c Improve clarity in README 2020-01-25 10:18:10 -05:00
Andrew Ayer d1fd1353f8 Execute git checkout in batches to avoid overlong argument lists
Closes: #195
Closes: #194
Closes: #150
2020-01-25 10:16:20 -05:00
Andrew Ayer ce716b130f Document how to exclude .gitattributes from encryption 2019-05-02 12:52:54 -07:00
Andrew Ayer 8618098bcc Update gitattributes docs 2019-05-02 12:51:02 -07:00
Andrew Ayer af846389e5 Document lack of key rotation in README
Based on text provided by Paul Sokolovsky <pfalcon@users.sourceforge.net>.

Closes: #72
2019-05-02 12:36:27 -07:00
Andrew Ayer 699d7eb246 Fix typo in README
Closes: #172
2019-05-02 12:31:48 -07:00
Andrew Ayer 546664f152 Prepare 0.6.0 release 2017-11-26 10:24:03 -08:00
Andrew Ayer 37df6fb5ad Update INSTALL file to reflect C++11 requirement 2017-11-26 10:21:23 -08:00
Andrew Ayer f3dd69e4c7 Update THANKS file 2017-11-26 10:05:42 -08:00
Andrew Ayer ccdcc76f8e Switch from NULL to nullptr 2017-09-10 12:36:21 -07:00
Andrew Ayer f03fdc6ad0 Clean up readdir code, add a comment about why we're using readdir 2017-09-10 12:34:36 -07:00
Andrew Ayer 0e4ad51a13 Update a comment regarding unique_ptr 2017-09-10 12:34:36 -07:00
Andrew Ayer 2b1076108e Enable C++11 in Makefile 2017-09-10 12:24:52 -07:00
Andrew Ayer 101b738a8d Read gpg program from git config gpg.program ; ported from fork by alanrossmachinery
Modified-By: Andrew Ayer <agwa@andrewayer.name>

  * Make whitespace conform to project conventions

Closes #89
Closes #65
2017-09-10 12:14:55 -07:00
Andrew Ayer 934914c2c4 Fix typo in README
Closes #83
2017-09-10 12:09:31 -07:00
Andrew Ayer a6170413eb Sync README changes to README.md 2017-09-10 12:05:13 -07:00
Andrew Ayer b47176e6a8 Don't hard code path to git-crypt in .git/config on Linux
There's a tradeoff.  When the path is hardcoded, it's guaranteed that
git-crypt will be found no matter where you run git or what your $PATH is.
On the other hand, hardcoding means that things break if git-crypt changes
location, which could easily happen if you copy a repository to a different system
(see https://github.com/AGWA/git-crypt/issues/71 for example).

In hindsight, I think this was a bad tradeoff.  Now, if git-crypt is
invoked as a bare filename (no slashes), the bare filename is placed
in .git/config under the assumption that it can be found via $PATH
(this assumption will be true as long as git-crypt wasn't resolved via
a relative path in $PATH).  This logic was already being used on
non-Linux OSes and it seemed to work fine.
2015-12-26 14:30:42 -08:00
Andrew Ayer c63a727177 Mark .gpg files in .git-crypt as binary
To remove any possibility of Git treating them as text by accident.

Closes #55.
2015-07-29 21:51:11 -07:00
Andrew Ayer e0b3bd754f Remove gnuism from Makefile
According to POSIX, $< is only valid with inference rules, not normal
target rules.
2015-06-13 10:54:50 -07:00
Andrew Ayer bc7e55b68f Prepare 0.5.0 release 2015-05-30 19:53:04 -07:00
Andrew Ayer f56911726a Makefile: refine man page rules
Rename HAS_DOCBOOK option to ENABLE_MAN.

Allow xsltproc to fetch the Docbook stylesheet from the Internet if it's
not installed locally.  This will hopefully make it easier for folks
to build the man page.
2015-05-30 19:52:29 -07:00
Andrew Ayer 9bbd39c491 Add instructions for building man page to INSTALL 2015-05-30 19:09:17 -07:00
Andrew Ayer 5dc55c3b2a Makefile: refine man page rules 2015-05-30 19:09:01 -07:00
Andrew Ayer ba250b87ad Add copyright notice to Makefile 2015-05-30 19:09:01 -07:00
Andrew Ayer 83b58eafa7 Overhaul Makefile
Support building the man page, but only if HAS_DOCBOOK variable set to "yes"
2015-05-30 19:09:01 -07:00
Andrew Ayer b4569ae6c1 Add man page 2015-05-28 21:24:16 -07:00
Andrew Ayer 0a2e633d7f Recommend Git 1.8.5 or newer for best performance
Since older versions of Git have to spawn a separate
check-attr process for every file in the repository,
which is slow.
2015-05-25 15:26:32 -07:00
Andrew Ayer ca98d1aed1 Minor README tweaks 2015-05-25 15:25:44 -07:00
Andrew Ayer 4acb4205eb git_version: cache the Git version
(to avoid repeated invocations of `git version`)
2015-05-24 18:58:13 -07:00
Andrew Ayer 1988ee3819 Speed up lock/unlock by using single git check-attr process
Previously, lock/unlock needed to spawn a separate `git check-attr`
process for every single file in the repository (whether encrypted
or not).  This was extremely inefficient, especially on Windows.

Now, git-crypt spawns a single `git check-attr` process and communicates
with it over stdin.  In a repository with thousands of files, this
results in a speedup of nearly 100x.

This relies on the --stdin and -z options to `git check-attr`, which
were only added in Git 1.8.5 (released 27 Nov 2013).  With older versions
of Git, git-crypt falls back to the old and slower code.
2015-05-24 18:55:58 -07:00
Andrew Ayer 44f70e6b48 Add Coprocess class
It provides a convenient way to spawn a process and read from/write to
its stdin/stdout.
2015-05-24 18:54:11 -07:00
Andrew Ayer 3db6271492 Re-license parse_options under X11 license 2015-05-17 14:38:12 -07:00
Andrew Ayer c279a6a20a Add helpers to faciliate Git version comparison
This will be useful as we start to gate code on the version of Git that's installed.
2015-05-16 21:10:44 -07:00
Andrew Ayer 439bcd852d Write a helper function to get the version of Git
This will be useful as we start to gate code on the version of Git that's installed.

A lot of code out in the wild seems to assume that the output of `git version`
is "git version $VERSION", so I'm assuming it's safe for git-crypt to rely
on that too.
2015-05-14 22:23:21 -07:00
Andrew Ayer 7880b30e8c Update INSTALL file
Streamline the instructions a bit.  Mention the Debian/Ubuntu and
RHEL/CentOS packages for each dependency.
2015-04-24 20:53:19 -07:00
Andrew Ayer 3104508adf Add --trusted option to gpg-add-user
If this option is specified, then the GPG users are added even
if their keys are not trusted by GPG.

In addition, if a full fingerprint, prefixed by 0x, is specified,
it is assumed to be trusted, regardless of its trust level in the
GPG trustdb.
2015-03-31 20:24:13 -07:00
Andrew Ayer ad71c7ffae FIx GPG key lookup with with-fingerprint enabled in gpg.conf
When the with-fingerprint option is enabled, the gpg command invoked by
git-crypt to look up a GPG user ID returns a fingerprint for both primary
keys and sub-keys.  Previously, this misled git-crypt into thinking that
the user ID matched more than one public key.  Now, git-crypt ignores
fingerprints for sub-keys.
2015-03-31 19:41:19 -07:00
Andrew Ayer 3ce5c83b2d Wrap long lines in README 2015-03-17 15:08:58 -07:00
Andrew Ayer 6d6e96f82b Clarify security section in README 2015-03-17 15:08:35 -07:00
Andrew Ayer c3ab393f17 Add notes to the README about symlinks, sub-modules 2015-03-15 13:55:18 -07:00
Andrew Ayer 6abf9c6956 Ignore non-files when running git ls-files
Non-files (symlinks and gitlinks (used by sub-modules)) cannot be
encrypted, so we shouldn't try messing with them.  This fixes `git-crypt
status` when used on a repository with sub-modules or symlinks when the
path to the sub-module or symlink has the git-crypt attribute (which
can happen inadvertently when using wildcards in .gitattributes).
2015-03-15 13:34:31 -07:00
Andrew Ayer ede1461563 Makefile: create destination directories in make install 2015-03-10 08:29:31 -07:00
Andrew Ayer 1b3f13643c Use opendir/readdir instead of scandir
scandir is a relatively recent addition to POSIX and is not available on
older versions of Mac OS X.  opendir/readdir should be more portable.
2015-02-26 22:51:40 -08:00
Andrew Ayer 8c130d3a00 Fix syntax error in commands.cpp 2015-02-09 11:42:22 -08:00
Andrew Ayer 012d78e1fe Add "do not edit" comment to .git-crypt/.gitattributes file 2015-02-09 11:37:50 -08:00
Andrew Ayer 99d4408f9e README: Add note about GitHub for Mac breakage 2015-02-09 11:37:19 -08:00
Andrew Ayer c2de1e2194 Add --force option to 'git-crypt lock'
It will force a lock even if working directory is unclean.  Useful
for deconfiguring git-crypt if you've accidentally unlocked with the
wrong key or gotten into a similarly sticky situation.
2015-02-07 13:27:58 -08:00
Andrew Ayer 85635ae0b1 touch_file, remove_file: ignore non-existent files 2015-02-07 13:22:30 -08:00
Andrew Ayer 18d3cfeca9 Remove some dead code 2015-02-07 12:57:52 -08:00
Andrew Ayer 0c8dae2375 Only run git_deconfig if Git configuration exists
This will let us run 'git lock' even if no filters are configured.

This logic is more complicated than I would like because running
'git config --remove-section' on a non-existent section results in
a noisy error (with text printed to stderr and an exit code of 128)
instead of a quiet error like the other 'git config' commands.
2015-02-07 12:54:07 -08:00
Andrew Ayer fc583c7d4f Add helper to get exit status of command 2015-02-07 12:43:17 -08:00
Andrew Ayer c850d65242 Change "unconfigure" to "deconfigure" 2015-02-07 12:15:53 -08:00
Andrew Ayer f5d36f0008 Fix wording of 'git-crypt lock' error message.
Thanks to Elliot Saba.
2015-02-07 08:52:07 -08:00
Andrew Ayer 1ca8f89602 Prepare for 0.4.2 release 2015-01-31 19:20:05 -08:00
Andrew Ayer 5fd36a7ac5 Increase minimum supported Git version to 1.7.2
Previously, git-crypt claimed to support Git as old as 1.6.0 (albeit
with degraded operation).  However, this has not been true for some time,
since Git 1.6.0 does not support the --porcelain option to `git status`.

Since Git 1.7.2 was the first version of Git to support filters with
`git blame`, was released almost five years ago (in July 2010), and is
even in Debian Squeeze, it seems like a good minimum version to require.
2015-01-27 21:26:51 -08:00
Andrew Ayer d5670c9552 Force Git to check out files by touching their mtimes
Starting with Git 2.2.2, `git checkout -f HEAD` no longer checks out
files if their mtimes haven't changed.  This causes files to remain
encrypted in the work tree after running `git-crypt unlock`, and to
remain decrypted after running `git-crypt lock`'.

To fix this, git-crypt now figures out what files are encrypted (by
checking `git check-attr` on every file output by `git ls-files`),
touches those files, and then runs `git checkout` on them.
2015-01-27 21:15:07 -08:00
Andrew Ayer 2d2053296f Fix placement of quotes in an error message 2015-01-27 21:06:29 -08:00
Andrew Ayer 216aa27009 Add helper function to get attribute name for a given key 2015-01-27 21:04:58 -08:00
Andrew Ayer 02c52ab21a Disable message about unimplemented ls-gpg-users command 2015-01-27 21:04:22 -08:00
Andrew Ayer 849401d733 Update for git-crypt 0.4.1 2015-01-07 20:23:28 -08:00
Andrew Ayer 12881f65fd Add 'git-crypt version' command 2015-01-07 20:23:07 -08:00
Andrew Ayer b7c608da25 Add .gitattributes file to .git-crypt dir to prevent encryption
Previously, if you had a .gitattributes file in the root of your
repository that matched `*`, the files under .git-crypt would also be
encrypted, rendering the repository un-decryptable, unless you explicitly
excluded the .git-crypt directory, which was easy to overlook.

Now, `git-crypt add-gpg-user` automatically adds a .gitattributes file
to the .git-crypt directory to prevent its encryption.

IMPORTANT: If you are currently using GPG mode to encrypt an entire
repository, it is strongly advised that you upgrade git-crypt and then
do the following to ensure that the files inside .git-crypt are stored
properly:

 1. Remove existing key files: `rm .git-crypt/keys/*/0/*`
 2. Re-add GPG user(s): `git-crypt add-gpg-user GPG_USER_ID ...`
2015-01-02 10:35:57 -08:00
Andrew Ayer 9cb1ad3c33 Add some helpers for getting paths to state directories 2015-01-02 10:30:47 -08:00
Andrew Ayer 1b1715b5ec README: use https URLs for mailing lists 2014-11-26 09:42:10 -08:00
Andrew Ayer 2b0cc1b5ac Update README, NEWS, write release notes for 0.4 2014-11-16 17:29:17 -08:00
Andrew Ayer 3d53bce1a8 Add .gitattributes file to ignore .git files when creating archive 2014-11-16 17:29:09 -08:00
Andrew Ayer be237fe27d Fix formatting in NEWS.md 2014-11-16 17:25:02 -08:00
Andrew Ayer 6520746bce Update 'git-crypt help' message
Documented new arguments to 'git-crypt migrate-key' and adjusted spacing.
2014-11-15 20:31:01 -08:00
Andrew Ayer 3bf7d8e512 migrate-key: take separate arguments for old key and new key
I don't want to encourage people to overwrite their old keys
until they've successfully unlocked their repository with the
migrated key.
2014-11-15 20:30:35 -08:00
Andrew Ayer bd262f6126 Add documentation for multiple keys 2014-11-15 18:06:36 -08:00
Andrew Ayer cf990dc9df Minor formatting updates to README 2014-11-15 18:06:23 -08:00
Andrew Ayer e70d067b48 Rearrange a couple paragraphs in the README 2014-09-21 12:00:31 -07:00
Andrew Ayer 4796a1e288 Clarify some wording in README 2014-09-21 12:00:31 -07:00
Andrew Ayer e4d1091e97 Rename add-gpg-key command, etc. to add-gpg-user, etc.
While writing the documention, I found that "GPG user" was less confusing
terminology than "GPG key," since you aren't really adding a "key"
to git-crypt, and git-crypt already uses "key" to refer to other concepts
(cf. the -k/--key-name options).
2014-09-21 12:00:31 -07:00
Andrew Ayer 04906c5355 Write a usage message for every command
You can run 'git-crypt help COMMAND' to see it.
2014-09-21 12:00:31 -07:00
Andrew Ayer 24fff1ce6f Document experimental Windows support 2014-09-21 12:00:31 -07:00
Andrew Ayer acc3d2ecb3 Fix capitalization of git-crypt in INSTALL.md 2014-09-21 12:00:31 -07:00
Andrew Ayer 9e340b510d Document GPG mode in README 2014-09-21 12:00:31 -07:00
Andrew Ayer 0538d111fc Usage message: refer to gpg key argument as "user ID" not "key ID"
This is the terminology that the gpg man page uses.
2014-09-21 12:00:31 -07:00
Andrew Ayer 746bb5def3 Remove unlink_internal_key function
I think it's simpler this way.
2014-09-21 12:00:31 -07:00
Andrew Ayer 16c4a827c0 Error message if you try to lock repository that's not locked 2014-09-21 12:00:31 -07:00
Andrew Ayer 3799a23aa7 Add missing argument when throwing System_error 2014-09-21 12:00:31 -07:00
Andrew Ayer e9e90fc873 For consistency, always use NULL internally to represent the default key 2014-09-21 12:00:31 -07:00