gpt4 book ai didi

java - 使用SVNkit从SVN存储库下载每个版本中的所有文件-请帮助

转载 作者:行者123 更新时间:2023-12-01 05:39:46 24 4
gpt4 key购买 nike

这是我的问题:

我正在做一个项目,这是我的毕业论文的一部分。我正在尝试连接到不同的开源项目存储库,并从源文件中获取信息。实际上,我们分析了该项目的代码以及在此期间所做的更改。换句话说,我们想看看软件如何发展并指定所做的更改。因此,我们需要使用SVNKit连接到存储库,并为每个源文件下载其更改的每个修订版本的内容。

例如,假设我们有一个具有初始目录结构的项目:


目录/

-file1.java

-file2.java


第一次提交对dirA / file1.java进行更改,第二次提交对dirA / file2.java和file1.java进行更改。我们想分析两个文件(file1.java和file2.java)在初始状态下的代码,然后分析在第一次提交和第二次提交期间在file1.java进行的更改以及在第二次提交期间在file2.java进行的更改。

第三次提交创建目录和文件:


目录B /

-file3.java
目录/目录

-file4.java


以与上述相同的方式,我们要分析dirB / file3.java和dirA / dirC / file4.java的代码,以及我们要分析(主)目录结构的更改方式。

第4次提交将文件file3.java复制到dirA / dirC /目录并对该文件进行更改。同样,我们要分析复制操作如何更改目录结构,并分析提交前后的file3.java内容。

因为我们是面向代码的,所以我们希望从存储库及其所有修订中获取所有源文件。对于特定文件的每个修订,我们都希望当前修订的内容(从第一个修订开始)以及上一个修订的内容,直到最后一个修订。由于不必在每次提交时更改文件(可以将其复制或删除),因此无需下载具有相同内容的重复文件。

我知道有一种方法可以通过递归执行对文件内容的向后diff来获取文件的原始状态,方法是仅使文件的内容位于文件的最后修订版中。例如,在上一次修订时具有dirA / file1.java的内容(在第二次提交时创建的目录),并且具有diff输出,我们可以像在此修订版之前(在第二次提交之前)那样检索文件的状态。这样,无需下载每个修订版的每个文件的内容。因此,我们只需要在第一个修订版中下载文件的内容,然后下载每个修订版的每个diff输出(如果有),并执行正向diff即可在提交后检索状态。

说明:

1-在版本1中,file1.java具有以下内容:

"Content at revision 1 (initial state)"


2-在版本2中,此文件被修改为具有以下内容:

"Content at revision 1 (initial state)
Modification at revision 2 (line added)"


3-在版本3中,此文件被修改为具有以下内容:

"Modification at revision 2 (line added)
Modification at revision 3 (line added)
First line from revision 1 was removed"


如果我们获得file1.java的日志,我们将有三个条目,每个条目一个(对应于修订版1、2、3)。对于这三个修订,我们都希望检索文件内容,因为每次对源文件进行提交(更改)时,我们都会分析代码修改。
我们知道如何以一种简单的方式执行此操作:SVNRepository.getFile(...)。这种方法的问题是,如果我们有1个文件已被修改1000,则必须将其内容下载1000次(每次下载一个不同的版本号)。也就是说,对于一个包含100个源文件和每个文件大约1000个修改的小型项目,我们应该获得100,000个不同的内容!!!另一种方法是获取最新修订版本和每个先前修订版本的文件内容,以获取diff输出。比我们可以(向后)应用diff输出来检索所有先前版本的文件内容。也就是说,我们最小化带宽。
这是我正在寻找的解决方案,或者如果有更好的解决方案,您很高兴为您提供帮助。

您能否为我提供一些有关如何使用SVNKit实现此类功能的帮助。如果您提供一些简短的代码示例,或者必须使用哪些类和方法,这将非常有用,这样我就可以阅读Java文档。每一个帮助将不胜感激。

先感谢您,
猫王

最佳答案

运行日志/修订历史记录。从项目的开头开始,并查看每个提交中的修改文件。当您看到文件更改/添加/删除/复制/移动(您可以在提交信息中看到)时,下载该修订版的文件内容,并在下次看到该文件更改时记住它。然后,每次更改时,您只拥有文件内容。

您是否看过SVN套件示例/教程?


http://wiki.svnkit.com/Printing_Out_File_Contents
http://wiki.svnkit.com/Printing_Out_Repository_History

关于java - 使用SVNkit从SVN存储库下载每个版本中的所有文件-请帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com