【问题标题】:Git: getting info about a change without a local repository?Git:在没有本地存储库的情况下获取有关更改的信息?
【发布时间】:2011-02-14 15:33:55
【问题描述】:

我的程序可以通过 ssh 远程访问 git 存储库,有时需要获取有关特定 git 提交的信息(如提交消息)。如何在没有存储库的本地克隆的情况下查询远程 git 存储库以获取此类信息?

【问题讨论】:

    标签: git


    【解决方案1】:

    我只知道git ls-remote 来查找可用的标签和分支及其最新的提交ID。您可以使用它来检查是否已对分支进行了新的提交。

    【讨论】:

    • ls-remote 仍然要求您拥有一个(本地)存储库,该存储库具有对远程的引用。而要获取实际的更新信息,你需要先从那个仓库中获取,然后与完全克隆的本地仓库没有区别。
    • @poke:不正确。 git ls-remote <url> 在没有存储库的情况下工作。不过,确实,这些 refnames 和 SHA1 可能对您没有多大用处。
    • 您可以在远程存储库上调用ls-remote,而无需先获取它。但是,如果您想要日志消息之类的内容,据我所知,您仍然需要获取本地副本。
    【解决方案2】:

    您可以可能做到这一点,方法是模拟 git 已经在内部执行的大量操作,并大量手动使用 git plumbing(低级)命令。然而,如果你这样做,你不仅需要自己做很多非常低级的事情,而且最终你所做的事情效率也会很低(不仅是在你第二次请求信息时)。

    因此,我建议您从存储库中进行(高级)克隆并以这种方式使用它,即使该存储库仅临时存在。例如,如果您只想查看最新的提交,您可以通过创建 shallow 克隆轻松限制您克隆的内容(使用带有克隆的--depth 选项)。

    【讨论】:

    • 需要注意的是,一旦您进行了初始克隆,随后的带宽使用(来自获取)是最小的。不要被克隆的想法吓到 - 这是一项投资,然后是一些维护,而不是大量的持续成本。您的克隆也可以是裸露的 - 没有工作树!
    【解决方案3】:

    您可以使用 ssh 远程命令执行来执行任意 git 命令

    $ssh user@host "cd path/to/repo && git log"

    【讨论】:

      【解决方案4】:

      如果您使用 GithubBitbucket 或类似名称进行托管,您也可以使用存储库主机的 API。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-31
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多