From 8321b09912eb02d8036d75ac873d6bd9a103f3d3 Mon Sep 17 00:00:00 2001 From: silverwind Date: Mon, 26 Oct 2026 15:05:34 +0100 Subject: [PATCH] fix(git): default to the gc maintenance strategy (#40022) Git 2.54 made "geometric" the default auto-maintenance strategy. Pushes wait for its foreground reflog expiry (https://github.com/go-gitea/gitea/issues/39693), and its detached repacks race with filesystem operations, as in https://github.com/go-gitea/gitea/actions/runs/40236681252/job/121299686933. Pin the pre-2.54 "gc" strategy, older git ignores it. https://github.com/go-gitea/gitea/pull/39745 is the more complete fix which disables the auto-maintenance. --- custom/conf/app.example.ini | 1 + modules/setting/git.go | 1 + modules/setting/git_test.go | 1 + 3 files changed, 3 insertions(+) diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index 249d05e29fe..d52170805bf 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -810,6 +810,7 @@ LEVEL = Info ;[git.config] ;diff.algorithm = histogram ;core.logAllRefUpdates = true +;maintenance.strategy = gc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/modules/setting/git.go b/modules/setting/git.go index f3cf8e9ca38..014230c538f 100644 --- a/modules/setting/git.go +++ b/modules/setting/git.go @@ -87,6 +87,7 @@ func loadGitFrom(rootCfg ConfigProvider) { GitConfig.Options = make(map[string]string) GitConfig.SetOption("diff.algorithm", "histogram") GitConfig.SetOption("core.logAllRefUpdates", "true") + GitConfig.SetOption("maintenance.strategy", "gc") // git 2.54's push-time default "geometric" delays pushes and repacks concurrently with other writes for _, key := range secGitConfig.Keys() { GitConfig.SetOption(key.Name(), key.String()) diff --git a/modules/setting/git_test.go b/modules/setting/git_test.go index ee2a8bea377..4a1b3ffa762 100644 --- a/modules/setting/git_test.go +++ b/modules/setting/git_test.go @@ -27,6 +27,7 @@ a.b = 1 loadGitFrom(cfg) assert.Equal(t, "1", GitConfig.Options["a.b"]) assert.Equal(t, "histogram", GitConfig.Options["diff.algorithm"]) + assert.Equal(t, "gc", GitConfig.Options["maintenance.strategy"]) cfg, err = NewConfigProviderFromData(` [git.config]