diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini index 17343aaea15..a58e52cb416 100644 --- a/custom/conf/app.example.ini +++ b/custom/conf/app.example.ini @@ -592,6 +592,8 @@ PATH = ;LARGE_OBJECT_THRESHOLD = 1048576 ;; Set to true to forcibly set core.protectNTFS=false ;DISABLE_CORE_PROTECT_NTFS=false +;; Disable the usage of using partial clones for git. +;DISABLE_PARTIAL_CLONE = false ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -790,7 +792,7 @@ PATH = ;PREFERRED_LICENSES = Apache License 2.0,MIT License ;; ;; Disable the ability to interact with repositories using the HTTP protocol -;;DISABLE_HTTP_GIT = false +;DISABLE_HTTP_GIT = false ;; ;; Value for Access-Control-Allow-Origin header, default is not to present ;; WARNING: This may be harmful to your website if you do not give it a right value. diff --git a/docs/content/doc/advanced/clone-filter.en-us.md b/docs/content/doc/advanced/clone-filter.en-us.md index 1e6ea020d9f..ba2fdf104cc 100644 --- a/docs/content/doc/advanced/clone-filter.en-us.md +++ b/docs/content/doc/advanced/clone-filter.en-us.md @@ -27,36 +27,9 @@ on the client is at least the same as on the server (or later). Login to Gitea server as admin and head to Site Administration -> Configuration to see Git version of the server. -By default, clone filters are disabled, which cause the server to ignore -`--filter` option. +By default, clone filters are enabled, unless `DISABLE_PARTIAL_CLONE` under +`[git]` is set to `true`. -To enable clone filters on per-repo basis, edit the repo's `config` on -repository location. Consult `ROOT` option on `repository` section of -Gitea configuration (`app.ini`) for the exact location. For example, to -enable clone filters for `some-repo`, edit -`/var/gitea/data/gitea-repositories/some-user/some-repo.git/config` and add: - -```ini -[uploadpack] - allowfilter = true -``` - -To enable clone filters globally, add that config above to `~/.gitconfig` -of user that run Gitea (for example `git`). - -Alternatively, you can use `git config` to set the option. - -To enable for a specific repo: - -```bash -cd /var/gitea/data/gitea-repositories/some-user/some-repo.git -git config --local uploadpack.allowfilter true -``` -To enable globally, login as user that run Gitea and: - -```bash -git config --global uploadpack.allowfilter true -``` See [GitHub blog post: Get up to speed with partial clone](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/) for common use cases of clone filters (blobless and treeless clones), and diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 247ea935eef..dfafa84175e 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -933,6 +933,8 @@ NB: You must have `DISABLE_ROUTER_LOG` set to `false` for this option to take ef - `VERBOSE_PUSH_DELAY`: **5s**: Only print verbose information if push takes longer than this delay. - `LARGE_OBJECT_THRESHOLD`: **1048576**: (Go-Git only), don't cache objects greater than this in memory. (Set to 0 to disable.) - `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 - Timeout settings (`git.timeout`) - `DEFAUlT`: **360**: Git operations default timeout seconds. - `MIGRATE`: **600**: Migrate external repositories timeout seconds. diff --git a/modules/git/git.go b/modules/git/git.go index e6c34979e86..cca5ce6714f 100644 --- a/modules/git/git.go +++ b/modules/git/git.go @@ -146,6 +146,11 @@ func Init(ctx context.Context) error { GlobalCommandArgs = append(GlobalCommandArgs, "-c", "protocol.version=2") } + // By default partial clones are disabled, enable them from git v2.22 + if !setting.Git.DisablePartialClone && CheckGitVersionAtLeast("2.22") == nil { + GlobalCommandArgs = append(GlobalCommandArgs, "-c", "uploadpack.allowfilter=true") + } + // Save current git version on init to gitVersion otherwise it would require an RWMutex if err := LoadGitVersion(); err != nil { return err diff --git a/modules/setting/git.go b/modules/setting/git.go index aaa65ed81c7..4cf7e722e77 100644 --- a/modules/setting/git.go +++ b/modules/setting/git.go @@ -27,6 +27,7 @@ var ( PullRequestPushMessage bool LargeObjectThreshold int64 DisableCoreProtectNTFS bool + DisablePartialClone bool Timeout struct { Default int Migrate int @@ -48,6 +49,7 @@ var ( EnableAutoGitWireProtocol: true, PullRequestPushMessage: true, LargeObjectThreshold: 1024 * 1024, + DisablePartialClone: false, Timeout: struct { Default int Migrate int