mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Enable partial clone by default (#18195)
- Enable partial clones(which are by default disabled from git) by default, unless configured otherwise. - Resolves #18190
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user