2013-07-22 47 views
1

我使用VisualSVN服務器和TortoiseSVN,我試圖尋找到一個特定的線出現,穿過一個特定文件的多個版本。如何找到的代碼行被移動文件的哪些修訂?

我想看看在過去的版本中,save(12);在哪裏出現,以及它在哪些版本中被移動,與我的工作副本相比。

R1和我的工作副本之間的標準差異僅顯示初始位置。我試過單獨查看差異,但有數百個版本。

有沒有辦法做到這一點?

回答

0

如果你運行該文件的當前版本的TortoiseSVN的怪工具,您應該看到修訂版該行成爲它現在是什麼,(和誰做的)。

+0

你錯過歷史方面的要求 - 必須在循環中進行。這樣怪,使用字符串中-問題作爲新的修訂版源版本 –

+0

如果該行的最後更改是移動,它將顯示爲責備工具顯示最後修訂誰的行格式。 –

+0

史蒂夫,謝謝你,但它並沒有讓我知道我在做什麼。在最新修訂版本中,它只顯示一行,處於當前狀態。我認爲@LazyBadger是對的。 –

0

這可以手動完成,或者使用自動腳本,並分階段的作品,但你會驚訝的速度有多快:

  1. 編寫可以通過,如果該行是在grep命令的在一個位置失敗另一個 - 例如grep -n該行的文本filename.ext| grep的CurrentLineNo
  2. 假設你有1000次可能的修訂本應通過的1000未能在0
  3. 更新的一個文件修訂版500並重新運行 - 如果它通過你去失敗,你去無論在哪種情況下,您都會使用與前一半相同的差異,並保持原樣,即250,125,62,31,15,7,4,2,1 - 在此過程結束時 - (二進制搜索) - 你將有兩個相鄰版本的文件1傳遞1失敗 - 只需10步1000個版本20百萬。
+0

BTW分佈式VCS如git和mercurial可以選擇自動執行此操作。 –

0

前言

  • 在差異方面的「第一齣現的字符串」首先在比較輸出
  • 「其中修改它的感動」在差異方面出現「+字符串」的(在假設中,新行不在diff-context/3行左右作爲默認/舊行)正在出現「 - string」和「+ string」in same diff

不準備使用的代碼,但髒意見草案

純顛覆方式

這種方式已經(至少)兩種方法:探索從上歷史底部,指責和從底部到頂部使用log + diff

責備方法1)svn blame FILE > BLAMED-FILE,2)在BLAMED-FILE字符串中找到「save(12)」,註釋字符串編號(任何方式)和修訂版本最後更改(第一列) REV 3)移回歷史svn blame -r REV FILE > BLAMED-FILE

重複步驟2-3,wh ile a)更改「save(12)」的字符串編號不會顯示「Movement revision」(它在前一行,而不是當前)b)文件中的REV等於當前 - 它是出現「save(12) 「

登錄+ DIFF-方法1)svn log -q -v FILE(得到修正,任何形式的文件,其中影響的列表)2),用於在列表中的每個版本在從最舊的執行svn diff -c REV | grep save(12) > FILE-REV到最新修訂3方向)求修正,其關聯到第二個音符在前言中,檢查文件-REV

水銀+ hgsubversion方式

在測試了當地的材料。我希望看到的線「地區= -MA」歷史文件,回答「Region=-MA串出現在改版597(SVN號碼是598,+ 1)字符串26.修訂598串

>hg grep --all -n Region Charter.ini 
Charter.ini:599:28:+:Region=-NE 
Charter.ini:598:23:-:Region= 
Charter.ini:598:26:-:Region=-MA 
Charter.ini:598:24:+:Region=-MA 
Charter.ini:597:13:+:Region=-MI 
Charter.ini:597:16:+:Region=-GA 
Charter.ini:597:19:+:Region=-CA 
Charter.ini:597:23:+:Region= 
Charter.ini:597:26:+:Region=-MA 

一個命令被移動到字符串24「,差異確認它。

597(添加文件)

>hg diff -c 597 Charter.ini 
diff -r 7e3dfc891358 -r 25efa70e5350 Charter.ini 
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 
+++ b/Charter.ini  Tue Dec 29 08:27:48 2009 +0000 
... 
+Region=-MA 
+75.130.96.0-75.130.111.255 
>hg diff -c 598 Charter.ini 
diff -r 25efa70e5350 -r 5665435f74b4 Charter.ini 
--- a/Charter.ini  Tue Dec 29 08:27:48 2009 +0000 
+++ b/Charter.ini  Tue Dec 29 13:09:58 2009 +0000 
... 
-//CHARTER-NET-5BLK 
66.188.0.0-66.191.255.255 
+71.80.0.0-71.95.255.255 
+75.128.0.0-75.143.255.255 
... 
- 
-//NETBLK-CHARTER-NET 
-Region= 
-75.128.0.0-75.143.255.255 
+71.84.32.0-71.84.63.255 

Region=-MA 
75.130.96.0-75.130.111.255 

爲什麼我用串代替全字符串?僅僅因爲在滿弦的情況下,我得到了奇怪的和意想不到的結果(比較以前的grep)

>hg grep --all -n Region=-MA Charter.ini 
Charter.ini:597:26:+:Region=-MA 
相關問題