远程查找分支上的git提交和标记信息

远程查找分支上的git提交和标记信息,git,Git,是否可以远程确定SHA值和Git标记,即不克隆Git repo 我想确定回购协议是否有n次提交,然后触发一个作业。但是,克隆每个回购协议或维护一个回购协议将非常耗时。通过git ls remote,您可以获得所需的一些信息。这让您的Git调用其他Git,并要求其他Git列出其分支和标记名以及相应的哈希ID 您的主题行要求: git提交和分支上的标记信息 但这个短语的形式不正确。标记信息,特别是你所说的任何短语都不在分支上;标记名最多与分支名重合,或者可以从一个或多个分支名访问标记的对象。由于一次

是否可以远程确定SHA值和Git标记,即不克隆Git repo

我想确定回购协议是否有n次提交,然后触发一个作业。但是,克隆每个回购协议或维护一个回购协议将非常耗时。

通过git ls remote,您可以获得所需的一些信息。这让您的Git调用其他Git,并要求其他Git列出其分支和标记名以及相应的哈希ID

您的主题行要求:

git提交和分支上的标记信息

但这个短语的形式不正确。标记信息,特别是你所说的任何短语都不在分支上;标记名最多与分支名重合,或者可以从一个或多个分支名访问标记的对象。由于一次提交可以在几十个分支上进行,因此标记名标识多个分支上的提交并不罕见

分支名称是一个名称,其完整拼写形式以refs/heads/开头:例如,分支主节点实际上是refs/heads/master。标记名是一个名称,其完整拼写形式以refs/tags/开头:例如,tagv2.1实际上是refs/tags/v2.1。git ls remote命令让git告诉您的git它们的全名,因此带有refs/heads/的是它们的分支名称,例如,以及它们相应的hash id

每个名称只包含一个哈希ID。两个不同的名称可以包含两个不同的哈希ID,或者相同的哈希ID

分支名称受到约束:它们始终保留某些现有有效提交的哈希ID。标记名通常包含带注释标记对象的哈希ID,而不是提交对象的哈希ID。当标记名包含标记对象的哈希ID时,将得到两行输出。以下是git ls remote的输出片段:

这告诉我们,他们的Git的主代码识别commit 274b9cc25322d9ee79aa8e6d4e86f0ffe5ced925。他们的Git v2.2.0识别标记对象74d2a8cf12bf102a8cedaf66736503bb3fe88dfb,而该标记对象又识别另一个对象,在本例中为B260D265E189728B26E5056AC6FFAB6A7D588DA

仅从这一点无法判断对象B260D265E189728B26E5056AC6FFAB6A7D588DA的类型,但实际上它是一个提交。为了找到答案,我们让Git将对象传输到Git,然后使用Git cat file-t

我想确定回购是否发生了n次提交

如果n在这里代表一个数字,您不能这样做:计算提交需要您拥有提交

如果n在这里代表new,你不能这么做。假设您发现它们有一个分支名称B,该名称现在标识提交C1。明天,您查询他们的存储库,发现他们有分支名称B,但现在它标识了提交C2。可以看出分支名称已移动,但无法确定它是否已向前移动以进行新的提交。它可能向后移动以放弃提交,或者横向移动以使一些旧的提交消失,而现在可以访问一些新的提交

克隆每个回购协议或维护一个回购协议将非常耗时

根据您的网络速度,克隆存储库可能需要一段时间。但是,在大多数情况下,更新克隆非常快,特别是当克隆是使用-bare或-mirror制作的,因此没有要更新的工作树时。因此,这通常是要走的路

有些构建系统每次都进行一次新的克隆,但使用浅克隆以避免覆盖大多数对象。这是处理大型存储库的一种成功方法

1我在这里使用分支上的短语,意思是可以从该分支名称标识的分支提示访问提交。描述这一点的另一种方式是提交包含在分支中。有关此主题的更多信息,请参阅。

您可以通过git ls remote获得所需的一些信息。这让您的Git调用其他Git,并要求其他Git列出其分支和标记名以及相应的哈希ID

您的主题行要求:

git提交和分支上的标记信息

但这个短语的形式不正确。标记信息,特别是你所说的任何短语都不在分支上;标记名最多与分支名重合,或者可以从一个或多个分支名访问标记的对象。由于一次提交可以在几十个分支上进行,因此标记名标识多个分支上的提交并不罕见

分支名称是一个名称,其完整拼写形式以refs/heads/开头:例如,分支主节点实际上是refs/heads/master。标记名是一个名称,其完整拼写形式以refs/tags/开头:例如,tagv2.1实际上是refs/tags/v2.1。git ls remote命令让git告诉您的git它们的全名,因此带有refs/heads/的是它们的分支名称,例如,以及它们相应的hash id

每个名称只包含一个哈希ID。两个不同的 租金名称可以包含两个不同的哈希ID,或者相同的哈希ID

分支名称受到约束:它们始终保留某些现有有效提交的哈希ID。标记名通常包含带注释标记对象的哈希ID,而不是提交对象的哈希ID。当标记名包含标记对象的哈希ID时,将得到两行输出。以下是git ls remote的输出片段:

这告诉我们,他们的Git的主代码识别commit 274b9cc25322d9ee79aa8e6d4e86f0ffe5ced925。他们的Git v2.2.0识别标记对象74d2a8cf12bf102a8cedaf66736503bb3fe88dfb,而该标记对象又识别另一个对象,在本例中为B260D265E189728B26E5056AC6FFAB6A7D588DA

仅从这一点无法判断对象B260D265E189728B26E5056AC6FFAB6A7D588DA的类型,但实际上它是一个提交。为了找到答案,我们让Git将对象传输到Git,然后使用Git cat file-t

我想确定回购是否发生了n次提交

如果n在这里代表一个数字,您不能这样做:计算提交需要您拥有提交

如果n在这里代表new,你不能这么做。假设您发现它们有一个分支名称B,该名称现在标识提交C1。明天,您查询他们的存储库,发现他们有分支名称B,但现在它标识了提交C2。可以看出分支名称已移动,但无法确定它是否已向前移动以进行新的提交。它可能向后移动以放弃提交,或者横向移动以使一些旧的提交消失,而现在可以访问一些新的提交

克隆每个回购协议或维护一个回购协议将非常耗时

根据您的网络速度,克隆存储库可能需要一段时间。但是,在大多数情况下,更新克隆非常快,特别是当克隆是使用-bare或-mirror制作的,因此没有要更新的工作树时。因此,这通常是要走的路

有些构建系统每次都进行一次新的克隆,但使用浅克隆以避免覆盖大多数对象。这是处理大型存储库的一种成功方法

1我在这里使用分支上的短语,意思是可以从该分支名称标识的分支提示访问提交。描述这一点的另一种方式是提交包含在分支中。有关此主题的更多信息,请参阅

274b9cc25322d9ee79aa8e6d4e86f0ffe5ced925        refs/heads/master
...
74d2a8cf12bf102a8cedaf66736503bb3fe88dfb        refs/tags/v2.2.0
b260d265e189728b26e50506ac6ffab6a7d588da        refs/tags/v2.2.0^{}
3fabc04268de1cec1628265810769e33dae44cd8        refs/tags/v2.2.0-rc0
4ace7ff4557350b7e0b57d024a2ea311b332e01d        refs/tags/v2.2.0-rc0^{}