太多标签会导致Git出现任何问题吗?

ML-*_*L-- 22 git

我必须每天在Git存储库中创建几个标签.
当我有很多标签时,它会使我的存储库缓慢或导致其他问题吗?

注意:我正在使用GitHub,但请回答一般问题.

Von*_*onC 12

(注释)标签不会使Git变得迟钝,只会更难以使用,因为您将很难在所有中间标签中找到相关标签.

最糟糕的情况是,如果必须显示数千个标签,它可能会使您的Web界面(如GitHub)变得迟缓.

也许不需要推送所有这些标签,在这种情况下,您可以考虑制作中间本地"轻量级"标签.


And*_*y E 6

是的,许多标签可能会减慢您的一些日常 git 命令的速度,包括git pullgit fetchgit push。但除非您有数千个,否则您不必担心。

我正在开发一个 monorepo,目前有 102,448 个标签 ( git tag | wc -l)。我们的 Jenkins 管道标记它创建的每个构建,无论是拉取请求构建还是发布构建。这是它的影响方式git fetch

$ time git fetch

________________________________________________________
Executed in   65.70 secs    fish           external
   usr time    2.60 secs    0.11 millis    2.60 secs
   sys time    0.84 secs    1.30 millis    0.84 secs
Run Code Online (Sandbox Code Playgroud)

以下是它的运行速度--no-tags

$ time git fetch --no-tags

________________________________________________________
Executed in    3.17 secs      fish           external
   usr time  943.50 millis    0.09 millis  943.41 millis
   sys time   60.52 millis    1.02 millis   59.49 millis
Run Code Online (Sandbox Code Playgroud)

这相差一分多钟。您可以--no-tags通过在配置中进行设置来设置默认值(如果您有很多标签):

$ git config --add remote.origin.tagopt --no-tags 
Run Code Online (Sandbox Code Playgroud)

origin如果需要,请更换不同的遥控器。git push即使本地和远程之间没有任何变化,这也是类似的情况。

$ time git push
Everything up-to-date

________________________________________________________
Executed in   50.60 secs      fish           external
   usr time  701.75 millis    0.07 millis  701.68 millis
   sys time  401.84 millis    1.12 millis  400.71 millis
Run Code Online (Sandbox Code Playgroud)

发生什么了?您可以使用GIT_TRACE_PACKET环境变量检查流量:

$ env GIT_TRACE_PACKET=2 git push
Run Code Online (Sandbox Code Playgroud)

在输出中的某个位置,您会看到许多像这样的行,每个标签对应一个:

08:38:56.890217 pkt-line.c:80           packet:         push< dca8b5a27bab04c286d4b55e47df22303e06295d refs/tags/actions/2.0.569-PR-31183-1839146375
Run Code Online (Sandbox Code Playgroud)

唯一的缺点是,git push没有配置来避免每个标签的数据包。


Joe*_*ams 5

在Windows上使用Git 2.8.1时,当标签很多(大约15000个)时,某些命令的执行速度会有些慢,其中包括:

  • git log(带有--decorate

  • git status

  • 在Visual Studio中查看历史记录。

  • 分离head时使用命令提示符(因为Git Bash在当前目录旁边漂亮地打印了当前修订版)。

这些命令都检查标记以装饰显示的修订。这些命令中的每个命令所花费的时间比不包含标签的时间长约1-2秒。

更新:运行git gc--prune不像以前那样)极大地加快了Git的速度。真正的罪魁祸首可能是频繁地重新设基。