如果多個用戶訪問基於SVN的文件庫同時提交很多事情,SVN可以保證數據的完整性嗎?如果是,如何?或者,如果它不是我應該用於多用戶情況的服務方法?可以基於文件的SVN存儲庫支持同時多用戶情況嗎?
回答
Subversion提交被設計爲原子。因此,多個用戶在同一時間提交相同的版本號是不可能的。來自subversion book:
svn commit操作將任意數量的文件和目錄的更改發佈爲單個原子事務。在您的工作副本中,您可以更改文件的內容;創建,刪除,重命名和複製文件和目錄;然後提交一組完整的更改作爲原子事務。
通過原子事務,我們的意思是簡單的:或者所有的變化發生在倉庫中,或者它們都不會發生。 Subversion試圖在面對程序崩潰,系統崩潰,網絡問題和其他用戶的操作時保持這種原子性。
每次存儲庫接受提交時,都會創建一個稱爲修訂的文件系統樹的新狀態。每個修訂版都分配有一個唯一的自然數,比先前版本的數字大一個。新創建的版本庫的初始版本編號爲0,並且只包含一個空的根目錄。
從Subversion書://方案:
Subversion版本庫可以同時在其上存儲庫所在使用攜帶文件的URL在同一臺機器上運行的客戶端訪問。但是典型的Subversion設置涉及到一臺單獨的服務器機器,可以通過辦公室內的計算機上的客戶端訪問 - 或者可能遍佈全球。
有幾個問題與file://
方案:
- 它必須是在同一臺服務器上。有人將存儲庫放在Windows共享或NFS驅動器上,然後讓人們安裝共享並使用
file://
方案。這不起作用。它必須位於同一臺機器上才能使file://
訪問方案正常工作。 - 這是不安全的。這是最大的問題。所有用戶必須對存儲庫中的文件具有讀/寫權限,這意味着有人可以刪除存儲庫或使用Subversion背後的文件。
- 使用
svn://
和http://
並不是很難設置。我使用Subversion作爲我自己的個人版本控制系統,並使用svn://
方案。顛覆與http://
稍微更多的參與,但我可以在大約一個小時內可靠地做到這一點。
只是爲了分享我過去的經驗。
我的公司在SVN上託管了一個項目。最初開發團隊使用file://協議訪問SMB共享捲上的存儲庫。老實說,它似乎工作正常。然而,表現簡直太糟糕了。當我說可怕的時候,就好像花更多的時間來分享更新/提交。此外,我認爲你可以看到來自不同來源或參考的類似聲明:file://協議僅針對本地機器上的單用戶訪問。
當我參與項目時,我立即改用svnserve來實現多用戶訪問的臨時策略(雖然我個人使用http來管理其他svn倉庫)。我們立即看到了數量級的性能改善。設置的額外時間僅需2分鐘(因爲我們有一臺服務器,我可以簡單地以控制檯模式啓動svnserve並保持運行狀態)。除非你真的不能安排任何機器來運行svnserve/apache,否則我看不到有任何理由堅持使用file://協議來實現多用戶訪問。
- 1. 我可以擁有一個屬於多個SVN存儲庫的文件夾嗎?
- 2. 基於網絡的基於文件的SVN存儲庫
- 3. Git-svn可用於大型分支存儲庫嗎?
- 4. 我可以在SVN客戶端中使用GIT存儲庫嗎?
- 5. 可以將相同的文件提交到2個SVN存儲庫嗎?
- 6. 多站點SVN存儲庫複製 - 基於時間
- 7. 是否可以同時使用同一個存儲庫的多個分支?
- 8. Rails 2.3是否支持基於文件的會話存儲?
- 9. SVN。存儲庫文件夾
- 10. 您可以防止Xcode 4忽略SVN存儲庫中的.a文件嗎?
- 11. 可以Sharepoint文檔庫支持文件夾版本控制嗎?
- 12. Can Twilio可以支持40多個用戶的會議嗎?
- 13. Nodejs&Socket.io可以支持多少用戶?
- 14. IIS可以支持多少用戶?
- 15. 你可以像存檔一樣訪問svn轉儲文件嗎?
- 16. 多個用戶可以同時提交給SVN嗎?線程安全嗎?
- 17. 我可以跟蹤一個具有多個分支目錄的svn存儲庫
- 18. SVN可以同步MySQL數據庫嗎?
- 19. 我可以使用本地跟蹤git-svn分支來恢復SVN存儲庫中丟失的提交嗎?
- 20. MS Access 2007可以支持多用戶環境嗎?
- 21. 保持兩個文件在同一個SVN存儲庫中同步?
- 22. Android可以支持dp小於1dp嗎?
- 23. 爲SVN用戶推薦的Mercurial存儲庫/文件夾結構
- 24. 您可以使用分支存儲庫中的分支作爲Github PR針對上游的基本分支嗎?
- 25. bintray支持p2存儲庫
- 26. SQL Server CE可以同時支持來自不同pc的多個連接嗎?
- 27. Apache2 svn多個存儲庫
- 28. 如何從git-svn中恢復在存儲庫中放置不同的基於文件的dulplicate文件?
- 29. svn:刪除存儲庫中的文件
- 30. 我可以在不克隆存儲庫的情況下在Mercurial中進行分支嗎?
其實我在想:「原子」是否意味着多用戶安全?我認爲我們可以使操作成爲原子操作(即,存儲庫不會處於半完成操作狀態),但對於併發訪問仍然不安全。 (儘管我相信在Subversion中它仍然是安全的,但我對使用「原子性」來推理「多用戶安全」只是有點懷疑。 –