Git-Annex

使用現有文件初始化 gix-annex 附加 repo

  • April 30, 2015

我配置了 git-annex 來跟踪包含幾 GB 數據的目錄。它的內容被複製到 S3 遙控器上,因此我可以刪除一些文件以釋放一些空間,並在需要時將它們取回。

我還有另一台電腦,我想做同樣的事情。這台其他電腦已經包含儲存在 S3 遙控器上的大部分文件。

我如何告訴 git-annex 在另一台電腦上初始化一個新的儲存庫,而不從 S3 下載它可以在本地目錄中找到的文件?

編輯 2015-04-30:

anarcat 為這個案例編寫了一個指南,他在這個答案的評論中發布了該指南。

編輯 2013-05-31:

感謝接受!gioele 在評論中指出,reinject在直接模式的 git 附件儲存庫中不起作用,這是有道理的,並且有點讓我的回答不屑一顧。slm 找到了一種替代方法 using git 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剝離。執行後替換echogit annex reinject,並且您確定輸出正在執行您想要的操作。find結合使用帶來bash -c巨大的力量和巨大的責任:)

資料來源:從事數據分析工作,涉及對文件進行大量的批處理操作,並且非常喜歡 git。

引用自:https://unix.stackexchange.com/questions/75557