Added a comment: Indeed git annex fsck can take into account objects manually placed into .git/annex/objects

This commit is contained in:
https://launchpad.net/~stephane-gourichon-lpad 2017-07-28 05:03:30 +00:00 committed by admin
parent 48c98fbe93
commit 14b40c79c7

View file

@ -0,0 +1,84 @@
[[!comment format=mdwn
username="https://launchpad.net/~stephane-gourichon-lpad"
nickname="stephane-gourichon-lpad"
avatar="http://cdn.libravatar.org/avatar/02d4a0af59175f9123720b4481d55a769ba954e20f6dd9b2792217d9fa0c6089"
subject="Indeed git annex fsck can take into account objects manually placed into .git/annex/objects"
date="2017-07-28T05:03:30Z"
content="""
Thanks @CandyAngel. This is similar to wat I'm doing and somehow validates.
I'm trying to repair on the same filesystem without long recopy.
I don't understand why your solution is specific to v5 indirect mode.
# Indeed git annex `fsck` can take into account objects manually placed into `.git/annex/objects`.
Let's create a repo:
mkdir repo1
cd repo1/
ls -al
git init
git annex init repo1
ls -a
ls -al
echo 1 > 1
git annex add 1
git annex sync
git annex fsck
git annex repair --verbose
Everything is fine.
Let's say this repo has its git structures broken and we rebuild it from checked-out tree and `.git/annex/objects`. We'll lose tree history and location tracking history but recover content.
cd ..
mkdir repo2
cd repo2
git init
git annex init repo2
Ok we have an empty repo. Let's import tree.
cp -al ../repo1/* .
ls -al
git annex add .
git annex repair --verbose
Running git fsck ...
No problems found.
ok
Notice that `git annex repair` does not care about annexed objects, only history data.
git annex fsck
But `fsck` notices about missing objects.
fsck 1
** No known copies exist of 1
failed
(recording state in git...)
git-annex: fsck: 1 failed
So, in a sense, `git annex fsck` and `git annex repair` operate on nearly independent things.
Let's get annexed objects back.
ls -al # red shows symlink is broken
cp -al ../repo1/.git/annex/objects/ .git/annex/
find .git/annex/objects/
ls -al # grey shows symlink is okay
git annex fsck
Hooray, `fsck` notices that objects are back.
fsck 1 (fixing location log) (checksum...) ok
(recording state in git...)
# Conclusion
I can use approach (1). Extra benefit: it will notice if some files got corrupted on the filesystem.
Approach (2) would mean, if any file was corrupted on the filesystem, it would have been considered the correct content, and I'd prefer to avoid that.
"""]]