2012-02-08 87 views
35

我需要在SVN的兩個版本之間獲取已更改的文件列表。從兩個版本之間的SVN命令行獲取更改的文件

我用下面的命令:

svn diff -r 5001:6001 --summarize https://svn.blah.com/../ > output.txt 

出於某種原因,修訂於5001修訂版中的文件輸出文本文件不填充。

從兩個版本(包括版本和版本,包括版本5001和版本6001)中提取文件列表的確切命令是什麼?

+1

你嘗試'-r 5000:6001'? – 2012-02-08 09:53:37

+0

是的,我試過-r 5000:6001它包括在r 5001上修改的文件,但不是5000 ....是否意味着我必須總是遞減一個修訂號 – Madhan 2012-02-08 09:56:49

+0

是的。這是它的工作方式。 – 2012-02-08 10:00:53

回答

52

嘗試用svn diff -r 5000:6001代替。要理解這一點,請考慮以下幾點:svn diff -r 100:100的輸出結果會是什麼樣子?它不會顯示任何更改,因爲修訂是相同的。要查看版本100的更改,我們必須使用-r 99:100

+1

當我試圖svn diff -r 100:100輸出爲空 – Madhan 2012-02-08 10:06:25

+6

正確 - 因爲100和100之間沒有區別 - 它們是相同的。根據定義。因此,如果你想知道你的5001:6001與5001之間的區別,你需要做一個-r 5000:6001。 – 2012-02-08 10:38:44

8

嘗試svn log -r 5000:6001 -v獲取文件列表。這給出了按修訂號分類的文件列表。所以,一個人可以更好地瞭解哪些文件在哪些版本中一目瞭然。

+0

我需要一個在兩個任意版本之間改變的文件列表,這對我有用,而diff -r建議,帶--summarize或不列出回購庫中的所有文件。也許我錯過了什麼? – 2014-01-14 19:39:34

+0

當存在來自合併的修訂時,請注意此輸出。今天遇到一個問題,輸出看起來像/branch/abc/new_file.js(來自trunk/new_file.js:12344)。根據我的經驗,如果您計劃將此數據作爲其他輸入的輸入,則總是使用--xml。 – MattSaw 2016-09-14 13:49:59

8

如果你想要所有的改變,Dirk-Willem van Gulik的答案是完美的。但是,如果你只想要的文件列表改變--summarize開關添加到您的命令,

svn diff -r 13447:HEAD 
6

svn diff -r v1:v2 --summarize | awk '{print $2}' > filelist.txt

說明:

svn diff -r v1:v2 --summarize爲您提供的狀態和分離的文件名製表符。您需要選擇製表符後面的字符串 - 第二個字段。你可以做,使用awk和輸出重定向到filelist.txt

-1
svn diff -r 5001:6001 ...local path hier ... > output.txt 
+1

您可以添加一些解釋爲什麼這解決了用戶的問題? – Chrismas007 2015-01-30 17:27:47

相關問題