[BUG] `git gc` or `git pack-refs` wipes all notes for `git notes` command
- From
- Andrew Hlynskyi <ahlincq@gmail.com>
- Date
- Jan 3, 2023, 03:22 UTC
- Message-ID
- <CAAYtLELp4v=id-UUdGT+BoCxLuTV05Z0fFMQmPfd3Mt-yXJ9Tw@mail.gmail.com>
Steps to reproduce: 1. Create some notes with the `git notes add` command. 2. Run `git notes` to list stored notes. 3. Run any of `git gc --prune=now` or `git pack-refs --all` commands. 4. Run `git notes` again and see that there are no more seen notes.
The reason is that all commands like `git notes` or `git log --notes` expect to find notes head as unpacked ref in .git/refs/notes/commits. But the gc or the pack-refs command packs .git/refs/notes/commits ref into .git/packed-refs file.
It's possible to restore the notes ref with a shell script like:
```
fix-notes-unpack-commits-ref(){
local hash path
grep refs/notes/commits .git/packed-refs |\
while read hash path; do
path=".git/$path"
mkdir -p "$(dirname "$path")"
echo -n "$hash" > "$path"
done
}
```
Or, fortunately, from another backup place: .git/logs/refs/notes/commits.The expected behavior is that `git notes` and `git log` should work also with notes ref stored in the .git/packed-refs file and also respect that the `git notes` command can store notes with a custom ref by using the `--ref` option.
Yours sincerely, Andrew