gpt4 book ai didi

git - 我可以让 Git 在不实际提取提交数据的情况下获取存储库标签列表吗?

转载 作者:行者123 更新时间:2023-12-04 17:36:36 24 4
gpt4 key购买 nike

我有一个浅层 Git 存储库,其创建方式如下:

mkdir repo
cd repo
git init
git remote add origin $URL
git fetch --depth 1 origin $SHA

作为我构建过程的一部分,我想使用 git describe --tags相对于其最近的祖先标签来描述修订。由于我刚刚获取了我需要的特定修订版,因此它无法执行此操作,因为它不知道我提交的任何祖先。

于是,我想到写一个简单的 bash根据需要加深历史的脚本:
GIT_HEAD=$(git rev-parse HEAD)
until git describe --tags
do
git fetch --deepen 100 origin $GIT_HEAD
done

这不起作用,因为,正如 git-fetch 的文档一样说:

--depth= Limit fetching to the specified number of commits from the tip of each remote branch history. If fetching to a shallow repository created by git clone with --depth= option (see git- clone(1)), deepen or shorten the history to the specified number of commits. Tags for the deepened commits are not fetched.



然后我尝试使用 git fetch --tags获取标签列表,这是可行的,但它也会获取每个标签的提交数据。我正在使用的存储库具有大量历史记录和大量标签,这会导致大量磁盘/网络/时间使用(这就是我使用浅克隆开始的原因!)。

有没有办法让 Git 只获取标签的 SHA,这样我就可以在尝试加深历史记录时将它们与我的存储库的修订列表进行匹配?或者,有没有一种方法可以对存储库的历史进行浅层获取,同时还可以获取与该深度相关联的标签?

最佳答案

我能够通过使用稍微复杂一点的 bash 来完成这项工作。脚本。这个想法是,从一个浅的存储库开始,我一次迭代地加深一个提交块的历史,在每个块中查找我可以从远程获取的标签(使用 git ls-remote --tags 获取标签引用列表,感谢@ElpieKay 的建议)。我重复这个过程,直到找到一些祖先标签,然后获取它们。

# Save the SHA that we're looking backward from.
GIT_HEAD=$(git rev-parse HEAD)
# Number of commits to grab at a time when deepening our commit history.
GIT_FETCH_CHUNK=250
# Loop until we have found some ancestor tags.
ANCESTOR_TAGS=""
while [ -z "$ANCESTOR_TAGS" ]; do
# Deepen the Git history by a chunk of commits to see if we can find a tag ancestor.
git fetch --deepen $GIT_FETCH_CHUNK origin $GIT_HEAD
# Get a list of remote tags and iterate over them.
while read line; do
# Tokenize the output, with the SHA in the first column and the tag name in the second.
TOKENS=($line)
# Check to see if our repository contains the specified SHA.
if git branch --contains ${TOKENS[0]} >/dev/null 2>&1; then
ANCESTOR_TAGS="$ANCESTOR_TAGS ${TOKENS[1]}:${TOKENS[1]}"
fi
done <<< "$(git ls-remote --tags)"
done

# Fetch the ancestor tags that we found.
git fetch origin --no-tags $ANCESTOR_TAGS

# Now, we can describe the current revision.
git describe --tags

关于git - 我可以让 Git 在不实际提取提交数据的情况下获取存储库标签列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477321/

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