【发布时间】:2012-04-08 10:22:29
【问题描述】:
短篇小说:
如标题所说,如何使用 JGit 从签出文件的索引中获取 SHA1 或哈希?
长篇大论:
我正在编写一个 GUI 应用程序并使用 JGit 来修改一个文件。因此,用户可以打开一个窗口,该窗口在一个漂亮的表格中包含该文件的所有修订。
用户可以进行更改并提交。此外,用户可以及时返回并从表中选择较旧的版本进行处理。
这个工作流程非常简单。我在内部对 JGit 所做的是我只使用一个分支(主分支)。 HEAD 总是指向这个分支,这个分支的尖端总是最新的提交。当用户选择旧版本时,我只需实例化 CheckoutCommand 类,使用 addPath() 设置文件路径并使用 setName() 使用分支 master。
上述结果导致 HEAD 指向 master 分支,而 master 分支又指向最新版本(不是用户选择的版本)。但是索引和工作目录本身现在处于用户选择的修订版中。
所以,最后,我希望能够向用户展示表中的哪些修订当前已签出或激活,或者您想要调用的任何内容。此修订将在下面的屏幕截图中突出显示。但我不能为此目的使用主分支的尖端。我需要以某种方式从索引中获取 SHA1。
有一个问题posted 这正是我想要的,但在 JGit 的上下文中(问题的作者使用 git)。
编辑: 稍加分析后,我发现我可以使用 JGit DirCache 来访问索引的内容。因此,使用DirCache 类,我可以像在question 中一样在索引中获取文件的SHA1。但是现在我看到这个散列与我签出的修订散列不同。意思是,我不能使用这种方法来确定表中的哪个修订被签出。
那么,有没有其他方法可以使用我所描述的工作流程来确定用户选择进行哪些修订?甚至,也许有人可以提出不同的方法。
我目前解决这个问题的方法是使用 JGit AddNoteCommand。当用户签出修订版时,我将简单地在此修订版中添加一个带有一些“键:值”的注释。该键将指示修订是否已签出。谁有更好的建议?
【问题讨论】: