❶ 如何用命令行實現TortoiseSVN命令
TortoiseSVN是一個GUI客戶端,這個自動化指導為你展示了讓TortoiseSVN對話框顯示並收集客戶輸入,如果你希望編寫不需要輸入的腳本,你應該使用官方的Subversion命令行客戶端。
TortoiseSVN的GUI程序叫做TortoiseProc.exe。所有的命令通過參數/command:asdf指定,其中asdf是必須的命令名(命令名詳見」表 1. 有效命令及選項列表「)。大多數此類命令至少需要一個路徑參數,使用/path:"some\path"指定。在下面的命令表格中,命令引用的是/command:asdf參數,餘下的代表了/path:"some\path"參數。
因為一些命令需要一個目標路徑的列表(例如提交一些特定的文件),/path參數可以接收多個路徑,使用*分割。
TortoiseSVN 使用臨時文件在 shell 擴展和主程序之間傳遞多個參數。從 TortoiseSVN 1.5.0 開始,廢棄/notempfile參數,不再需要增加此參數。
The progress dialog which is used for commits, updates and many more commands usually stays open after the command has finished until the user presses theOK button. This can be changed by checking the corresponding option in the settings dialog. But using that setting will close the progress dialog, no matter if you start the command from your batch file or from the TortoiseSVN context menu.
To specify a different location of the configuration file, use the parameter /configdir:"path\to\config\directory". This will override the default path, including any registry setting.
如果想在進度對話框執行完畢後自動關閉,而又不必設置永久性的參數,可以傳遞/closeonend參數。
/closeonend:0 不自動關閉對話框
/closeonend:1 如果沒發生錯誤則自動關閉對話框
/closeonend:2 如果沒發生錯誤和沖突則自動關閉對話框
/closeonend:3如果沒有錯誤、沖突和合並,會自動關閉
下面的列表列出了所有可以使用TortoiseProc.exe訪問的命令,就像上面的描述,必須使用/command:asdf的形式,在列表中,因為節省空間的關系省略了/command的前綴。
表 1. 有效命令及選項列表
命令
描述
:about 顯示關於對話框。如果沒有給命令也會顯示。
:log 打開日誌對話框,/path 指定了顯示日誌的文件或目錄,另外還有三個選項可以設置: /startrev:xxx、/endrev:xxx和/strict
:checkout 打開檢出對話框,/path指定了目標路徑,而/url制定了檢出的URL。
:import 打開導入對話框,/path 指定了數據導入路徑。
:update 將工作副本的/path更新到HEAD,如果給定參數/rev,就會彈出一個對話框詢問用戶需要更新到哪個修訂版本。為了防止指定修訂版本號/rev:1234的對話框,需要選項/nonrecursive和/ignoreexternals。
:commit 打開提交對話框,/path 指定了目標路徑或需要提交的文件列表,你也可以使用參數 /logmsg 給提交窗口傳遞預定義的日誌信息,或者你不希望將日誌傳遞給命令行,你也可以使用/logmsgfile:path,path 指向了保存日誌信息的文件。為了預先填入bug的ID(如果你設置了集成bug追蹤屬性),你可以使用/bugid:"the bug id here"完成這個任務。
:add 將/path的文件添加到版本控制 。
:revert 恢復工作副本的本地修改,/path說明恢復哪些條目。
:cleanup 清理中斷和終止的操作,將工作副本的/path解鎖。
:resolve 將/path指定文件的沖突標示為解決,如果給定/noquestion,解決不會向用戶確認操作。
:repocreate 在/path創建一個版本庫。
:switch 打開選項對話框。/path 指定目標目錄。
:export 將/path的工作副本導出到另一個目錄,如果/path指向另一個未版本控制目錄,對話框會詢問要導出到/path的URL。
:merge Opens the merge dialog. The /path specifies the target directory. For merging a revision range, the following options are available: /fromurl:URL, /revrange:string. For merging two repository trees, the following options are available: /fromurl:URL, /tourl:URL, /fromrev:xxx and /torev:xxx. These pre-fill the relevant fields in the merge dialog.
:mergeall Opens the merge all dialog. The /path specifies the target directory.
: Brings up the branch/tag dialog. The /path is the working to branch/tag from. And the /url is the target URL. You can also specify the /logmsg switch to pass a predefined log message to the branch/tag dialog. Or, if you don't want to pass the log message on the command line, use /logmsgfile:path, where path points to a file containing the log message.
:settings 打開設置對話框。
:remove 從版本控制里移除/path中的文件。
:rename 重命名/path的文件,會在對話框中詢問新文件,為了防止一個步驟中詢問相似文件,傳遞/noquestion。
:diff Starts the external diff program specified in the TortoiseSVN settings. The /path specifies the first file. If the option /path2 is set, then the diff program is started with those two files. If /path2 is omitted, then the diff is done between the file in /path and its BASE. To explicitly set the revision numbers use /startrev:xxx and /endrev:xxx. If/blame is set and /path2 is not set, then the diff is done by first blaming the files with the given revisions.
:showcompare
Depending on the URLs and revisions to compare, this either shows a unified diff (if the option unified is set), a dialog with a list of files that have changed or if the URLs point to files starts the diff viewer for those two files.
The options url1, url2, revision1 and revision2 must be specified. The options pegrevision, ignoreancestry, blame and unified are optional.
:conflicteditor Starts the conflict editor specified in the TortoiseSVN settings with the correct files for the conflicted file in /path.
:relocate 打開重定位對話框,/path指定了重定位的工作副本路徑。
:help 打開幫助文件
:repostatus 打開為修改檢出對話框,/path 指定了工作副本目錄。
:repobrowser Starts the repository browser dialog, pointing to the URL of the working given in /path or /path points directly to an URL. An additional option /rev:xxx can be used to specify the revision which the repository browser should show. If the /rev:xxx is omitted, it defaults to HEAD. If /path points to an URL, the /projectpropertiespath:path/to/wcspecifies the path from where to read and use the project properties.
:ignore 將/path中的對象加入到忽略列表,也就是將這些文件添加到 svn:ignore 屬性。
:blame
為 /path 選項指定的文件打開追溯對話框。
如果設置了 /startrev 和 /endrev 選項,不會顯示詢問追溯范圍對話框,直接使用這些選項中的版本號。
如果設置了 /line:nnn 選項,TortoiseBlame 會顯示指定行數。
也支持 /ignoreeol,/ignorespaces 和 /ignoreallspaces 選項。
:cat 將/path指定的工作副本或URL的文件保存到/savepath:path,修訂版本號在/revision:xxx,這樣可以得到特定修訂版本的文件。
:createpatch 創建/path下的補丁文件。
:revisiongraph 顯示/path目錄下的版本變化圖。
:lock Locks a file or all files in a directory given in /path. The 'lock' dialog is shown so the user can enter a comment for the lock.
:unlock Unlocks a file or all files in a directory given in /path.
:rebuildiconcache Rebuilds the windows icon cache. Only use this in case the windows icons are corrupted. A side effect of this (which can't be avoided) is that the icons on the desktop get rearranged. To suppress the message box, pass /noquestion.
:properties 顯示 /path 給出的路徑之屬性對話框。
Examples (which should be entered on one line):
TortoiseProc.exe /command:commit
/path:"c:\svn_wc\file1.txt*c:\svn_wc\file2.txt"
/logmsg:"test log message" /closeonend:0
TortoiseProc.exe /command:update /path:"c:\svn_wc\" /closeonend:0
TortoiseProc.exe /command:log /path:"c:\svn_wc\file1.txt"
/startrev:50 /endrev:60 /closeonend:0
❷ linux svn 版本差異
1 svn diff的用法
1.1 對比當前本地的工作拷貝文件(working )和緩存在.svn下的版本庫文件的區別
[plain]view plain
svndiff
1.2 對比當前本地的工作拷貝文件(working )和任意版本A的差異
[plain]view plain
svndiff-rA
比如,以下將對比本地的工作拷貝文件(working )和版本94239的差異
[cpp]view plain
svndiff-r94239
1.3 對比任意歷史版本A和任意歷史版本B的差異
[plain]view plain
svndiff-rA:B
比如,以下命令將顯示版本94127相對於版本94239的差異,
[plain]view plain
[@user]$svndiff-r94239:94127
顯示差異後的結果如下,
[html]view plain
===================================================================
---RealServer/LogicWorker.cpp(revision94239)
+++RealServer/LogicWorker.cpp(revision94127)
@@-964,22+964,8@@
.......
其中r後面的參數的含義是版本號,具體可以在svn log中查詢到。
2 svn log的用法
1.1在任意位置使用
[plain]view plain
svnlogur1
1.2 進入代碼在本地的目錄後使用
[plain]view plain
svnlog
3 svn merge的用法
[plain]view plain
svnmerge-rA:B
比如,下面這個命令的含義是,把94127版本相對於94239版本的差異merge到當前版本,注意冒號前後的版本的順序是會帶來區別的。
[html]view plain
svnmerge-r94239:94127
merge完成之後,記得提交本地的修改到版本庫,
[plain]view plain
svnci-m"restoretoversion94127"
❸ svn 命令行怎麼解決沖突
解決版本沖突的命令。在沖突解決之後,需要使用svn resolved來告訴subversion沖突解決,這樣才能提交更新。沖突發生時,subversion會在Work Copy中保存所有的目標文件版本(上次更新版本、當前獲取的版本,即別人提交的版本、自己更新的版本、目標文件。假設文件名是sandwich.txt,對應的文件名分別是:sandwich.txt.r1、
sandwich.txt.r2、sandwich.txt.mine、sandwich.txt)。同時在目標文件中標記來自不同用戶的更改。
解決沖突的辦法:
- 手動解決:沖突發生時,通過和其他用戶溝通之後,手動更新目標文件。然後執行svn resolved filename來解除沖突,最後提交。
- 放棄自己的更新,使用別人的更新。使用最新獲取的版本覆蓋目標文件,執行svn resolved filename並提交。
- 放棄自己的更新,使用svn revert,然後提交。在這種方式下不需要使用svn resolved。
對於svn resolved命令需要非常小心,必須是非常確定沖突已經解決才能使用。否則,會導致Subversion以為沖突解決,而使代碼庫不正確。 解決沖突詳細文檔:
http://svnbook.subversion.org.cn/1.2/svn.tour.cycle.html#svn.tour.cycle.resolve 解決沖突(合並別人的修改)
我們可以使用svn status -u來預測沖突,當你運行svn update一些有趣的事情發生了:
$ svn update U INSTALL G README C bar.c
Updated to revision 46.
U和G沒必要關心,文件干凈的接受了版本庫的變化,文件標示為U表明本地沒有修改,文件已經根據版本庫更新。G標示合並,標示本地已經修改過,與版本庫沒有重迭的地方,已經合並。
但是C表示沖突,說明伺服器上的改動同你的改動沖突了,你需要自己手工去解決。 當沖突發生了,有三件事可以幫助你注意到這種情況和解決問題: ● Subversion列印C標記,並且標記這個文件已沖突。
● 如果Subversion認為這個文件是可合並的,它會置入沖突標記—特殊的橫線分開沖突的「兩面」—在文件里可視化的描述重疊的部分(Subversion使用svn:mime-type屬性來決定一個文件是否可以使用上下文的,以行為基礎合並,更多信息可以看「svn:mime-type」一節)。
● 對於每一個沖突的文件,Subversion放置三個額外的未版本化文件到你的工作拷貝:
● filename.mine
● 你更新前的文件,沒有沖突標志,只是你最新更改的內容。(如果Subversion認為這個文件不可以合並,.mine文件不會創建,因為它和工作文件相同。) ● filename.rOLDREV
❹ linux下的patch命令
patch命令用於為特定軟體包打補丁,該命令使用diff命令對源文件進行操作。
格式:patch [選項] [原始文件 [補丁文件]]
常用參數:
-r 是一個遞歸選項,設置了這個選項,diff會將兩個不同版本源代碼目錄中的所有對應文件全部都進行一次比較,包括子目錄文件。
-N 選項確保補丁文件將正確地處理已經創建或刪除文件的情況。
-u 選項以統一格式創建補丁文件,這種格式比預設格式更緊湊些。
-p0 選項從當前目錄查找目的文件(夾)(直接使用補丁文件裡面指定的路徑)
-p1 選項忽略掉第一層目錄,從當前目錄查找(去掉補丁文件指定路徑最左的第1個'/'及前面所有內容)。
-E 選項說明如果發現了空文件,那麼就刪除它
-R 選項說明在補丁文件中的「新」文件和「舊」文件現在要調換過來了(實際上就是給新版本打補丁,讓它變成老版本)
示例:
1、單個文件
首先將兩個文件的內容顯示如下:
$ cat test0
00000000
00000000
00000000
$ cat test1
00000000
11111111
00000000
*生成補丁:
$ diff -uN test0 test1 >test1.patch
這樣將通過比較,生成test1的補丁文件。這里選項u表示使用同一格式輸出這樣產生的輸出便於閱讀易於修改,N表示把不存在的文件看做empty的.就算文件test0不存在,也會生成補丁。
*把test0通過打補丁變成test1文件:
$ patch -p0 <test1.patch
或$patch <test1.patch
這樣,test0的內容將和test1的內容一樣,但是文件名稱還是test0。關於patch的選項見後面多文件有說明。當前目錄下可以有test1.如果比較的時候test0是不存在的,那麼這時候會生成一個test0文件。
*把打過補丁的test0還原:
$ patch -RE -p0<test1.patch
或$patch -R <test1.patch
這樣,test0的內容將還原為原來沒有打過補丁的狀態。當前目錄下可以有test1.這里的-E選項是要求patch在文件為空的時候刪除文件,這個選項是不必要的因為patch是根據時間戳來判斷一個文件是否存在。如果比較的時候test0是不存在的,這將會刪除test0文件。
**
2、多個文件的:
首先查看文件結構如下:
1)外層目錄列表:
$ ls -p
prj0/ prj1/
2)子目錄prj0列表:
$ ls -p prj0
prj0name test0
3)子目錄prj1列表:
$ ls -p prj1
prj1name test1
4)文件prj0/prj0name:
$ cat prj0/prj0name
--------
prj0/prj0name
--------
5)文件prj1/prj1name:
$ cat prj1/prj1name
---------
prj1/prj1name
---------
6)文件prj0/test0:
$ cat prj0/test0
0000000
0000000
0000000
0000000
0000000
0000000
0000000
7)文件prj1/test1:
$ cat prj1/test1
1111111
1111111
1111111
1111111
1111111
1111111
1111111
*創建補丁:
$ diff -uNr prj0 prj1 > prj1.patch
這里項u表示使用同一格式輸出這樣產生的輸出便於閱讀易於修改,N表示把不存在的文件看做empty的,r表示遞歸地比較子目錄,比較的結果被標准重定向到文件prj1.patch中了。
運行之後,輸出的就是一個補丁,描述了兩個文件的不同,這個補丁就是把diff參數的第一個文件打補丁變成第二個文件的補丁文件。
實際過程依次比較兩個目錄下的同名文件,如果這里不加-N就會指明prj0name和test0隻在prj0中存在,prj1name和test1隻在prj1中存在,這就無法比較了,所以這里為了能夠比較,加上了-N選項。
為了便於理解,這里給出prj1.patch文件的內容:
$ cat prj1.patch
diff -uNr prj0/prj0name prj1/prj0name
--- prj0/prj0name 2009-08-24 10:44:19.000000000 +0800
+++ prj1/prj0name 1970-01-01 08:00:00.000000000 +0800
@@ -1,5 +0,0 @@
---------
-
-prj0/prj0name
-
---------
diff -uNr prj0/prj1name prj1/prj1name
--- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800
+++ prj1/prj1name 2009-08-24 10:45:05.000000000 +0800
@@ -0,0 +1,5 @@
+---------
+
+prj1/prj1name
+
+---------
diff -uNr prj0/test0 prj1/test0
--- prj0/test0 2009-08-24 11:21:12.000000000 +0800
+++ prj1/test0 1970-01-01 08:00:00.000000000 +0800
@@ -1,7 +0,0 @@
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
diff -uNr prj0/test1 prj1/test1
--- prj0/test1 1970-01-01 08:00:00.000000000 +0800
+++ prj1/test1 2009-08-24 11:21:33.000000000 +0800
@@ -0,0 +1,7 @@
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
*將prj0中的所有文件打補丁成為prj1中的所有文件:
步驟如下:
1)$ cp prj1.patch ./prj0
2)$ cd prj0
3)$ patch -p1 < prj1.patch
這里,把補丁文件復制到了prj0下面,然後將該文件夾下面的文件"變成"prj1下的文件了.
$ ls -p
prj1name prj1.patch test1
關於patch命令的-p選項接數字n,意思是去掉補丁文件里指定路徑的前n個'/'前綴.
例如補丁文件中指定路徑是/u/howard/src/blurfl/blurfl.c,那麼p0選項處理之後的路徑還是原來路徑不變,而p1選項處理之後的路徑是u/howard/src/blurfl/blurfl.c,同理p4處理之後的路徑是:blurfl/blurfl.c.
注意:如果在外層目錄運行這個命令,那麼會在外層目錄創建兩個prj1name和test1文件。
*將打好補丁的prj0中的所有文件還原成為原來打補丁之前的文件:
$ patch -R -p1 < prj1.patch
運行之後文件變成原來的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*將prj1中的所有文件反向打補丁成為prj0中的所有文件:
$ patch -R -p1 < prj1.patch
運行之後prj1中的文件變成prj0的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*將prj1中反打補丁後的文件還原成原來的prj1中的文件:
$ patch -p1 < prj1.patch
運行之後,prj1中的文件被還原了,如下:
$ ls -p
prj1name prj1.patch test1
*在外層目錄把prj0的內容打補丁成prj1的內容:
$ls -p
prj0/ prj1.patch
$patch -p0 <prj1.patch
這樣prj0中的內容變成了prj1中的內容,但是prj0的目錄名仍舊是prj0,如下:
$ls -p prj0
prj1name test1
注意:當前文件夾下面不能prj1目錄,否則會出現一些警告提示。
*在外層目錄把prj0的內容反打補丁還原成原來prj0的內容:
$ patch -R -p0 <prj1.patch
這樣原來的文件如下:
$ ls -p prj0
prj0name test0
**
❺ svn info對應git什麼命令
svn命令列舉:
svn checkout :從伺服器上下載一份新的代碼到本地
svn up:在本地代碼目錄下執行,與伺服器上最新代碼保持同步
svn status:在本地代碼目錄下執行,查看當前目錄下的本地改動情況,可簡寫為svn st
svn revert <file-name>:在本地代碼目錄下執行,撤銷對<file-name>文件的改動,恢復到未改動前狀態。
svn diff <file_name>:在本地代碼目錄執行,查看對文件<file-name>的修改。
svn log -l4:查看當前目錄下的最新的4條修改歷史,可改為-l5,-l6,-l10 (注意是小寫的"L")
svn info:查看當前代碼版本信息
svn commit:提交修改的代碼到伺服器;