' git ls-remote'命令参数,用于限制返回的行数

时间:2017-07-22 10:20:35

标签: git

我们可以使用git ls-remote命令获取给定git repo的提交列表,例如this discussion

对于具有大量提交/标记的repo,这个命令花了我们很长时间 - 我们正在为它寻找一个参数和/或任何其他命令来限制返回行的数量,例如只读取返回列表中的前3行。

我们怎么做到这一点?

P.S。

我的google searchour site search没什么用处。

1 个答案:

答案 0 :(得分:6)

git ls-remotefetching the full list of refs from the remote and then filtering it locally投放:

int cmd_ls_remote(int argc, const char **argv, const char *prefix)
{
   ...

    transport = transport_get(remote, NULL);
    if (uploadpack != NULL)
        transport_set_option(transport, TRANS_OPT_UPLOADPACK, uploadpack);

/* Get all refs from the remote */
    ref = transport_get_remote_refs(transport);
    if (transport_disconnect(transport))
        return 1;

    if (!dest && !quiet)
        fprintf(stderr, "From %s\n", *remote->url);

/* Filter the list of all refs */
    for ( ; ref; ref = ref->next) {
        if (!check_ref_type(ref, flags))
            continue;
        if (!tail_match(pattern, ref->name))
            continue;
        if (show_symref_target && ref->symref)
            printf("ref: %s\t%s\n", ref->symref, ref->name);
        printf("%s\t%s\n", oid_to_hex(&ref->old_oid), ref->name);
        status = 0; /* we found something */
    }
    return status;
}

<强>更新

根据this page, explaining git transfer protocols,如果遥控器支持哑协议,则可以直接获取远程refs/heads/branchname文件(例如使用curl)。

  

哑巴协议

     

如果您要设置一个通过HTTP以只读方式提供服务的存储库,则可能会使用哑协议。该协议称为“哑”,因为它在传输过程中不需要服务器端的Git特定代码; fetch进程是一系列HTTP GET请求,客户端可以在服务器上假设Git存储库的布局。

     

...

否则,当使用智能协议时,从远程发送的第一条数据始终是所有远程引用的列表,即通过智能协议连接到远程的任何git命令就像git ls-remote一样在内部运行(从技术上讲,所有这些命令都调用transport_get_remote_refs()函数)。在这种情况下,遗憾的是,没有办法加快查询速度,甚至没有解决方法。

  

智能协议

     

...

     

上传数据

     

要将数据上传到远程进程,Git使用send-packreceive-pack进程。 send-pack进程在客户端上运行,并连接到远程端的receive-pack进程。

     

...

     

git-receive-pack命令立即响应一行   它目前的每个参考

     

...

     

正在下载数据

     

下载数据时,fetch-packupload-pack进程   参与其中。客户端启动fetch-pack进程   连接到远程端的upload-pack进程进行协商   什么数据将被传输下来。

     

...

     

fetch-pack连接后,upload-pack会发回类似的内容   这个:... 这与receive-pack响应的非常相似,但是   能力是不同的,即所有引用的列表+一些   其他数据)。

     

...