2013-03-01 57 views
1

有沒有什麼辦法可以從已有的目錄或文件中刪除舊版本....然後(知道它已經「移動」了以後的時間)找出它被移動的地方?svn移動後找到舊文件的新位置

例子。

https:\\myserver.com\Repository1\OldFolderStructure\Folder01\FolderA\MyFile01.txt 

(該結構/文件存在於修訂333)

........

svn mkdir "https:\\myserver.com\Repository1\NewFolderStructure\" 

svn move "https:\\myserver.com\Repository1\OldFolderStructure\Folder01" "https:\\myserver.com\Repository1\NewFolderStructure" 

svn ls "https:\\myserver.com\Repository1\NewFolderStructure\Folder01" 

.......... (現在假裝有1000多個其他檢查,但沒有更多的svn動作),所以我跳轉到修訂版1444.) ..........

所以,現在,如果我檢查修訂333,我有這個文件「MyFile01.txt」(或文件夾「Folde RA「)。 我試圖找出它在HEAD修訂版本中的位置。

你可能會想,「他爲什麼需要這個?」 我希望我沒有。但是,我需要30分鐘才能提供修訂歷史記錄。 (< <壞笑話)。

.........編輯..............

所以一些額外的東西。

其中:svn info沒給我足夠的信息來找到新家。主要原因是目錄嵌套。 我svn移動一些文件夾,但該文件夾有多個嵌套在多個級別的子文件夾。

但是,通過svn diff,雖然我獲得了大量信息(在版本1444和333之間)......信息就在那裏。我的意思是,svn diff任務需要33秒,但是一旦它返回,我就有了xml中的信息,我正在解析它並將其放入一些簡單的DTO對象中。

兩個(文件名相同的問題):

如果我的項目的原始位置是:

https://mySvnServer.com/Repo1/SoccerClubWebSite/scripts/validationRoutines.js 

,然後我做一個svn差異(詳細),我有以下兩個項目在HEAD修訂版本中:

<path props="none" kind="file" item="add">https://mySvnServer.com/Repo1/WebSites/SoccerClubWebSite/scripts/validationRoutines.js</path> 
<path props="none" kind="file" item="add">https://mySvnServer.com/Repo1/WebSites/CriticalBusinessAppWebSite/scripts/validationRoutines.js</path> 

我遇到了一些我的文件名不是唯一的地方。

所以我不得不寫一個Uri段匹配器,試圖找到匹配.....通過向後工作的Uri。

例子。 在上述2項中....我首先嚐試URI的最後一段。

validationRoutines.js 

我有2個匹配的字符串。因此我不知道我關心的確切人物。 我抓住父母文件夾並使用它。

scripts/validationRoutines.js 

還有兩場比賽。

現在我添加了第三URI段(從右至左)

SoccerClubWebSite/scripts/validationRoutines.js 

,現在我找到了一個獨特的比賽。

那麼什麼我現在做的基本模板是:

(1) SVN DIFF 333:HEAD

(僅供參考,這給信息反饋ALOT)。 (2) 解析XML並將其推送到簡單的DTO對象。

