我正在将Git集成添加到我的Visual Studio扩展Diff All Files,这允许快速区分(即比较)团队资源管理器窗口中的所有文件与先前版本。我使用Git Changes页面(在团队资源管理器中),因为当我得到the Microsoft.TeamFoundation.Git.Controls.Extensibility.IChangesExt service时,IncludedChanges属性中的文件包含磁盘上的完整文件路径。但是,在使用Git Commit Details页面时,我得到the Microsoft.TeamFoundation.Git.Controls.Extensibility.ICommitDetailsExt service,其Changes属性仅包含相对于git分支的文件路径。
我正在使用the LibGit2Sharp library与Git存储库进行交互,并且能够访问git存储库LibGit2Sharp需要存储库中文件的路径。由于ICommitDetailsExt Changes属性仅包含相对于git repo的文件路径,因此我不知道如何获取Git仓库的路径(因此我可以检索要比较的文件的先前版本)。
起初我以为我可以使用DTE对象访问解决方案文件的路径,但是意识到可以从团队资源管理器查看挂起的更改和之前提交的Git仓库,而无需打开解决方案,这样就行不通了。
那么我如何知道Git Commit Details页面显示的提交来自哪些? ICommitDetailsExt服务上的其他任何属性似乎都没有我所拥有的存储库信息(即repo中文件的完整文件路径)。是否有我可以获得的不同服务可以为Git提供商提供信息?
我还发布了this question on the MSDN forums,希望微软可以提供答案。
提前致谢。
答案 0 :(得分:5)
虽然可能并不理想 - 一个选项(对于VS 2013 Update 3+和VS 2015),是使用IGitExt扩展点来获取当前的活动存储库。这是在Visual Studio 2013 Update 3中添加的,因此这对早期客户端不起作用。 IGitExt包含一个获取当前ActiveRepositories的属性(当前只包含一个项目)。
我没有找到关于msdn的文档(但是),但是您可以查看GitHub for Visual Studio扩展,看看它们如何将它用于getting the IGitExt service和accessing the ActiveRepositories属性的示例。 / p>