如何確定自上一個git包創建以來是否提交了更改,而無需創建工作存儲庫,循環每個分支並記錄每個頭修訂?如何確定上游git存儲庫何時被修改 - 用於創建備份
我在GIT中發現的一個短暫下降是在企業中使用的適當備份支持。企業與開源開發的不同之處在於,總是存在1)權威的存儲庫和2)處理大量數據的備份系統。因此,1)非常頻繁地備份以及2)僅在存在新的更改時才運行備份過程。我的問題是找到#2的解決方案。
我使用git bundle
來創建我的檔案,但我沒有找到一個確定的方法來確定自上次備份以來是否提交了新的更改。
我一直在試圖找到git rev-list
的選項組合來列出自上次捆綁包後的新提交標識符,但一直不成功。關於這一主題的查詢顯示用寫的很不錯backup script:
git -C "${path}" rev-parse --short=10 HEAD
標記與提交ID捆綁。該解決方案不足以描述git存儲庫的快照,因爲其他分支可能已經更新,使上游存儲庫的HEAD修訂版本保持不變。
我看過使用--max-age=<lastbackup epoch>
,但很快發現它可能讓開發人員在備份運行後推送舊的更改,並且由於提交的日期不會更改,結果是它們比最後的備份日期,因此備份不會被觸發。
最好的辦法我至今是:
git -C ${repo} rev-list -a --branches ${prev_commit}..HEAD
它確實從其他部門獲取新版本,但將繼續即使在較新的報告對其他部門提交的修訂已經到頭上畫了。
我還沒有開始關注增量備份,但我已經看到爲了驗證一個,我需要創建和管理工作存儲庫,因爲我更願意在服務器上維護裸存儲庫。
另外我會注意到,我還沒有找到一個選項來git分支去除「*」,所以它只會給我一個清晰的腳本分支列表。
其他企業如何備份其存儲庫?
你在使用Git提供程序,如GitHub或Bitbucket嗎?這些都將您的數據備份到幕後AFAIK。 –
沒有評論備份策略,我會注意到'git rev-list'是錯誤的工具。使用'git for-each-ref'來獲取一些或全部引用的當前值。 – torek
@TimBiegeleisen使用服務提供商不是一種選擇。認爲企業,IP等 –