From 7554a13593b3482067959655d193c1d0bf6af872 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Wed, 24 May 2023 00:30:19 +0800 Subject: [PATCH] Support changing git config through `app.ini`, use `diff.algorithm=histogram` by default (#24860) Close #13454 , Close #23255, Close #14697 (and maybe more related issues) Many users have the requirement to customize the git config. This PR introduces an easy way: put the options in Gitea's app.ini `[git.config]`, then the config options will be applied to git config. And it can support more flexible default config values, eg: now `diff.algorithm=histogram` by default. According to: https://stackoverflow.com/a/32367597/4754037 , `histogram diff` is efficient and doesn't like to cause server-side problems. --------- Co-authored-by: silverwind Co-authored-by: KN4CK3R Co-authored-by: Giteabot --- .../config-cheat-sheet.en-us.md | 19 +++++++++++++------ doc/administration/customizing-gitea.en-us.md | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/doc/administration/config-cheat-sheet.en-us.md b/doc/administration/config-cheat-sheet.en-us.md index 349c480a..035c94cd 100644 --- a/doc/administration/config-cheat-sheet.en-us.md +++ b/doc/administration/config-cheat-sheet.en-us.md @@ -1054,12 +1054,7 @@ Default templates for project boards: - `DISABLE_CORE_PROTECT_NTFS`: **false** Set to true to forcibly set `core.protectNTFS` to false. - `DISABLE_PARTIAL_CLONE`: **false** Disable the usage of using partial clones for git. -## Git - Reflog settings (`git.reflog`) - -- `ENABLED`: **true** Set to true to enable Git to write changes to reflogs in each repo. -- `EXPIRATION`: **90** Reflog entry lifetime, in days. Entries are removed opportunistically by Git. - -## Git - Timeout settings (`git.timeout`) +### Git - Timeout settings (`git.timeout`) - `DEFAULT`: **360**: Git operations default timeout seconds. - `MIGRATE`: **600**: Migrate external repositories timeout seconds. @@ -1068,6 +1063,18 @@ Default templates for project boards: - `PULL`: **300**: Git pull from internal repositories timeout seconds. - `GC`: **60**: Git repository GC timeout seconds. +### Git - Reflog settings (`git.reflog`) + +- `ENABLED`: **true** Set to true to enable Git to write changes to reflogs in each repo. +- `EXPIRATION`: **90** Reflog entry lifetime, in days. Entries are removed opportunistically by Git. + +### Git - Config options (`git.config`) + +The key/value pairs in this section will be used as git config. +This section only does "set" config, a removed config key from this section won't be removed from git config automatically. The format is `some.configKey = value`. + +- `diff.algorithm`: **histogram** + ## Metrics (`metrics`) - `ENABLED`: **false**: Enables /metrics endpoint for prometheus. diff --git a/doc/administration/customizing-gitea.en-us.md b/doc/administration/customizing-gitea.en-us.md index 54ce2a71..4c8b1c90 100644 --- a/doc/administration/customizing-gitea.en-us.md +++ b/doc/administration/customizing-gitea.en-us.md @@ -282,6 +282,22 @@ Place custom files in corresponding sub-folder under `custom/options`. To add custom .gitignore, add a file with existing [.gitignore rules](https://git-scm.com/docs/gitignore) in it to `$GITEA_CUSTOM/options/gitignore` +## Customizing the git configuration + +Starting with Gitea 1.20, you can customize the git configuration via the `git.config` section. + +### Enabling signed git pushes + +To enable signed git pushes, set these two options: + +```ini +[git.config] +receive.advertisePushOptions = true +receive.certNonceSeed = +``` + +`certNonceSeed` should be set to a random string and be kept secret. + ### Labels Starting with Gitea 1.19, you can add a file that follows the [YAML label format](https://github.com/go-gitea/gitea/blob/main/options/label/Advanced.yaml) to `$GITEA_CUSTOM/options/label`: