[英]Incremental backups with git bundle, for all branches
使用git bundle
對git存儲庫進行增量備份的最簡單方法是什么?
如果我只想備份一個分支,我可以沿着這些方向做一些事情:
git bundle create foo last-backup..master
git tag -f last-backup master
但是如果我想備份所有內容(包括所有分支)呢?
要回答評論中的問題:
嚴格地說,只要解決方案滿足以下屬性,我就不需要使用通常的Git包:
每個增量備份都是一個文件。 我可以將它存儲在某個地方,后續的增量備份不需要修改此文件。
文件大小約等於自上次備份以來Git提交的總大小。 二進制文件的更改也可以有效地存儲。
從那時起,完整備份+所有增量備份包含自動重建存儲庫所需的所有內容,包括所有分支。
(作為一個簡單的例子,簡單地在git存儲庫中構建一個包含最近更改過的文件的tar存檔,如果發生自動垃圾收集,則無法滿足第二個要求。)
理想情況下,我還希望有一個防止白痴的系統:
如果我只需要處理一個分支,Git捆綁包就能很好地滿足這一切。
(我們與Jukka討論了這個問題,這是結果。)
預賽:
backup.bundle
backup.bundle
的遠程backup
進行備份:
git fetch backup
- 只是為了確保我們是最新的 git bundle create newbackup.bundle ^backup/A ^backup/BABC
refs/remotes/backup/
生成所需的^backup/A
style參數很容易 A
風格的參數來自refs/heads
newbackup.bundle
復制到您保留備份的位置 newbackup.bundle
替換backup.bundle
,以便知道從哪里開始下一次增量備份 恢復:
git remote rm recovery
git remote add recovery <name-of-bundle>
git fetch recovery
- 你需要命名遙控器才能工作 refs/remotes/backup
提供每個分支 嘗試使用--since和--all。
創建第一個備份:
git bundle create mybundle-all --all
進行增量備份:
git bundle create mybundle-inc --since=10.days --all
增量應包含過去10天內發生的所有分支上的所有提交。 確保--since參數回溯得足夠遠,否則您可能會錯過提交。 如果在該時間范圍內沒有發生任何提交,Git也將拒絕創建捆綁包,因此請做好計划。
你可以做到
git clone --mirror <your_repo> my-backup.git
它會創建一個包含所有引用的裸倉庫。
然后你可以定期做git push --mirror <my-backup>
。
似乎opqdonut解決方案不起作用,導致^ backup / A ^ backup / B僅指向上次增量備份。 實際上,需要從之前的所有增量備份中排除引用。
需要為以前的每個捆綁包創建遠程數據庫。
UPD:不,它應該有效,請參閱下面的Jukka評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.