From 1b8a7c4d8582e244dc7ac3e3b76a0e05090ad60c Mon Sep 17 00:00:00 2001 From: Giteabot Date: Mon, 26 Oct 2026 11:43:11 -0700 Subject: [PATCH] fix(git): default to the gc maintenance strategy (#40022) (#40029) Backport #40022 by @silverwind 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. Co-authored-by: silverwind --- 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 dacd66b860b..43005ade6d9 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -811,6 +811,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 c8324c76413..bec53301532 100644 --- a/modules/setting/git.go +++ b/modules/setting/git.go @@ -89,6 +89,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 secGitReflog := rootCfg.Section("git.reflog") if secGitReflog.HasKey("ENABLED") { diff --git a/modules/setting/git_test.go b/modules/setting/git_test.go index 1101ec5bed2..372eed067d8 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]