jesseduffield / lazygit

simple terminal UI for git commands
MIT License
52.14k stars 1.82k forks source link

Lazygit very slow on osx sonoma and small repo #3980

Open diego898 opened 1 week ago

diego898 commented 1 week ago

Describe the bug lazygit is very slow to give diffs and slows down terminal even after exit for a few seconds

To Reproduce Steps to reproduce the behavior:

  1. launch lazygit
  2. scroll down some unstages changes
  3. observe "loading..."

Expected behavior Previously, on ubuntu it was lightning fast

Screenshots

https://github.com/user-attachments/assets/e605d8bd-59f5-4656-849e-e554ce3e26e9

Version info:

➜  ~ lazygit --version
commit=, build date=, build source=homebrew, version=0.44.1, os=darwin, arch=arm64, git version=2.47.0
➜  ~ git --version
git version 2.47.0
➜  ~ which git
/opt/homebrew/bin/git

Macosx sonoma 14.7

Additional context Ive also tried this using just the git that ships with mac (2.39) instead of homebrew - same issue Also on bash using native terminal app - same issue

lazygit logs:

➜  ~ lazygit --logs
Tailing log file /Users/dmesa/.local/state/lazygit/development.log

Oct 10 12:18:44 |INFO| refreshing the following scopes in sync mode: files
Oct 10 12:18:44 |INFO| Heap memory in use: 4.2 MB
Oct 10 12:18:44 |INFO| refreshed merge conflicts in 508.834µs
Oct 10 12:18:47 |INFO| git tag --list -n --sort=-creatordate (4.524746333s)
Oct 10 12:18:47 |INFO| postRefreshUpdate for tags took 20.5µs
Oct 10 12:18:49 |INFO| Receiving focus - refreshing
Oct 10 12:18:49 |INFO| refreshing all scopes in async mode
Oct 10 12:18:49 |DEBU| RunCommand command="git tag --list -n --sort=-creatordate"
Oct 10 12:18:49 |INFO| Refresh took 638µs
Oct 10 12:18:49 |DEBU| RunCommand command="git stash list -z --pretty=%ct|%gs"
Oct 10 12:18:52 |INFO| git status --untracked-files=all --porcelain -z --find-renames=50% (9.02547275s)
Oct 10 12:18:52 |DEBU| using cache for key status.showUntrackedFiles
Oct 10 12:18:52 |INFO| postRefreshUpdate for submodules took 15.708µs
Oct 10 12:18:52 |DEBU| RunCommand command="git status --untracked-files=all --porcelain -z --find-renames=50%"
Oct 10 12:18:52 |INFO| postRefreshUpdate for files took 788.542µs
Oct 10 12:18:54 |INFO| Heap memory in use: 6.3 MB
Oct 10 12:18:56 |INFO| git rev-parse --abbrev-ref --verify HEAD (13.5325895s)
Oct 10 12:18:56 |DEBU| RunCommand command="git merge-base master master@{u}"
Oct 10 12:18:56 |DEBU| RunCommand command="git merge-base HEAD refs/remotes/origin/master"
Oct 10 12:19:01 |INFO| git for-each-ref --sort=refname --format=%(refname:short) refs/remotes (18.03377775s)
Oct 10 12:19:01 |INFO| postRefreshUpdate for remotes took 188.667µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for remoteBranches took 5.083µs
Oct 10 12:19:01 |INFO| git merge-base HEAD refs/remotes/origin/master (4.858140375s)
Oct 10 12:19:01 |INFO| git -c log.showSignature=false log -g --abbrev=40 --format=%h%x00%ct%x00%gs%x00%p (18.392961875s)
Oct 10 12:19:01 |INFO| postRefreshUpdate for reflogCommits took 46.417µs
Oct 10 12:19:01 |DEBU| RunCommand command="git for-each-ref --sort=-committerdate --format=%(HEAD)%00%(refname:short)%00%(upstream:short)%00%(upstream:track)%00%(push:track)%00%(subject)%00%(objectname)%00%(committerdate:unix) refs/heads"
Oct 10 12:19:01 |INFO| git stash list -z --pretty=%ct|%gs (18.393094792s)
Oct 10 12:19:01 |INFO| postRefreshUpdate for stash took 7.125µs
Oct 10 12:19:01 |INFO| git status --untracked-files=all --porcelain -z --find-renames=50% (9.365037958s)
Oct 10 12:19:01 |INFO| refreshed files in 17.30980925s
Oct 10 12:19:01 |INFO| Refresh took 17.31084075s
Oct 10 12:19:01 |DEBU| using cache for key status.showUntrackedFiles
Oct 10 12:19:01 |INFO| refreshing the following scopes in sync mode: files
Oct 10 12:19:01 |INFO| refreshed merge conflicts in 46.667µs
Oct 10 12:19:01 |DEBU| RunCommand command="git status --untracked-files=all --porcelain -z --find-renames=50%"
Oct 10 12:19:01 |INFO| git stash list -z --pretty=%ct|%gs (12.692843791s)
Oct 10 12:19:01 |INFO| postRefreshUpdate for stash took 77.875µs
Oct 10 12:19:01 |INFO| git -c log.showSignature=false log -g --abbrev=40 --format=%h%x00%ct%x00%gs%x00%p (12.697166375s)
Oct 10 12:19:01 |INFO| postRefreshUpdate for reflogCommits took 34.541µs
Oct 10 12:19:01 |INFO| git merge-base master master@{u} (4.872367542s)
Oct 10 12:19:01 |INFO| git for-each-ref --sort=-committerdate --format=%(HEAD)%00%(refname:short)%00%(upstream:short)%00%(upstream:track)%00%(push:track)%00%(subject)%00%(objectname)%00%(committerdate:unix) refs/heads (16.405167ms)
Oct 10 12:19:01 |DEBU| RunCommand command="git worktree list --porcelain"
Oct 10 12:19:01 |INFO| git for-each-ref --sort=refname --format=%(refname:short) refs/remotes (12.706067333s)
Oct 10 12:19:01 |INFO| postRefreshUpdate for remotes took 121.375µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for remoteBranches took 8.958µs
Oct 10 12:19:01 |INFO| git tag --list -n --sort=-creatordate (12.706366083s)
Oct 10 12:19:01 |INFO| postRefreshUpdate for tags took 6.583µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for submodules took 15.917µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for files took 272.333µs
Oct 10 12:19:01 |INFO| git log HEAD --topo-order --oneline --pretty=format:%H%x00%at%x00%aN%x00%ae%x00%D%x00%p%x00%m%x00%s --abbrev=40 -300 --no-show-signature -- (4.890090375s)
Oct 10 12:19:01 |DEBU| using cache for key rebase.updateRefs
Oct 10 12:19:01 |INFO| postRefreshUpdate for commits took 181.167µs
Oct 10 12:19:01 |DEBU| RunCommand command="git rev-parse --abbrev-ref --verify HEAD"
Oct 10 12:19:01 |INFO| git status --untracked-files=all --porcelain -z --find-renames=50% (30.352167ms)
Oct 10 12:19:01 |INFO| git worktree list --porcelain (15.403375ms)
Oct 10 12:19:01 |DEBU| using cache for key status.showUntrackedFiles
Oct 10 12:19:01 |DEBU| RunCommand command="git -C /Users/dmesa/.dotfiles rev-parse --path-format=absolute --absolute-git-dir"
Oct 10 12:19:01 |DEBU| RunCommand command="git status --untracked-files=all --porcelain -z --find-renames=50%"
Oct 10 12:19:01 |INFO| git rev-parse --abbrev-ref --verify HEAD (8.756709ms)
Oct 10 12:19:01 |DEBU| RunCommand command="git merge-base master master@{u}"
Oct 10 12:19:01 |DEBU| RunCommand command="git merge-base HEAD refs/remotes/origin/master"
Oct 10 12:19:01 |INFO| postRefreshUpdate for submodules took 42.833µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for files took 555.166µs
Oct 10 12:19:01 |INFO| git -C /Users/dmesa/.dotfiles rev-parse --path-format=absolute --absolute-git-dir (11.147625ms)
Oct 10 12:19:01 |INFO| postRefreshUpdate for worktrees took 351.125µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for localBranches took 67.333µs
Oct 10 12:19:01 |INFO| git status --untracked-files=all --porcelain -z --find-renames=50% (18.914208ms)
Oct 10 12:19:01 |INFO| refreshed files in 50.704334ms
Oct 10 12:19:01 |INFO| Refresh took 50.925917ms
Oct 10 12:19:01 |INFO| git merge-base master master@{u} (14.426416ms)
Oct 10 12:19:01 |INFO| git log HEAD --topo-order --oneline --pretty=format:%H%x00%at%x00%aN%x00%ae%x00%D%x00%p%x00%m%x00%s --abbrev=40 -300 --no-show-signature -- (13.981791ms)
Oct 10 12:19:01 |INFO| git merge-base HEAD refs/remotes/origin/master (13.676041ms)
Oct 10 12:19:01 |DEBU| using cache for key rebase.updateRefs
Oct 10 12:19:01 |INFO| postRefreshUpdate for commits took 305.542µs
Oct 10 12:19:01 |DEBU| using cache for key rebase.updateRefs
Oct 10 12:19:01 |DEBU| RunCommand command="git for-each-ref --sort=-committerdate --format=%(HEAD)%00%(refname:short)%00%(upstream:short)%00%(upstream:track)%00%(push:track)%00%(subject)%00%(objectname)%00%(committerdate:unix) refs/heads"
Oct 10 12:19:01 |INFO| postRefreshUpdate for submodules took 46.375µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for files took 369.875µs
Oct 10 12:19:01 |INFO| git for-each-ref --sort=-committerdate --format=%(HEAD)%00%(refname:short)%00%(upstream:short)%00%(upstream:track)%00%(push:track)%00%(subject)%00%(objectname)%00%(committerdate:unix) refs/heads (8.750791ms)
Oct 10 12:19:01 |DEBU| RunCommand command="git worktree list --porcelain"
Oct 10 12:19:01 |INFO| git worktree list --porcelain (4.936083ms)
Oct 10 12:19:01 |DEBU| RunCommand command="git -C /Users/dmesa/.dotfiles rev-parse --path-format=absolute --absolute-git-dir"
Oct 10 12:19:01 |INFO| git -C /Users/dmesa/.dotfiles rev-parse --path-format=absolute --absolute-git-dir (4.649542ms)
Oct 10 12:19:01 |INFO| postRefreshUpdate for worktrees took 29.875µs
Oct 10 12:19:01 |INFO| postRefreshUpdate for localBranches took 56.583µs
Oct 10 12:19:01 |DEBU| using cache for key rebase.updateRefs
Oct 10 12:19:04 |INFO| Heap memory in use: 5.0 MB
Oct 10 12:19:04 |INFO| refreshing the following scopes in sync mode: files
Oct 10 12:19:04 |INFO| refreshed merge conflicts in 432.958µs
Oct 10 12:19:04 |DEBU| using cache for key status.showUntrackedFiles
Oct 10 12:19:04 |DEBU| RunCommand command="git status --untracked-files=all --porcelain -z --find-renames=50%"

Am I reading this log correctly that some git operations took 9s? 18s? etc?

mark2185 commented 1 week ago

There was a similar issue recently that was solved by updating delta.

Does this happen if you don't use delta as your pager?