一、前言
以前版本管理常用的軟件是微軟出品的vss和開源的cvs,svn是後來逐步發展起來的版本管理工具,根據對svn的介紹,svn是一些對cvs固有缺陷不滿意的開發者總結了一些cvs的不足進一步開發的版本工具。
如果對svn有進一步興趣,這裏有對svn的介紹:svn介紹資料
svn一樣是開源的,且有愈來愈流行的趨勢,不少新的項目基本上都使用了svn來作爲版本管理工具,因爲其開源,有不少人在開發相應的服務端和客戶端,從而有多種服務端和客戶端軟件可選; 相信因爲如此,axure纔會採用svn作爲版本管理的承載,因此纔會有基於svn server搭建axure共享項目的可能性。
svn的官方網址網址如下:svn官方網站
Axure RP所需要使用的是svn服務器,如果已經有搭建好的svn服務器,則可以直接使用,如果沒有,則需要搭建一個svn服務器。
這裏給出一個在windows下搭建svn服務器的示例,如果想要更多瞭解,則可以搜索svn相關的資料,svn服務器一樣可以在Linux下搭建。
二、windows下搭建svn server
在svn的官方網站提供了多種服務器端供選擇,選用了其中有gui界面的svn服務器VisualSvn,其官方地址如下:VisualSvn官方地址。
VisualSvn的服務器端是免費的,客戶端是收費的,我們目前只需要服務器端。
其安裝過程是標準的windows安裝過程,不再贅述。
1.主界面
2.Visual的屬性
3. 可以設置服務器端內容存放位置
4.可以設置密碼驗證方式,請選svn驗證方式
根據svn的官方介紹,其服務是基於apache的,安裝VisualSvn後已經直接可用了,由於已經安裝過apache,所以不確認是否一定要安裝apache;如果不能使用,請安裝apache,最好同時安裝php,因爲下面用戶自助修改密碼的功能是需要apache和php環境的。
簡便起見可以安裝架站套件xampp或appserv,其已經同時包含了apache和php。
三、svn server的用戶密碼管理
svn有自己的一套管理機制,關於權限、目錄訪問等,有興趣可以搜索相關資料,其默認情況下用戶的密碼是隻能管理員設置的,這點和cvs一樣非常不方便。
這裏謹根據網絡資料介紹如何爲用戶提供自助修改密碼的功能,其原理是通過apache可以調用系統命令的方式,通過調用系統命令修改用戶名密碼;通過basice認證關聯密碼文件的方式做用戶認證。
1.修改apache的conf目錄下的httpd.conf,在最後增加如下代碼。第一行的意思是設定一個http訪問的路徑svntools,以後會通過訪問http://localhost/svntools來訪問自助修改密碼的功能,後面幾行的設定訪問上述路徑時的驗證方式,設定爲必須需要輸入原用戶名和密碼驗證密碼成功後纔可以進行修改密碼的工作,其中密碼文件使用svn server的密碼文件htpasswd。
Alias /svntools "C:/Repositories/svntools" <Directory "C:/Repositories/svntools/"> allow from all Require valid-user AuthType Basic AuthName "Subversion Tools" AuthUserFile C:/Repositories/htpasswd </Directory>
2.在相應svn server目錄"c:/Repositories"中增加一個目錄svntools,在其中創建一個文件 index.php,內容如下(需要根據實際情況修改相應目錄),對於Linux適當修改也可以使用。
<? /* Alias /svnmodify "E:/svn/" <Directory "E:/svn/"> Require valid-user AuthType Basic AuthName "Subversion Tools" AuthUserFile e:/svn/config/htpasswd.conf </Directory> */ ?> <? $username = $_SERVER["PHP_AUTH_USER"]; //經過 AuthType Basic 認證的用戶名 $authed_pass = $_SERVER["PHP_AUTH_PW"]; //經過 AuthType Basic 認證的密碼 $input_oldpass = (isset($_REQUEST["oldpass"]) ? $_REQUEST["oldpass"] : ""); //從界面上輸入的原密碼 $newpass = (isset($_REQUEST["newpass"]) ? $_REQUEST["newpass"] : ""); //界面上輸入的新密碼 $repeatpass = (isset($_REQUEST["repeatpass"]) ? $_REQUEST["repeatpass"] : ""); //界面上輸入的重複密碼 $action = (isset($_REQUEST["action"]) ? $_REQUEST["action"] : ""); //以hide方式提交到服務器的action if($action!="modify"){ $action = "view"; } else if($authed_pass!=$input_oldpass){ $action = "oldpasswrong"; } else if(empty($newpass)){ $action = "passempty"; } else if($newpass!=$repeatpass){ $action = "passnotsame"; } else{ $action = "modify"; } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK"> <title>Subversion 在線自助密碼修改</title> </head> <body> <? //action=view 顯示普通的輸入信息 if ($action == "view"){ ?> <script language = "javaScript"> <!-- function loginIn(myform) { var newpass=myform.newpass.value; var repeatpass=myform.repeatpass.value; if(newpass==""){ alert("請輸入密碼!"); return false; } if(repeatpass==""){ alert("請重複輸入密碼!"); return false; } if(newpass!=repeatpass){ alert("兩次輸入密碼不一致,請重新輸入!"); return false; } return true; } //--> </script> <style type="text/css"> <!-- table { border: 1px solid #CCCCCC; background-color: #f9f9f9; text-align: center; vertical-align: middle; font-size: 9pt; line-height: 15px; } th { font-weight: bold; line-height: 20px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-bottom-style: solid; color: #333333; background-color: f6f6f6; } input{ height: 18px; } .button { height: 20px; } --> </style> <br><br><br> <form method="post"> <input type="hidden" name="action" value="modify"/> <table width="220" cellpadding="3" cellspacing="8" align="center"> <tr> <th colspan=2>Subversion 密碼修改</th> </tr> <tr> <td>用 戶 名:</td> <td align="left"> <?=$username?></td> </tr> <tr> <td>原 密 碼:</td> <td><input type=password size=12 name=oldpass></td> </tr> <tr> <td>用戶密碼:</td> <td><input type=password size=12 name=newpass></td> </tr> <tr> <td>確認密碼:</td> <td><input type=password size=12 name=repeatpass></td> </tr> <tr> <td colspan=2> <input onclick="return loginIn(this.form)" class="button" type=submit value="修 改"> <input name="reset" type=reset class="button" value="取 消"> </td> </tr> </table> </form> <? } else if($action == "oldpasswrong"){ $msg="原密碼錯誤!"; } else if($action == "passempty"){ $msg="請輸入新密碼!"; } else if($action == "passnotsame"){ $msg="兩次輸入密碼不一致,請重新輸入!"; } else{ $passwdfile="C:/Repositories/htpasswd"; $command='"D:/xampp/apache/bin/htpasswd.exe" -b '.$passwdfile." ".$username." ".$newpass; system($command, $result); if($result==0){ $msg="用戶[".$username."]密碼修改成功,請用新密碼登陸."; } else{ $msg="用戶[".$username."]密碼修改失敗,返回值爲".$result.",請和管理員聯繫!"; } } if (isset($msg)){ ?> <script language="javaScript"> <!-- alert("<?=$msg?>"); window.location.href="<?=$_SERVER["PHP_SELF"]?>" //--> </script> <? } ?> </body> </html>
3. 如果一切配置無誤的話,訪問http://localhost/svntools則出現如下界面:
如果輸入密碼正確,則會看到如下界面,這裏可以進行密碼修改,即Axure RP的用戶可以用初始密碼登錄,登錄後設置自己的密碼。