我试图找出哪些变量,方法和&对象在文件的2个修订版之间进行了更改。
是否可以通过编写Java程序在SVN中找到它或使用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;
}
}
File2.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;
}
}
预期输出应为:
&#34;以下值已更改: 变量 - numofstudents,a; 方法 - 费用;
&#34;
通过编写普通的Java程序,我可以打印出2个文件之间的差异,但是我无法打印出我预期的输出
答案 0 :(得分:0)
我也在这个领域工作。我这样做是因为我需要在我的项目中自动化构建过程。
您可以通过java的svnkit库或通过从java程序调用命令行窗口来执行此操作,然后在打开的cmd进程中运行svn命令以确定差异(前提是您正在使用Windows操作系统......当然)。
SVNKIT 方法 -- 我无法通过 svnkit 获得获取差异的整个工作代码,但我知道下面的代码应该能够让我获得差异 -
repository.diff(repository.getLocation(), 23180l, 23182l, null, false, SVNDepth.INFINITY, false, null, null);
SVNKit 文档并不是那么好。我仍在寻找工作示例。
从 Java 程序方法中使用 CMD 调用 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 命令。