Hi all, I've noticed an issue regarding the use of `git subtree add` and `git subtree pull` when the subtree repository's commit (either HEAD or whatever commit specified by the subtree command) is signed with GPG. It seems to work properly if the commit is not signed but previous commits are. The gist of the issue is that `git subtree add` does not add the subree properly and a "fatal: Not a valid object name" error is thrown. Running `git subtree pull` does not pull any upstream changes after that ("'subtree' was never added"). I have not done extensive testing, however, below are instructions to reproduce the issue. This was tested using git version 2.15.1 installed via Homebrew on MacOS. I did not test with the built-in version of git on MacOS. Thanks, Steve # Create a new repository mkdir repoA && cd repoA git init echo "Test File in Repo A" > FileA git add -A && git commit -m 'Initial commit in repo A' # Create a second repository cd .. && mkdir repoB && cd repoB git init echo "Test File in Repo B" > FileB git add -A && git commit -m 'Initial commit in repo B' # Create a signed commit in repo B echo "Signed Commit" >> FileB git commit -a -S -m 'Signed commit in repo B' # Now, add repoB as a subtree of RepoA cd ../repoA git subtree add --prefix repoB_subtree/ ../repoB/ master --squash # Output: git fetch ../repoB/ master warning: no common commits remote: Counting objects: 6, done. remote: Compressing objects: 100% (2/2), done. remote: Total 6 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (6/6), done. >From ../repoB * branch master -> FETCH_HEAD fatal: Not a valid object name gpg: Signature made Sat Jan 6 17:38:31 2018 EST gpg: using RSA key 6900E9CFDD39B6A741D601F50999759F2DCF3E7C gpg: Good signature from "Stephen Robert Guglielmo (Temple University Computer Services) <srg@xxxxxxxxxx>" [ultimate] Primary key fingerprint: 6900 E9CF DD39 B6A7 41D6 01F5 0999 759F 2DCF 3E7C 4b700b1a4ebb9e2c1011aafd6b0f720b38f059a4 # Note, git exits with status 128 at this point. # FileB was in fact added and staged to repoA, despite the "fatal" above. Commit it: git commit -m 'Add repoB subtree' # Ok, let's make another commit in repoB and try a `subtree pull` instead of `subtree add` cd ../repoB echo "Another Line" >> FileB git commit -a -S -m 'Another signed commit' cd ../repoA git subtree pull --prefix repoB_subtree/ ../repoB master --squash # Output: warning: no common commits remote: Counting objects: 9, done. remote: Compressing objects: 100% (3/3), done. remote: Total 9 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. >From ../repoB * branch master -> FETCH_HEAD Can't squash-merge: 'repoB_subtree' was never added. # Note, git exits with status 1 at this point. # RepoB's third commit ('Another signed commit') is not pulled into the subree in repo A. # This can be verified by running a diff: diff -qr --exclude ".git" repoB_subtree ../repoB # Output: Files repoB_subtree/FileB and ../repoB/FileB differ