gpt4 book ai didi

git (ls-remote) - 列出按创建日期排序的 "remote"分支

转载 作者:行者123 更新时间:2023-12-04 04:23:00 29 4
gpt4 key购买 nike

我知道使用下面的 git 命令我可以列出我所有的“远程”分支...

[someone@someone-pc somerepo]$ git ls-remote
Username for 'https://somegit.com': someone
Password for 'https://someone@somegit.com':
From https://somegit.com/somepath/somerepo.git
32b73a94a2ef1be27298a7bbf6670670c9ad4892 HEAD
99cfe797ee2f4cd3fc12ea1aef8dc4ea0f3538c7 refs/heads/a_branch
687332d5e82436d806fea2c22ac5e8772e73b33a refs/heads/b_branch
b1d82987dd87b99c505282cbcdf1d4c4d36be2d2 refs/heads/c_branch
32d4a73e686524e50a92880ddbd744d1363834bb refs/heads/d_branch
097ad2a9a69399996f7e1864436d483b2a85e3c1 refs/heads/e_branch
1e92bb0aa448a840e04928272759a3941774575b refs/heads/f_branch
32b73a94a2ef1be27298a7bbf6670670c9ad4892 refs/heads/master

问题:有没有办法列出这些按创建日期排序的分支?

谢谢! =D


更新:

为了说明,我想要像 gitlab 分支列表那样排序的东西......

gitlab branches list

最佳答案

git ls-remote 所做的是调用另一个 Git——您在上面看到的 URL 中的那个——并询问它的引用:HEAD、分支名称、标签名称等。但它发送的唯一信息是这些名称和哈希 ID。

正如我在上面的评论中指出的那样,每个提交——由一个哈希 ID 表示,这是提交的真实名称——有两个时间戳。1获得一个或两个时间戳,您必须有 commit。所以这意味着 git ls-remote 通常是不够的:您可能没有从其他 Git 获得其哈希 ID 的提交。

首先需要运行的是 git fetch,它以相同的方式启动:它调用其他一些 Git,并从中获取它们的分支、标签等的列表,以及哈希每个名称代表的 ID。然后,对于它们的分支,您的 Git 将创建或更新您的远程跟踪名称:例如,它们的master 成为您的origin/master。他们的 develop 成为您的 origin/develop。无论它们有什么名称——refs/heads/* 是完整的形式——你的 Git 会创建或更新你自己的相应 refs/remotes/origin/* 名称。但在您的 Git 可以执行此操作之前,您的 Git 也必须自己获得提交,因此对于他们拥有但您没有、您的 Git 需要的任何提交,您的 Git 会获得这些提交。

您可能需要添加 --prune(简称 git fetch -p)来指示您自己的 Git 删除您现在没有的任何远程跟踪名称longer 对应于他们 Git 中的一个分支。如果不这样做,您将永远保留陈旧的远程跟踪名称(或直到您明确删除它们)。这并不是真正的有害,而是杂乱无章。

现在您拥有他们的所有提交,以及您自己尚未发送的任何提交。您还拥有他们所有的名称,并更改为您的远程跟踪名称。

您可以使用 git branch -r 查看这些分支。 git branch 的默认排序顺序是 alphabetic-within-group.2 但是你可以给一个 --sort=key 选项:3

git branch -r --sort=authordate

或:

git branch -r --sort=committerdate

这将根据存储在每个远程跟踪名称指向的提交中的相应时间戳进行排序。

因此:

git fetch -p
git branch -r --sort=committerdate

应该能得到你想要的(除非你想要作者日期;见脚注 1)。

(另外:我喜欢在我的每用户配置中将 fetch.prune 配置为 true,这样所有的提取都像 git fetch --prune 总是。)


1这两个时间戳是作者时间戳提交者时间戳。在许多情况下,两者都持有相同的日期和时间。一个新的提交通常会得到相同的,然后如果你将提交复制到一个新的和改进的提交,通过 git commit --amendgit rebase 或任何许多其他方法可以做到这一点,新的和改进的提交具有旧提交的作者信息,以及您和现在作为提交者的信息。

2从技术上讲,它比字母更像 ASCII-betic 或 UTF-8-betic:数字在大写字母之前,大写字母在小写字母之前。

3您的 git branch 需要足够新才能拥有 --sort 选项,该选项被引入到 git branch 在 Git 2.7 中。如果您的 Git 较旧,请考虑使用 git for-each-ref

关于git (ls-remote) - 列出按创建日期排序的 "remote"分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58613633/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com