使用現有文件初始化 gix-annex 附加 repo
我配置了 git-annex 來跟踪包含幾 GB 數據的目錄。它的內容被複製到 S3 遙控器上,因此我可以刪除一些文件以釋放一些空間,並在需要時將它們取回。
我還有另一台電腦,我想做同樣的事情。這台其他電腦已經包含儲存在 S3 遙控器上的大部分文件。
我如何告訴 git-annex 在另一台電腦上初始化一個新的儲存庫,而不從 S3 下載它可以在本地目錄中找到的文件?
編輯 2015-04-30:
anarcat 為這個案例編寫了一個指南,他在這個答案的評論中發布了該指南。
編輯 2013-05-31:
感謝接受!gioele 在評論中指出,
reinject
在直接模式的 git 附件儲存庫中不起作用,這是有道理的,並且有點讓我的回答不屑一顧。slm 找到了一種替代方法 usinggit annex add
,看起來 gioele 也採用了這種方法。查看 slm 的答案以獲取更多資訊。原來的
沒聽說過git附件;這是一個很酷的工具!
好的,根據我在 git Annex網站上閱讀的內容,在新電腦上您可以
git clone
從 S3 儲存庫中進行操作,並且不會很昂貴,因為它只是複制符號連結。然後像往常一樣cd
進入它,git annex init <reponamehere>
讓 git 附件知道 repo。據我了解,您嘗試做的棘手的事情是讓 git Annex 知道該機器的回購數據的本地副本。我在它的手冊頁上找到了一個命令
reinject
,我認為它會做你想做的事:git annex reinject /path/to/files/* /path/to/repo
您可能需要添加
--fast
可能禁用“fsck”(git 附件對文件校驗和的術語)的選項,該選項由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。