【问题标题】:Check which variables, methods & objects got changed between 2 SVN Revisions检查哪些变量、方法和对象在 2 个 SVN 版本之间发生了变化
【发布时间】:2023-03-20 06:29:01
【问题描述】:

我正在尝试找出在文件的 2 个修订版之间发生了哪些变量、方法和对象的更改。

是否有可能在 SVN 中或通过编写 Java 程序使用 SVNKit 找到它?

例如: File1.java

public class File1 {
    String name;
    float rating;
    String teacher;
    int numofstudents;

    public int fees(){
      numofstudents = 26;
      return 500*1.18;
    }
    if (rating < 5){
      int a = numofstudents;
    }
}

文件2.java

public class File1 {
String name;
float rating;
String teacher;
int numofstudents;
float marks;

public int fees(){
    numofstudents = 25;
    return 500*1.18;
}

if (rating < 4){
    int a = rating;
}
}

预期的输出应该是:

"以下值已更改: 变量 - numofstudents,a; 方法 - 费用;

"

通过编写普通的 Java 程序,我可以打印出两个文件之间的差异,但我无法打印出我的预期输出

【问题讨论】:

  • 你为什么需要一个应用程序?任何 svn 插件都带有“比较”功能
  • 我找不到任何 SVN 插件所期望的输出。使用“比较”功能,我可以找到行差异,例如所有行都已添加、删除或修改。我希望是否可以从输出中提取更改的变量以显示哪些变量已更改。
  • 你是什么意思:“改变的变量”?那是一行更改的代码,因此它在您自动获取的列表中。只需检查它在本地代码中的哪一行并滚动到该行
  • @Stultuske.. 我正在尝试构建一个小型应用程序,该应用程序将显示在 2 个修订版之间已修改的所有变量、方法或对象的列表以及已修改的文件。我正在寻找创建一个表,其中一个轴将列出方法、变量,另一个轴将列出所有文件。我不确定我是否能够清楚地表达自己。
  • 在我看来,您想保留“业务逻辑”更改的“技术日志”......这有什么好处?文件?这意味着您将实现尚未记录的逻辑?

标签: java svn svnkit


【解决方案1】:

我也在这方面工作。我这样做是因为我需要在我的项目中自动化构建过程。

您可以通过 java 的 svnkit 库或通过从 java 程序调用命令行窗口来执行此操作,然后在打开的 cmd 进程中运行 svn 命令以确定差异(前提是您正在使用 Windows 操作系统...当然)。

SVNKIT 方法 -- 我无法获得通过 svnkit 获得差异的整个工作代码,但我知道下面的代码应该能够让我获得差异 -

repository.diff(repository.getLocation(), 23180l, 23182l, null, false, SVNDepth.INFINITY, false, null, null);

SVNKit 文档不是很好。我仍在寻找工作示例。

使用 CMD 从 JAVA 程序方法调用 SVN 命令 --

这对我有用。但是您必须在安装了 tortoise svn 并使用工作用户凭据配置的 Windows 机器上运行它。这是必需的,因为 svn 命令在连接到 svn repo 时会在内部使用保存的用户凭据。

以下是确定两个修订之间差异的命令(如果您的文件在提供的修订之间有更改,则此命令将显示文件的差异)--

svn diff -r <fromRevisionNo>:<toRevisionNo> <Path of svn branch>

您可以使用以下代码通过 java 程序调用此命令 --

String cmd = "svn diff -r <fromRevisionNo>:<toRevisionNo> <Path of svn branch>";
    Runtime run = Runtime.getRuntime();
    Process pr = run.exec(cmd);
    pr.waitFor();
    BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
    String line = "";
    while ((line=buf.readLine())!=null) {
    System.out.println(line);

使用上面的代码,我们从 java 程序打开一个 cmd 窗口,然后从中运行 svn 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多