是的,许多标签可能会减慢您的一些日常 git 命令的速度,包括git pull
、git fetch
和git 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
没有配置来避免每个标签的数据包。
在Windows上使用Git 2.8.1时,当标签很多(大约15000个)时,某些命令的执行速度会有些慢,其中包括:
git log
(带有--decorate
)
git status
在Visual Studio中查看历史记录。
分离head时使用命令提示符(因为Git Bash在当前目录旁边漂亮地打印了当前修订版)。
这些命令都检查标记以装饰显示的修订。这些命令中的每个命令所花费的时间比不包含标签的时间长约1-2秒。
更新:运行git gc
(--prune
不像以前那样)极大地加快了Git的速度。真正的罪魁祸首可能是频繁地重新设基。
归档时间: |
|
查看次数: |
6679 次 |
最近记录: |