(3) 在xml中查找「添加」或「修改」的項目,並使用基於上面列出的段邏輯的匹配系統。 (3b)因爲同一個文件可能被多次修改(並且因此不止一次在xml中顯示(但是具有相同的頭部svn-path)...我必須做一個GROUP BY(svn -path)。LINQ組通過行之有效這裏。

我還需要對更多的一些例子測試我的邏輯。但是YOUCH,這不是小事。

回答

1

你平常做的是使用TortoiseSVN的日誌查看器請執行以下步驟:

  • 在您確定文件w如在或現在在。在最壞的情況下,從根開始(如你的例子)。
  • 在搜索框中鍵入部分文件名,並記住,這是一個正則表達式。因此,要搜索MyFile01.txt,請輸入MyFile01\.txt(在.之前加上反斜線以確保該點被視爲字符,而不是任何字符)。
  • 日誌查看器現在列出與您的文件有關的所有修訂。您應立即看到文件的移動,文件名本身以紅色突出顯示。該移動本身在對話框中顯示爲delete加上add(Subversion沒有移動狀態)。

我已經做出了表率,與文件readme.txt,由此產生的對話框(創建和移動文件後)看起來像這樣:

enter image description here

正如你所看到的,突出顯示的文本(紅色)爲所選版本顯示刪除的文件(最後一行)和添加的文件(第二行),這是TortoiseSVN顯示移動的方式。

有關詳細信息,請參閱文檔中的Filtering Log Messages

有類似的東西可以通過使用svn log命令(見documentation給你的第一部分:

  • 過濾按日期和目錄
  • 第二個(在日誌消息或文件過濾通過比賽名稱)你必須通過例如grep在Unix/Linux/MacOS X中的命令。這取決於你的操作系統(Windows?)和你使用shell的技能。
+0

感謝您的輸入。有沒有這個命令行版本?或者那只是龜龜唯一的東西? – granadaCoder 2013-03-01 18:35:34

+0

對於'svn mv' TSVN將不會在日誌窗口中顯示任何文件 - 您在這裏(在Tortoise中)有**破解歷史記錄**的文件 – 2013-03-04 04:48:28

1

對於CLI它更多的手工(或GAWK +的grep + ...或解析XML)

各地CLI一些迭代。

故事大約hello.txt的,它誕生於樹幹,關於他的生活在分支圖片和評論

svn log http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/i18n/ -v --stop-on-copy -q 
------------------------------------------------------------------------ 
r25 | lazybadger | 2010-09-14 20:59:35 +0600 (Вт, 14 сен 2010) 
Changed paths: 
    D /branches/i18n/Beaujour.txt 
    A /branches/i18n/Buongiornor.txt (from /branches/i18n/Beaujour.txt:24) 
    A /branches/i18n/Goededag.txt (from /branches/i18n/GuterTag.txt:24) 
    D /branches/i18n/GuterTag.txt 
------------------------------------------------------------------------ 
r23 | lazybadger | 2010-07-17 06:05:00 +0600 (Сб, 17 июл 2010) 
Changed paths: 
    A /branches/i18n/Beaujour.txt (from /branches/i18n/Hello.fr.txt:22) 
    A /branches/i18n/GuterTag.txt (from /branches/i18n/Hello.de.txt:20) 
    D /branches/i18n/Hello.de.txt 
    D /branches/i18n/Hello.en.txt 
    D /branches/i18n/Hello.fr.txt 
    A /branches/i18n/Hello.txt (from /branches/i18n/Hello.en.txt:20) 
------------------------------------------------------------------------ 
r20 | lazybadger | 2010-07-17 05:23:59 +0600 (Сб, 17 июл 2010) 
Changed paths: 
    A /branches/i18n/Hello.en.txt (from /branches/i18n/Hello.txt:19) 
    D /branches/i18n/Hello.txt 
------------------------------------------------------------------------ 
r19 | lazybadger | 2010-07-17 05:22:16 +0600 (Сб, 17 июл 2010) 
Changed paths: 
    A /branches/i18n/Hello.de.txt 
    A /branches/i18n/Hello.fr.txt 
------------------------------------------------------------------------ 
r18 | lazybadger | 2010-07-17 05:11:40 +0600 (Сб, 17 июл 2010) 
Changed paths: 
    A /branches/i18n (from /trunk:17) 
------------------------------------------------------------------------ 

R18 - /trunk/hello.txt現在必須標明/枝/i18n/hello.txt(在 「從/主幹」 檢測到更改的路徑串)

R20 - 根據 「從/branches/i18n/Hello.txt」 的文件名是/branches/i18n/Hello.en.txt

r23 - 根據「from/branches/I18N/Hello.en.txt」文件名返回到/branches/i18n/Hello.txt

XML版本

>svn log http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/i18n/ -v -q --xml -r 18 -r 20 -r 23 
<?xml version="1.0" encoding="UTF-8"?> 
<log> 
<logentry 
    revision="18"> 
<author>lazybadger</author> 
<date>2010-07-16T23:11:40.388125Z</date> 
<paths> 
<path 
    action="A" 
    prop-mods="true" 
    text-mods="false" 
    kind="dir" 
    copyfrom-path="/trunk" 
    copyfrom-rev="17">/branches/i18n</path> 
</paths> 
</logentry> 
<logentry 
    revision="20"> 
<author>lazybadger</author> 
<date>2010-07-16T23:23:59.075625Z</date> 
<paths> 
<path 
    prop-mods="false" 
    text-mods="false" 
    kind="file" 
    action="D">/branches/i18n/Hello.txt</path> 
<path 
    prop-mods="false" 
    text-mods="false" 
    kind="file" 
    copyfrom-path="/branches/i18n/Hello.txt" 
    copyfrom-rev="19" 
    action="A">/branches/i18n/Hello.en.txt</path> 
</paths> 
</logentry> 
<logentry 
    revision="23"> 
<author>lazybadger</author> 
<date>2010-07-17T00:05:00.997500Z</date> 
<paths> 
<path 
    prop-mods="true" 
    text-mods="false" 
    kind="file" 
    copyfrom-path="/branches/i18n/Hello.fr.txt" 
    copyfrom-rev="22" 
    action="A">/branches/i18n/Beaujour.txt</path> 
<path 
    prop-mods="false" 
    text-mods="false" 
    kind="file" 
    copyfrom-path="/branches/i18n/Hello.de.txt" 
    copyfrom-rev="20" 
    action="A">/branches/i18n/GuterTag.txt</path> 
<path 
    prop-mods="false" 
    text-mods="false" 
    kind="file" 
    copyfrom-path="/branches/i18n/Hello.en.txt" 
    copyfrom-rev="20" 
    action="A">/branches/i18n/Hello.txt</path> 
<path 
    prop-mods="false" 
    text-mods="false" 
    kind="file" 
    action="D">/branches/i18n/Hello.en.txt</path> 
<path 
    prop-mods="false" 
    text-mods="false" 
    kind="file" 
    action="D">/branches/i18n/Hello.fr.txt</path> 
<path 
    prop-mods="false" 
    text-mods="false" 
    kind="file" 
    action="D">/branches/i18n/Hello.de.txt</path> 
</paths> 
</logentry> 
</log> 

在用於文件名或目錄,並且在同一節點內部action="A"路徑節點檢查copyfrom-path新文件名的參數。對於優秀的XML樹解析器來說並不是一件大事,但我更喜歡純文本和眼睛

+0

謝謝。這證實了我發佈這個問題後周五晚些時候開始的事情。我已經有一些XML解析發生在另一部分.......所以這是我要走的路。我認爲前提是我仍然需要獲得HEAD修訂版....並尋找一些倒退的關鍵標籤。但是(在我的情況下),我只是有很多不需要的xml,我忽略了(從版本334到1444的所有更改)......但我不認爲我有選擇。我會稍後更新,這是今天在我的盤子上。 – granadaCoder 2013-03-04 14:59:52

+0

@granadaCoder - 如果您必須確定「誰現在是這個舊文件」,那麼您可以對HEAD中的任何內容做任何事 - 您只知道OLDNAME @ OLDREV – 2013-03-05 04:04:45