我配置了 git-annex 来跟踪包含几 GB 数据的目录。它的内容被复制到 S3 遥控器上,因此我可以删除一些文件以释放一些空间,并在需要时将它们取回。
我还有另一台计算机,我想做同样的事情。这台计算机已包含存储在 S3 远程上的大部分文件。
如何告诉 git-annex 在另一台计算机上初始化一个新存储库,而不从 S3 下载它可以在本地目录中找到的文件?
答案1
编辑 2015-04-30:
anarcat 写了一个指导对于他在这个答案的评论中发布的这个用例。
编辑2013年5月31日:
感谢接受! gioele 在评论中指出,这reinject
在直接模式 gitannex 存储库中不起作用,这是有道理的,并且有点让我的回答失去了意义。 slm 使用 找到了一种替代方法git annex add
,看起来 gioele 也采用了这种方法。查看 slm 的答案以获取更多信息。
原来的
没听说过 git 附件;这是一个很酷的工具!
好的,从我在 git 附件上读到的内容来看网站,在新计算机上,您可以git clone
从 S3 存储库执行此操作,并且不会很昂贵,因为它只是复制符号链接。然后像往常一样cd
进入其中,git annex init <reponamehere>
让 git 附件知道该存储库。
据我了解,您要做的棘手的事情是让 gitannex 知道该机器的存储库数据的本地副本。我在其手册页上找到了一个命令,reinject
我认为它可以做你想做的事情:
git annex reinject /path/to/files/* /path/to/repo
您可能想要添加一个--fast
选项,该选项可能会禁用由reinject
.这当然有点危险,甚至可能行不通:尚不清楚是否reinject
接受--fast
。
find
另外,如果您想要的文件reinject
比单个目录更复杂,您可能需要某种单行代码。就像是:
find /path/to/files/* -type f -exec bash -c 'echo $1 "/path/to/repo/${1#/path/to/files}"' -- '{}' \;
(我认为)那个将回显每个文件的路径,同时回显存储库中被剥离的/path/to/files
目标路径。运行后/path/to/files
替换echo
为,并且您确定输出符合您的预期。与 结合git annex reinject
使用会带来巨大的力量和巨大的责任:)find
bash -c
资料来源:从事数据分析工作,涉及大量文件批处理操作,并且非常喜欢 git。
答案2
我向 git-annex 的开发者询问您的问题在他们的论坛上。这是我/你的问题:
我有一个关于设置新存储库的问题。是否可以使用我的笔记本电脑上已有的本地文件来初始化新的存储库,而不是从 S3 远程存储库下载它们?如果不清楚,抱歉。但我正在尝试利用笔记本电脑上的本地文件,这样我就不必经历从 S3 下载它们的痛苦。
我还应该提到的是,与 S3 存储库中已有的文件相比,我在笔记本电脑本地没有完整的所有文件集。
的作者git-annex
Joey 表示,您可以使用以下选项之一:
- 用于
git annex reinject
输入特定文件。 - 将所有本地文件签入临时目录。要么是git-annex 助手或者手册
git annex add
会注意到这些文件是否与存储库中已有的文件具有相同的内容。然后,这些文件将在两个位置可用:临时目录以及之前签入存储库的位置。然后您可以删除临时目录。