diff --git a/doc/todo/union_mounting/comment_4_2f02fe00a84bf94b7c8e437d8b80293f._comment b/doc/todo/union_mounting/comment_4_2f02fe00a84bf94b7c8e437d8b80293f._comment new file mode 100644 index 0000000000..009355299d --- /dev/null +++ b/doc/todo/union_mounting/comment_4_2f02fe00a84bf94b7c8e437d8b80293f._comment @@ -0,0 +1,67 @@ +[[!comment format=mdwn + username="chkno@50332f55d5ef2f4b7c6bec5253b853a8f2dc770e" + nickname="chkno" + avatar="http://cdn.libravatar.org/avatar/8194377c81da838dda761a5d93b9c25c" + subject="Interim shell script" + date="2020-02-04T07:26:10Z" + content=""" +Until this feature is available in git annex proper, here is a small shell script that uses [lndir](https://gitlab.freedesktop.org/xorg/util/lndir) to create a merged view of the .git/annex/objects areas of multiple git-annex repositories. + +* [union-link-annexes](https://chkno.net/union-link-annexes) + +Demo: + + $ git init repo1 + $ cd repo1 + $ git annex init repo1 + $ echo from1 > from1 + $ echo both > both + $ git annex add from1 both + $ git commit -m . + + $ cd .. + $ git clone repo1 repo2 + $ cd repo2 + $ echo from2 > from2 + $ git annex add from2 + $ git annex copy --from origin both + $ git annex sync + $ git annex list + here + |origin + || + XX both + _X from1 + X_ from2 + + $ cd ../repo1 + $ git annex sync + $ cd .. + + + $ union-link-annexes merged repo1 repo2 + + + $ grep . repo1/* + repo1/both:both + repo1/from1:from1 + grep: repo1/from2: No such file or directory + + $ grep . repo2/* + repo2/both:both + grep: repo2/from1: No such file or directory + repo2/from2:from2 + + $ grep . merged/* + merged/both:both + merged/from1:from1 + merged/from2:from2 + + $ find merged -not -type d -printf '%p -> %l\n' + merged/both -> .git/annex/objects/XV/zk/SHA256E-s5--f6d... + merged/from1 -> .git/annex/objects/vf/8W/SHA256E-s6--16e... + merged/from2 -> .git/annex/objects/3M/P2/SHA256E-s6--21e... + merged/.git/annex/objects/vf/8W/SHA256E-s6--16e... -> ../../../../../../../repo1/.git/annex/objects/vf/8W/SHA256E-s6--16e... + merged/.git/annex/objects/XV/zk/SHA256E-s5--f6d... -> ../../../../../../../repo1/.git/annex/objects/XV/zk/SHA256E-s5--f6d... + merged/.git/annex/objects/3M/P2/SHA256E-s6--21e... -> ../../../../../../../repo2/.git/annex/objects/3M/P2/SHA256E-s6--21e... +"""]]