【发布时间】:2015-03-05 04:27:50
【问题描述】:
我正在尝试做一些可能很愚蠢的事情,我需要你的帮助来澄清事情。
有人问我如何处理固件的版本,所以我告诉他关于 git、svn 以及这两个东西附带的所有 GUI。 但这并不是他所需要的。他是唯一一个在这个固件上工作的人,他只需要处理不同的版本。例如,如果他在 v3 上工作,他希望能够随时回到以前的版本。同时,他希望看到类似“git diff”命令的修改。
为了给他想要的程序,我正在尝试编写一个 java 程序(也许这不是最好的选择?),它将使用他需要的一些 git 命令(commit、diff、reset...)这也将提供他需要的额外功能。
如果您有任何建议或我遗漏了什么,请告诉我。
现在,关于 java 程序:
我在使用“git diff”命令时遇到了一些问题。在shell中,没有问题我得到了所有的红线和绿线,但是在java控制台中,什么都没有显示。 您还应该知道“git status”(例如)命令在 shell 和 java 控制台中都能完美运行。
这是我的代码:
Scanner keyboard = new Scanner(System.in);
System.out.println("enter a git command");
String command = keyboard.nextLine();
keyboard.close();
File execute = new File("C:/.../MyGitRepository");
Process process = Runtime.getRuntime().exec(command, null, execute);
Scanner s = new Scanner(process.getInputStream());
StringBuilder text = new StringBuilder();
while (s.hasNextLine()) {
text.append(s.nextLine());
text.append("\n");
}
s.close();
int result = process.waitFor();
System.out.printf("Process exited with result %d and output %s%n", result, text );
使用“git diff”命令,我得到了这个:
enter a git command
git diff
通过“git status”命令我得到了这个:
enter a git command
git status
Process exited with result 0 and output On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: MyFile1.xml
modified: MyFile2.xml
modified: MyFile3.xml
...
感谢您的帮助!
【问题讨论】:
-
他是唯一一个在这个固件上工作的人,他只需要处理不同的版本。在此声明中,我认为没有任何理由不使用 svn(或现有的替代方案)。如果他还需要完整版本,也许 Maven 可以提供一些帮助?
-
他为什么不正常使用Git?你为什么要围绕它创建某种可怕的包装器?
-
感谢@Stultuske 的建议,但我在官方网站上看到,Maven 适用于任何基于 Java 的项目。也许不清楚,但有问题的固件不在 java 中,它在 C 中并包含在其他文件中(.c、.h、.xml,...)。所以 Maven 可能不是最好的解决方案?
-
@Kayaman,这家伙不是开发人员,他不了解 Git 的工作原理。使用 GUI 和特定文档可能没问题,但他还需要随时返回到任何版本...
-
不管怎样,用Java调用Git是无稽之谈。基本的 Git 工作流程非常容易理解,每个人都可以学习,尤其是使用 GUI 前端
标签: java version-control command