使用现有文件初始化 gix-annex 附加存储库

gio*_*ele 6 git-annex

我配置了 git-annex 来跟踪包含几 GB 数据的目录。它的内容在 S3 遥控器上复制,因此我可以删除一些文件以释放一些空间,并在需要时取回它们。

我还有另一台电脑,我想做同样的事情。这台另一台计算机已包含存储在 S3 远程服务器上的大部分文件。

如何告诉 git-annex 在另一台计算机上初始化一个新存储库,而无需从 S3 下载它可以在本地目录中找到的文件?

Van*_*pps 4

编辑 2015-04-30:

anarcat 为这个用例编写了一个指南,他将其发布在这个答案的评论中。

编辑2013年5月31日:

感谢接受!gioele 在评论中指出,这reinject在直接模式 gitannex 存储库中不起作用,这是有道理的,并且有点让我的回答失去了意义。slm 使用 找到了一种替代方法git annex add,看起来 gioele 也采用了这种方法。查看 slm 的答案以获取更多信息。

原来的

没听说过 git 附件;这是一个很酷的工具!

好的,根据我在 gitannex网站上读到的内容,在新计算机上,您可以git clone从 S3 存储库执行此操作,而且不会很昂贵,因为它只是复制符号链接。然后像往常一样cd进入其中,git annex init <reponamehere>让 git 附件知道该存储库。

据我了解,您要做的棘手的事情是让 gitannex 知道该机器的存储库数据的本地副本。我在其手册页上找到了一个命令,reinject我认为它可以做你想做的事情:

git annex reinject /path/to/files/* /path/to/repo
Run Code Online (Sandbox Code Playgroud)

您可能想要添加一个--fast选项,该选项可能会禁用由reinject. 这当然有点危险,甚至可能行不通:尚不清楚是否reinject接受--fast。

find另外,如果您想要的文件reinject比单个目录更复杂,您可能需要某种单行代码。就像是:

find /path/to/files/* -type f -exec bash -c 'echo $1 "/path/to/repo/${1#/path/to/files}"' -- '{}' \;
Run Code Online (Sandbox Code Playgroud)

(我认为)那个将回显每个文件的路径,同时回显存储库中被剥离的/path/to/files目标路径。运行后/path/to/files替换echo为,并且您确定输出符合您的预期。与 结合git annex reinject使用会带来巨大的力量和巨大的责任:)findbash -c

资料来源:从事数据分析工作,涉及大量文件批处理操作,并且非常喜欢 git。