linux下svn的常用操作命令總結

技術小甜發表於2017-11-15
  1. 匯入程式碼檔案到 repo 版本庫

我的程式碼檔案存放在 /var/www/html/; 

svn程式碼版本庫的路徑 /application/svndata/repo (也就是剛剛我們建立的版本庫的位置);

執行匯入命令: svn import /var/www/html/svntest file:///application/svndata/repo -m “init dir”


2.從版本庫匯出程式碼:svn  co   URL  directory

將程式碼checkout到指定目錄

匯出程式碼到當前目錄下; 執行匯出命令: svn checkout svn://192.168.1.5/repo  /root/test –usrname A –password B –no-auth-cache


3.從工作的程式碼拷貝提交到版本庫

如果我們沒有修改程式碼,那麼提交是沒有意義的。下面我們先來修改下1.php;

cd  test

vim 1.php


儲存修改後,在 svntet 目錄下先執行svn add 1.php  執行提交命令:

svn commit -m  “add dir” svn commit /root/data –username alex –password alex –no-auth-cache -m “haha”


4.從版本庫更新工作的程式碼拷貝

假如有n個人在進行同一項工作,大家都是公用同一版本庫,那麼可能你現在的版本庫就不是最新的了。所以,我們需要從版本庫裡更新下工作的程式碼拷貝。

執行程式碼:

cd svntest 

svn update 

 

5.svn status — 列印工作拷貝檔案和目錄的狀態。

我們可以藉助svn status 或者 svn st快速找到新新增並沒有納入版本控制的檔案。

svn status -v test

 

6.SVN檢視資料:顯示一個目錄或某一版本存在的檔案列表

svn list 或  svn ls

[root@web data]# svn list svn://10.0.0.62/repo/data  –username alex –password alex –no-auth-cache

 

 

第一列代表狀態改變的檔案的狀態:

`?`   專案不在版本控制之下;

`M`  專案已經修改了;

`!`    專案已經丟失;

`~`   專案作為一種物件(檔案、目錄或連結)納入版本控制,但是已經被另一種物件替代。

 

7.我們利用grep篩選出不在版本控制之下的檔案或者資料夾

svn st | grep ?

svn st | grep ? | awk `{print $2}`

我們可以利用awk逐一獲取到他們的資訊,現在我們就只需要他們的路徑就好了,然後有svn將他們加入版本控制

 

其實就工作備份的最外層執行下面的程式碼就可以將沒有加入版本控制的檔案或者檔名加入版本控制

svn status | grep ? | awk `{print $2}` | xargs svn add

 

再執行提交到版本庫的命令:svn commit -m “add newfile” 

 

註釋:執行加入版本控制命令:svn add 3.php 4.php 後,版本庫的並沒有更新版本。直到下一次執行 commit 才會提交更新

 

8.刪除工作拷貝和版本庫的檔案

情況一:先在工作的目錄拷貝刪除,在下次執行commit命令時候,自動從版本庫裡刪除

1、先執行刪除命令:svn del 1.php 2.php

2、再執行提交命令:svn commit -m “delfile”

情況二:直接從版本庫裡刪除,然後在工作拷貝下更新(update)

執行刪除命令:svn del -m “del 4.php” file:///var/svn/svntet/4.php 

 

在工作拷貝中在每個目錄下都會存在.svn檔案;在專案完成要上線的時候,我們怎麼樣快速都將所有的.svn檔案都刪除呢。。我們可以寫個shell指令碼來進行刪除。

find -type d -name “.svn” | xargs rm -rf

 


9.更新到某個版本 

svn update -r m path 

例如: 

svn update如果後面沒有目錄,預設將當前目錄以及子目錄下的所有檔案都更新到最新版本。 

svn update -r 200 test.php(將版本庫中的檔案test.php還原到版本200) 

svn update test.php(更新,於版本庫同步。如果在提交的時候提示過期的話,是因為衝突,需要先update,修改檔案,然後清除svn resolved,最後再提交commit) 

簡寫:svn up 


加鎖/解鎖 

svn lock -m “LockMessage“ [–force] PATH 

例如:svn lock -m “lock test file“ test.php 

svn unlock PATH 

 

 



10.檢視svn版本號

在svn的工作目錄,輸入命令:svn info





11.檢視修改的所有的log記錄,含作者、日期、路徑等

svn log path


12.檢視某個具體版本號的所有修改的記錄

svn log -v -r n


13.顯示特定修改的行級詳細資訊

svn diff

要比較兩個版本有什麼差異,或者說想知道某個版本和之前的版本相比到底修改了哪些內容

例如:svn diff test.php (將修改的檔案與基礎版本對比)

svn diff -r m:n path(對版本m和版本n比較差異) 

例如:svn diff -r 2036:2037 test.php 

簡寫:svn di


14.將兩個版本之間的差異合併到當前檔案 

svn merge -r m:n path 

例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合併到當前檔案,但是一般都會產生衝突,需要處理一下) 


15.建立納入版本控制下的新目錄 

svn mkdir: 建立納入版本控制下的新目錄。 

用法: 

1、mkdir PATH… 

2、mkdir URL… 

建立版本控制的目錄。 

1、每一個以工作副本 PATH 指定的目錄,都會建立在本地端,並且加入新增 

排程,以待下一次的提交。 

2、每個以URL指定的目錄,都會透過立即提交於倉庫中建立。 

在這兩個情況下,所有的中間目錄都必須事先存在。 


16.利用鉤子檔案觸發一些命令

例如,我們有3個工作副本。我們想實現這樣的功能:兩個開發者,單獨有自己的工作副本和測試環境。第3個工作副本是用來觀察某開發者提交後是否和另外的開發者修改的程式碼有衝突。簡單點說就是,無論那個工作副本一提交,就是自動更新我指定的工作副本。

將hooks下的post-commit.tmpl複製一份為post-commit。在post-commit的下面加入下面的程式碼,具體情況,要視自己的機子的配置而變。這裡是舉例說明而已。

[plain] view plain copy

export LANG=en_US.UTF-8  

SVN=/usr/bin/svn  

WEB=/var/www/html/test  

$SVN up $WEB –username admin –password admin –no-auth-cache  



將版本庫同步到當前專案中,或者說將當前版本更新到版本庫中某個版本

svn up -r x test




本文轉自淺景塵51CTO部落格,原文連結:http://blog.51cto.com/857803451/1957253 ,如需轉載請自行聯絡原作者


相關文章