有没有办法让一个已知的目录或文件.....从较旧的版本....然后(知道它已被“移动”以后)找到它被移动的位置?
实施例
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”(或文件夹“FolderA”)。 而我正试图找出它在HEAD修订版中的位置。
你可能在想,“为什么他需要这个?” 我希望我没有。但是我需要30分钟才能给你修改历史记录。 (<<糟糕的笑话)。
......... EDIT ..............
还有一些额外的东西。
一:svn info从来没有给我足够的信息来找到新家。主要原因是嵌套目录。 我svn移动一些文件夹,但该文件夹有几个嵌套在1级以上的子文件夹。
然而,使用svn diff,虽然我得到了很多信息(在修订版1444和333之间)......信息就在那里。我的意思是,svn diff任务需要33秒,但是一旦它返回,我在xml中有信息,我正在解析它并将它放在一些简单的DTO对象中。
两个(相同的文件名发布):
如果我的项目的原始位置是:
https://mySvnServer.com/Repo1/SoccerClubWebSite/scripts/validationRoutines.js
然后我做一个svn diff(详细),我在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 Segment Matcher试图找到匹配.....通过向后工作Uri。
实施例。 在上面的两个项目中....我首先尝试URI的最后一段。
validationRoutines.js
我在该字符串上有2个匹配项。因此,我不知道我关心的确切问题。 我抓住了父文件夹并使用它。
scripts/validationRoutines.js
仍然是两场比赛。
现在我添加第三个uri段(从右到左工作)
SoccerClubWebSite/scripts/validationRoutines.js
现在我发现了一场独特的比赛。
所以我现在所做的基本模板是:
(1) svn diff 333:HEAD
(fyi,这给了很多信息)。
(2) 解析xml并将其推送到简单的DTO对象。
(3) 在该xml中查找“add”或“modified”的项目,并使用基于上面列出的段逻辑的匹配系统。
(3b)因为同一个文件可能被多次修改(因此多次出现在xml中(但是使用相同的头部svn-path)...我不得不做一个GROUP BY(svn- LINQ小组在这里运作良好。
我还需要针对更多示例测试我的逻辑。但是你,这不是微不足道的。
答案 0 :(得分:1)
您通常使用TortoiseSVN日志查看器。执行以下步骤:
MyFile01.txt
,请键入MyFile01\.txt
(在.
之前使用反斜杠,以确保将该点视为字符,而不是任何字符。)delete
与add
相结合(Subversion没有移动状态)。我已经用文件readme.txt
做了一个例子,这个结果对话框(在创建和移动文件之后)看起来像这样:
如您所见,突出显示的文本(红色)显示所选版本的已删除文件(最后一行)和添加的文件(第二行),这是TortoiseSVN显示移动的方式。
有关详细信息,请参阅文档中的Filtering Log Messages。
使用svn log
命令可以实现类似的功能(请参阅documentation为您提供第一部分:
grep
命令。这取决于你的操作系统(Windows?)和你的shell技能。答案 1 :(得分: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现在必须标识为/branches/i18n/hello.txt(在检测到来自/ trunk的更改路径字符串中)
r20 - 根据“from /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>
在路径节点中检查copyfrom-path
的文件名或目录,并在同一节点action="A"
参数内查找新文件名。对于优秀的XML树解析器来说,这不是一件大事,但我更喜欢纯文本和眼睛