3 使用命令列模式訪問SVN伺服器

2021-09-28 23:42:49 字數 4039 閱讀 3681

①首先進入自己的工作目錄,例如:d:\devworkspace\svnspace

②執行svn checkout命令,命令格式如下

格式舉例

svn checkout svn://localhost/erp myerp

執行結果

取出版本 0。

③工作副本

執行checkout命令後進入myerp目錄,看到裡面什麼都沒有。真的什麼都沒有嗎?不是的。檢出命令會在這一目錄下建立乙個隱藏目錄.svn,用來儲存與伺服器互動的重要資訊,其中包括從伺服器端取回的最新版本資訊、檔案狀態、更新時間等。svn正是以此為依據判斷當前目錄中檔案的狀態。所以這個隱藏目錄千萬不要刪除或修改其中的內容——完全無視它的存在吧。如果伺服器端儲存的檔案可以視為乙個「正本」,那麼每個開發人員檢出到本地目錄的檔案可以視為「副本」,通常稱為工作副本。

①進入d:\devworkspace\svnspace\myerp目錄

②建立乙個檔案test.txt

③執行svn commit命令,執行結果是

d:\devworkspace\svnspace\myerp>svn commit test.txt

svn: e200009: 提交失敗(細節如下):

svn: e200009: 「d:\devworkspace\svnspace\myerp\test.txt」 尚未納入版本控制

說明乙個檔案必須納入版本控制才可以提交到伺服器端。

④執行svn add命令,將test.txt納入版本控制

d:\devworkspace\svnspace\myerp>svn add test.txt

a test.txt

⑤再次執行svn commit命令

d:\devworkspace\svnspace\myerp>svn commit test.txt

svn: e205007: 提交失敗(細節如下):

svn: e205007: 無法使用外部編輯器獲得日誌資訊;考慮設定環境變數 $svn_editor,或者使用 --message (-m) 或 --file (-f) 選項

svn: e205007: 沒有設定 svn_editor,visual 或 editor 環境變數,執行時的配置引數中也沒有 「editor-cmd」 選項

此時要求附加日誌資訊

⑥使用-m引數附加日誌資訊

d:\devworkspace\svnspace\myerp>svn commit -m "my first commit"  test.txt

svn: e170001: 提交失敗(細節如下):

svn: e170001: 認證失敗

原因是沒有許可權

⑦暫時先開啟匿名訪問許可權

[1] 進入對應的版本庫目錄下的conf目錄:d:\devrepository\subversion\erp\conf

[2] 開啟svnserve.conf

[3] 將第19行的# anon-access = read改為anon-access = write,也就是去掉「# 」,將read改為write。注意前面不要留空格,一定要頂格寫。

[4] 不需要重啟svn服務,甚至命令列視窗都不需要重新開啟。

⑧重新執行提交命令

d:\devworkspace\svnspace\myerp>svn commit -m "my first commit"  test.txt

正在增加 test.txt

傳輸檔案資料.

提交後的版本為 1。

說明提交成功了。

⑨其實svn commit命令最後可以不指定具體檔案,此時表示提交當前工作副本中的所有修改。

①將伺服器端檔案檢出到乙個新的目錄,模擬另外乙個終端

d:\devworkspace\svnspace>svn checkout svn://localhost/erp tomerp

a tomerp\test.txt

取出版本 1。

②回到myerp目錄,對test.txt檔案修改後提交。

③進入tomerp目錄

④執行svn update命令

d:\devworkspace\svnspace\tomerp>svn update

正在公升級 '.':

u test.txt

更新到版本 2。

這樣我們就可以在tomerp目錄下看到myerp目錄下提交的修改。

⑤思考:更新和檢出的相同點和不同點分別是什麼?

檢出更新

相同點不同點1

不同點2

建立.svn目錄,使檢出目錄成為工作副本

依賴.svn目錄

不同點3

只能操作1次

可以操作多次

①沒有修改,現行版本

本檔案在工作目錄中沒有被修改,而且自當前版本之後,其他終端也沒有任何該檔案的修改被提交到伺服器,即當前工作副本的版本和伺服器端最新版本是一致的。對它執行svn commit和svn update都不會發生任何事。

②本地修改, 現行版本

這個檔案被修改過,但這個修改還沒有提交到伺服器,而且自當前版本之後,其他終端也沒有任何該檔案的修改被提交到伺服器,所以當前工作副本的版本和伺服器端最新版本仍然是一致的。由於有尚未送交回去的本地修改,所以對它的 svn commit會成功提交你的修改,而 svn update 則不會作任何事。

③沒有修改,過時版本

這個檔案沒有修改,但是版本庫中有其他終端提交的修改。此時當前工作副本的版本比伺服器端的版本落後了,我們稱之為「過時」。對當前檔案的 svn commit 不會發生任何事,而 svn update 會讓工作目錄中的檔案更新至最新版本。

④本地修改,過時版本

伺服器端存在沒有更新到本地的修改,導致當前版本過時。如果這個檔案在本地有未提交的修改,則無法提交,對它執行svn commit 會產生「out-of-date」錯誤。

此時應該先嘗試更新本地檔案。更新時svn會嘗試將伺服器端的更新與本地檔案進行合併,合併的結果有兩種可能:乙個是伺服器端和本地修改位於檔案的不同位置,合併成功;另乙個是伺服器端的修改正好和本地修改位於同乙個位置,發生衝突。

①假設當前版本為12,想要取回版本9

②執行svn update命令

格式svn update --revision 想要取回的版本號

舉例svn update --revision 1

執行結果

正在公升級 『.』:

d pp.txt

u test.txt

更新到版本 1。

③這裡需要注意的是,svn版本號並不是對某乙個檔案進行編號,而是對應整個版本庫總體狀態的乙個「快照」,取回某個版本不是取回版本號對應的某個檔案,而是整個專案的乙個快照。

①假設想要取回pp.txt在版本10時的狀態

②執行svn update命令

格式svn update 檔名 --revision 想要取回的版本號

舉例svn update pp.txt –revision 10

執行結果

正在公升級 『pp.txt』:

u pp.txt

更新到版本 10。

③綜合這兩個例子,我們可以認為版本號和檔名構成了乙個橫縱座標系,通過檔案路徑和版本號定位其在某乙個時刻的狀態。

sion 10 |

| 執行結果 | 正在公升級 『pp.txt』:

u pp.txt

更新到版本 10。 |

③綜合這兩個例子,我們可以認為版本號和檔名構成了乙個橫縱座標系,通過檔案路徑和版本號定位其在某乙個時刻的狀態。

SVN的基本使用 命令列

yotrolz 關注 建立倉庫.png 建立使用者 1 建立使用者 2 給倉庫設定使用者 1 設定使用者的訪問許可權 這裡我們建立了三個本地的資料夾 cd users sunshine documents 大神班 練習 0719 svn練習 經理svn co username mgr passwor...

Window PHP 使用命令列模式

電腦系統 win7 php環境 phpstudy 1 把php目錄放到環境變數path下面 我的電腦 屬性 高階 環境變數 系統變數 path 編輯 檢視路徑下有沒有php目錄,如果沒有加上 比如我的php路徑是d phpstudy php php 5.6.27 nts 所以要在最後面加上d php...

SVN常用命令行

1.建立儲存庫 假設d dev svnrepo為存放svn儲存庫的目錄 svnadmin create d dev svnrepo test 建立一名為test的儲存庫 2.匯入專案 svn import local path svn path m initial import 引數 m 為日誌 3...