有没有办法从旧版本中获得一个已知的目录或文件......然后(知道它已经被“移动”在以后的时间)找出它被移动的位置?
例子。
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"
..........(现在假设有 1,000 多个其他签到,但没有更多的 svn 移动),所以我跳转到修订版 1444。) ..........
所以现在,如果我查看修订版 333,我有这个文件“MyFile01.txt”(或文件夹“FolderA”)。我正在尝试找出它在 HEAD 修订版中的位置。
你可能会想,“他为什么需要这个?” 我希望我没有。但是我需要 30 分钟才能给你那个修订历史。(<< 坏笑话)。
.........编辑..............
所以一些额外的东西。
一: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。
例子。在上述 2 项中......我首先尝试了 URI 的最后一段。
validationRoutines.js
我在那个字符串上有 2 个匹配项。因此,我不知道我关心的确切一个。我抓住父母文件夹并使用它。
scripts/validationRoutines.js
还是两场比赛。
现在我添加第三个 uri 段(从右到左工作)
SoccerClubWebSite/scripts/validationRoutines.js
现在我找到了一个独特的匹配。
所以我现在做的基本模板是:
(1) svn 差异 333:HEAD
(仅供参考,这会返回很多信息)。
(2)解析xml并将其推送到简单的DTO对象。
(3) 在该 xml 中查找“添加”或“修改”的项目,并使用基于上面列出的段逻辑的匹配系统。
(3b) 因为同一个文件可能已被修改多次(因此多次出现在 xml 中(但使用相同的头 svn-path)...我不得不做一个 GROUP BY(svn-path)。 LINQ group by 在这里工作得很好。
我仍然需要根据更多示例来测试我的逻辑。但是YOUCH,这不是微不足道的。