2013-03-01 53 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