### 支持多種版本庫訪問方法
你已經看到了一個版本庫可以用多種方式訪問,但是可以―或者說安全的―用幾種方式同時并行的訪問你的版本庫嗎?回答是可以,倘若你有一些深謀遠慮的使用。
在任何給定的時間,這些進程會要求讀或者寫訪問你的版本庫:
-
常規的系統用戶使用Subversion客戶端(客戶端程序本身)通過`file:///`URL直接訪問版本庫;
-
常規的系統用戶連接使用SSH調用的訪問版本庫的**svnserve**進程(以它們自己運行);
-
一個**svnserve**進程―是一個守護進程或是通過**inetd**啟動的―作為一個固定的用戶運行;
-
一個Apache **httpd**進程,以一個固定用戶運行。
最通常的一個問題是管理進入到版本庫的所有權和訪問許可,是前面例子的所有進程 (或者說是用戶)都有讀寫Berkeley DB的權限?假定你有一個類Unix的操作系統,一個直接的辦法是在新的`svn`組添加所有潛在的用戶,然后讓這個組完全擁有版本庫,但這樣還不足夠,因為一個進程會使用不友好的umask來寫數據庫文件―用來防止別的用戶的訪問。
所以下一步我們不選擇為每個版本庫用戶設置一個共同的組的方法,而是強制每個版本庫訪問進程使用一個健全的umask。對直接訪問版本庫的用戶,你可以使用**svn**的包裹腳本來首先設置**umask 002**,然后運行真實的**svn**客戶端程序,你可以為**svnserve**寫相同的腳本,并且增加**umask 002**命令到Apache自己的啟動腳本`apachectl`中。例如:
~~~
$ cat /usr/bin/svn
#!/bin/sh
umask 002
/usr/bin/svn-real "$@"
~~~
另一個在類Unix系統下常見的問題是,當版本庫在使用時,BerkeleyDB有時候創建一個新的日志文件來記錄它的東西,即使這個版本庫是完全由**svn**組擁有,這個新創建的文件不是必須被同一個組擁有,這給你的用戶造成了更多地許可問題。一個好的工作區應該設置組的SUID字節到版本庫的`db`目錄,這會導致所有新創建的日志文件擁有同父目錄相同的組擁有者。
一旦你跳過了這些障礙,你的版本庫一定是可以通過各種可能的手段訪問了,這看起來有點凌亂和復雜,但是這個讓多個用戶分享對一個文件的寫權限的問題是一個經典問題,并且經常是沒有優雅的解決。
幸運的是,大多數版本庫管理員不*需要*這樣復雜的配置,用戶如果希望訪問本機的版本庫,并不是一定要通過`file://`的URL―他們可以用`localhost`機器名聯系Apache的HTTP服務器或者是**svnserve**,協議分別是`http://`或`svn://`。為你的Subversion版本庫維護多個服務器進程,版本庫會變得超出需要的頭痛,我們建議你選擇最符合你的需要的版本庫,并且堅持使用!
**svn+ssh://服務器檢查列表**
讓一些用戶通過存在的SSH帳戶來共享版本庫而沒有訪問許可問題是一件很有技巧的事情,如果你為自己需要在(作為一個管理員)類Unix系統上做的事情感到迷惑,這里是一些快速的檢查列表,總結了本小節討論的事情:
-
所有的SSH用戶需要能夠讀寫版本庫,把所有的SSH用戶放到同一個組里,讓版本庫完全屬于這個組,設置組的權限是讀/寫。
-
你的用戶在訪問版本庫時需要使用一個健全的umask,確定**svnserve**(`/usr/bin/svnserve`或者是任何一個`$PATH`說明的位置)是一個設置了**umask 002**和執行真正的**svnserve**程序的包裹腳本,對**svnlook**和**svnadmin**使用相同的措施,或者是使用一個健全的umask運行或者是使用上面說明的包裹。
- 第1章介紹
- Subversion的歷史
- Subversion的特性
- Subversion的架構
- 安裝Subversion
- Subversion的組件
- 快速入門
- 第2章基本概念
- 版本模型
- Subversion實戰
- 摘要
- 第3章指導教程
- 導入
- 修訂版本: 號碼、關鍵字和日期,噢,我的!
- 初始化的Checkout
- 基本的工作周期
- 檢驗歷史
- 其他有用的命令
- 摘要
- 第4章分支與合并
- 使用分支
- 在分支間拷貝修改
- 常見用例
- 轉換工作拷貝
- 標簽
- 分支維護
- 摘要
- 第5章版本庫管理
- 版本庫的創建和配置
- 版本庫維護
- 添加項目
- 摘要
- 第6章配置服務器
- 網絡模型
- svnserve,一個自定義的服務器
- httpd,Apache的HTTP服務器
- 支持多種版本庫訪問方法
- 第7章高級主題
- 屬性
- Peg和實施修訂版本
- 外部定義
- 賣主分支
- 本地化
- Subversion版本庫URL
- 第8章開發者信息
- 使用API
- 進入工作拷貝的管理區
- WebDAV
- 使用內存池編程
- 為Subversion做貢獻
- 第9章Subversion完全參考
- svn add
- svn blame
- svn cat
- svn checkout
- svn cleanup
- svn commit
- svn copy
- svn delete
- svn diff
- svn export
- svn help
- svn import
- svn info
- svn list
- svn log
- svn merge
- svn mkdir
- svn move
- svn propdel
- svn propedit
- svn propget
- svn proplist
- svn propset
- svn resolved
- svn revert
- svn status
- svn switch
- svn update
- svnadmin
- svnadmin create
- svnadmin deltify
- svnadmin dump
- svnadmin help
- svnadmin hotcopy
- svnadmin list-dblogs
- svnadmin list-unused-dblogs
- svnadmin load
- svnadmin lstxns
- svnadmin recover
- svnadmin rmtxns
- svnadmin setlog
- svnadmin verify
- svnlook
- svnlook author
- svnlook cat
- svnlook changed
- svnlook date
- svnlook diff
- svnlook dirs-changed
- svnlook help
- svnlook history
- svnlook info
- svnlook log
- svnlook propget
- svnlook proplist
- svnlook tree
- svnlook uuid
- svnlook youngest
- svnserve
- svnversion
- mod_dav_svn Configuration Directives
- 附錄A.Subversion對于CVS用戶
- 目錄的版本
- 更多離線操作
- 區分狀態和更新
- 分支和標簽
- 元數據屬性
- 沖突解決
- 二進制文件和轉化
- 版本化的模塊
- 認證
- 轉化CVS版本庫到Subversion
- 附錄C.WebDAV和自動版本化
- 自動版本化交互性
- Subversion和DeltaV
- 術語表