[英]Mirroring repository via fileserver
是否可以通過將更改發布到“啞”文件服務器並在另一端重新組裝它來鏡像存儲庫(在您選擇的SVN,Git,Hg等中)?
可能的擔憂包括
例如,我理解svn diff > r1.patch
意味着你丟失了二進制文件,因為SVN並沒有設計包含它們。
注意:這不是在文件服務器上放置存儲庫(除非有辦法在不上傳整個存儲庫文件的情況下執行此操作),因為我們正在嘗試最小化帶寬。 此外,存儲差異而不是存儲庫意味着可以進行加密。
是的,這是可能的
svn diff -c N --git PATH > PATCH.N
)制作git-patch; svn patch PATCH.N <WCPATH>
); 單變換交換 (對於合並集也不好)
hg export -g -r N -o %b-%r.patch
)(- hg export -g -r N -o %b-%r.patch
with filename,用於一個目錄中的hg export -g -r N -o %b-%r.patch
存儲的情況); hg import --exact -s 100 FILENAME.patch
)。 范圍集交換
束
hg bundle --base parent(N) --rev N::M NM.hg
); hg unbundle -u NM.hg
)。 出口
hg export -o %b-%r.patch -r N::M
)(文件名為“repobasebame-revno.patch”的補丁集); 對於git
有bundle
命令。 它創建了給定修訂版的二進制存檔。 您可以將每個歷史記錄放入捆綁包中,每次提交或一堆,復制到文件服務器,然后還原到存儲庫。
git bundle create file.name revisions..list
- 用於創建bundle的命令。
git bundle unbundle file.name
- 恢復修訂的命令。
定義,你應該按時間順序為你的捆綁命名,不要混淆它們。
它適用於git
,據我記得, hg
也有bundle
命令。 這是繪制它時的方法。
另一種方法可能是在您的Dropbox文件夾中init
新的中間存儲庫,然后從主存儲庫推送您的提交,讓Dropbox將其與鏡像同步。 但是,在這種情況下,只有在Dropbox同步完成后才能進入鏡像存儲庫。 否則數據可能不一致,因為git使用大量小文件來保存存儲庫內容。 通過打包存儲庫內容可以避免這種行為。 但是,如果你在安全方面做什么,捆綁方法將最適合你...
編輯 :重新調整svn
我最近得到了另一條線索。 如果對於git
和hg
你可以使用標准備份方法來實現你需要的,為什么你可以嘗試svn
的標准備份方法,如本問答所述?
svnadmin dump repositorypath -r LO_REV:HI_REV > backupname.svn
備份修訂版。
svnadmin load repositorypath < backupname.svn
以恢復數據。
有沒有理由你不只是像github那樣使用存儲庫托管? 這將使帶寬最小化,因為git只會推動差異。
git在發送所需的差異方面做得非常好,所以根本不需要這樣做。 mercurial(hg)也是如此,如果bzr沒有,我會非常驚訝。 顯然,像svn或cvs這樣的集中式VCS沒有。 只有在存在其他限制的情況下,您的運送到文件服務器才有意義(如果有,我們需要了解它們才能真正提供幫助)。
您也可以使用rsync(1)來復制存儲庫,但是在這種情況下,您不能指望VCS確保沒有人看到半更新的東西,如果你這樣做的話要非常小心。 一般情況下(除了bzr)你可以,例如,備份和恢復其他地方的存儲庫,它應該工作正常。
在任何情況下, 永遠不要盲目相信隱藏在有缺失位的彩色方塊背后的人會告訴你...檢查自己,閱讀文檔,尋找推薦的做法,並進行一些實驗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.