1. 程式人生 > >linux下svn的常用操作命令總結

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

svn版本管理

  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

[[email protected] 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






本文出自 “淺景塵” 博客,請務必保留此出處http://857803451.blog.51cto.com/12777961/1957253

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