Enable partial clone by default (#18195)

- Enable partial clones(which are by default disabled from git) by
default, unless configured otherwise.
- Resolves #18190
tokarchuk/v1.17
Gusted 3 years ago committed by GitHub
parent 1514e13bb8
commit 4b3bfd7e89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      custom/conf/app.example.ini
  2. 31
      docs/content/doc/advanced/clone-filter.en-us.md
  3. 2
      docs/content/doc/advanced/config-cheat-sheet.en-us.md
  4. 5
      modules/git/git.go
  5. 2
      modules/setting/git.go

@ -592,6 +592,8 @@ PATH =
;LARGE_OBJECT_THRESHOLD = 1048576 ;LARGE_OBJECT_THRESHOLD = 1048576
;; Set to true to forcibly set core.protectNTFS=false ;; Set to true to forcibly set core.protectNTFS=false
;DISABLE_CORE_PROTECT_NTFS=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 ;PREFERRED_LICENSES = Apache License 2.0,MIT License
;; ;;
;; Disable the ability to interact with repositories using the HTTP protocol ;; 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 ;; 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. ;; WARNING: This may be harmful to your website if you do not give it a right value.

@ -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 Gitea server as admin and head to Site Administration -> Configuration to
see Git version of the server. see Git version of the server.
By default, clone filters are disabled, which cause the server to ignore By default, clone filters are enabled, unless `DISABLE_PARTIAL_CLONE` under
`--filter` option. `[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/) 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 for common use cases of clone filters (blobless and treeless clones), and

@ -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. - `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.) - `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_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`) ## Git - Timeout settings (`git.timeout`)
- `DEFAUlT`: **360**: Git operations default timeout seconds. - `DEFAUlT`: **360**: Git operations default timeout seconds.
- `MIGRATE`: **600**: Migrate external repositories timeout seconds. - `MIGRATE`: **600**: Migrate external repositories timeout seconds.

@ -146,6 +146,11 @@ func Init(ctx context.Context) error {
GlobalCommandArgs = append(GlobalCommandArgs, "-c", "protocol.version=2") 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 // Save current git version on init to gitVersion otherwise it would require an RWMutex
if err := LoadGitVersion(); err != nil { if err := LoadGitVersion(); err != nil {
return err return err

@ -27,6 +27,7 @@ var (
PullRequestPushMessage bool PullRequestPushMessage bool
LargeObjectThreshold int64 LargeObjectThreshold int64
DisableCoreProtectNTFS bool DisableCoreProtectNTFS bool
DisablePartialClone bool
Timeout struct { Timeout struct {
Default int Default int
Migrate int Migrate int
@ -48,6 +49,7 @@ var (
EnableAutoGitWireProtocol: true, EnableAutoGitWireProtocol: true,
PullRequestPushMessage: true, PullRequestPushMessage: true,
LargeObjectThreshold: 1024 * 1024, LargeObjectThreshold: 1024 * 1024,
DisablePartialClone: false,
Timeout: struct { Timeout: struct {
Default int Default int
Migrate int Migrate int

Loading…
Cancel
Save