Git 从Python应用程序的Gerrit存储库中检索标记列表

Git 从Python应用程序的Gerrit存储库中检索标记列表,git,python-2.7,gerrit,Git,Python 2.7,Gerrit,我有一个Python应用程序,它需要从Gerrit上托管的git存储库中检索所有标记的列表。存储库中的源代码不应该是全世界可读的,但是标记很好。如果用户只能读取特定存储库的标记,那么在Python应用程序中嵌入用户的凭据也是可以的 我们使用公钥身份验证通过ssh访问git 该应用程序由PyInstaller打包,需要在Linux和Windows上运行 到目前为止,我考虑的是: 可通过Gerrit解析gitweb 这是在我们切换到Gerrit之前实现的。 然而,访问gitweb允许用户阅读的不仅仅

我有一个Python应用程序,它需要从Gerrit上托管的git存储库中检索所有标记的列表。存储库中的源代码不应该是全世界可读的,但是标记很好。如果用户只能读取特定存储库的标记,那么在Python应用程序中嵌入用户的凭据也是可以的

我们使用公钥身份验证通过ssh访问git

该应用程序由PyInstaller打包,需要在Linux和Windows上运行

到目前为止,我考虑的是:

  • 可通过Gerrit解析gitweb

    这是在我们切换到Gerrit之前实现的。 然而,访问gitweb允许用户阅读的不仅仅是标签

  • 这个

    但是,这只允许,不允许标记

  • 从pythongit库中使用与gitlsremote相当的
    gitlsremote

    然而,我看到的pythongit库依赖于本机git命令行工具,我不想将其与应用程序捆绑在一起。(另一个原因是很难独立完成平台开发。)

  • 编写一个Gerrit插件,允许标签列表

    我没有尝试过这个,但如果没有更简单的解决方案,这将是它

  • 任何指向我已经考虑过的选项的指针都是值得赞赏的。

    两者都是Git的本机Python实现,但纵观它们的API文档,不清楚如何使用它们中的任何一个实现Git ls remote的等效功能


    如果git是通过HTTP(S)提供的,那么您可以使用一个简单的请求来获取可用的ref。Git源代码中记录了这些协议。

    我不确定是否有直接从远程检索标签的API。但是您可以通过本地克隆repo来实现这一点。Git是通过什么协议提供的?SSH、HTTP(S)还是本机Git协议?Gerrit支持通过HTTP向特定用户提供Git服务。我将研究你的第二个建议。我最终使用了urllib2并自己解析GitHTTP协议,这在本例中相当容易。下一个问题是,Gerrit现在不允许限制用户只读取标记……事实上,您不可能拥有一个仍然公开所有标记的读取受限git。此外,Gerrit会隐藏标记,除非您对至少一个可以到达该标记的分支具有读取权限。