【问题标题】:Version Control with java program, using DOS commandjava程序的版本控制,使用DOS命令
【发布时间】: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


【解决方案1】:

如果相关人员之前没有任何任何 VCS的经验,那么基于Git是最糟糕的选择

对于

他希望能够随时回到以前的版本。 同时,他想看看修改

这是任何 SCM 的自然任务,他可以选择这个(“任何”)具有良好而不过度膨胀的 GUI 的 VCS(对于线性历史,即使 SVN|TortoiseSVN 也是不错的选择)

从 Java 调用 Git 是变态,真的

【讨论】:

  • 根据我所掌握的少量信息,我同意,但我不明白他如何能够获得任何版本的代码。例如,如果有一个键为“a1b2c3”的commit,然后是几个commit,就不可能得到对应版本的“a1b2c3”commit。而对于这个人来说,这是一个真正的问题。
  • Matthieu,您可以使用任何版本控制系统执行该操作,返回到某个提交。您不必构建任何 Java 包装器或任何东西。如果您不理解该声明,那么我建议您查看任何 vcs(git、svn)并尝试了解它是如何工作的。 (无论如何,如果您打算构建 Java 包装器,您应该了解它......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2023-01-13
  • 2010-10-01
  • 2014-03-25
  • 2011-10-25
  • 1970-01-01
相关资源
最近更新 更多