82f67ee13f
Reachability bitmaps are designed to speed up the "counting objects" phase of generating a pack during a clone or fetch. They are not optimized for Git clients sending a small topic branch via "git push". In some cases (see [1]), using reachability bitmaps during "git push" can cause significant performance regressions. Add a new "push.useBitmaps" configuration variable to allow users to tell "git push" not to use bitmaps. We already have "pack.bitmaps" that controls the use of bitmaps, but a separate configuration variable allows the reachability bitmaps to still be used in other areas, such as "git upload-pack", while disabling it only for "git push". [1]: https://lore.kernel.org/git/87zhoz8b9o.fsf@evledraar.gmail.com/ Signed-off-by: Kyle Zhao <kylezhao@tencent.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
145 lines
5.8 KiB
Plaintext
145 lines
5.8 KiB
Plaintext
push.autoSetupRemote::
|
|
If set to "true" assume `--set-upstream` on default push when no
|
|
upstream tracking exists for the current branch; this option
|
|
takes effect with push.default options 'simple', 'upstream',
|
|
and 'current'. It is useful if by default you want new branches
|
|
to be pushed to the default remote (like the behavior of
|
|
'push.default=current') and you also want the upstream tracking
|
|
to be set. Workflows most likely to benefit from this option are
|
|
'simple' central workflows where all branches are expected to
|
|
have the same name on the remote.
|
|
|
|
push.default::
|
|
Defines the action `git push` should take if no refspec is
|
|
given (whether from the command-line, config, or elsewhere).
|
|
Different values are well-suited for
|
|
specific workflows; for instance, in a purely central workflow
|
|
(i.e. the fetch source is equal to the push destination),
|
|
`upstream` is probably what you want. Possible values are:
|
|
+
|
|
--
|
|
|
|
* `nothing` - do not push anything (error out) unless a refspec is
|
|
given. This is primarily meant for people who want to
|
|
avoid mistakes by always being explicit.
|
|
|
|
* `current` - push the current branch to update a branch with the same
|
|
name on the receiving end. Works in both central and non-central
|
|
workflows.
|
|
|
|
* `upstream` - push the current branch back to the branch whose
|
|
changes are usually integrated into the current branch (which is
|
|
called `@{upstream}`). This mode only makes sense if you are
|
|
pushing to the same repository you would normally pull from
|
|
(i.e. central workflow).
|
|
|
|
* `tracking` - This is a deprecated synonym for `upstream`.
|
|
|
|
* `simple` - pushes the current branch with the same name on the remote.
|
|
+
|
|
If you are working on a centralized workflow (pushing to the same repository you
|
|
pull from, which is typically `origin`), then you need to configure an upstream
|
|
branch with the same name.
|
|
+
|
|
This mode is the default since Git 2.0, and is the safest option suited for
|
|
beginners.
|
|
|
|
* `matching` - push all branches having the same name on both ends.
|
|
This makes the repository you are pushing to remember the set of
|
|
branches that will be pushed out (e.g. if you always push 'maint'
|
|
and 'master' there and no other branches, the repository you push
|
|
to will have these two branches, and your local 'maint' and
|
|
'master' will be pushed there).
|
|
+
|
|
To use this mode effectively, you have to make sure _all_ the
|
|
branches you would push out are ready to be pushed out before
|
|
running 'git push', as the whole point of this mode is to allow you
|
|
to push all of the branches in one go. If you usually finish work
|
|
on only one branch and push out the result, while other branches are
|
|
unfinished, this mode is not for you. Also this mode is not
|
|
suitable for pushing into a shared central repository, as other
|
|
people may add new branches there, or update the tip of existing
|
|
branches outside your control.
|
|
+
|
|
This used to be the default, but not since Git 2.0 (`simple` is the
|
|
new default).
|
|
|
|
--
|
|
|
|
push.followTags::
|
|
If set to true enable `--follow-tags` option by default. You
|
|
may override this configuration at time of push by specifying
|
|
`--no-follow-tags`.
|
|
|
|
push.gpgSign::
|
|
May be set to a boolean value, or the string 'if-asked'. A true
|
|
value causes all pushes to be GPG signed, as if `--signed` is
|
|
passed to linkgit:git-push[1]. The string 'if-asked' causes
|
|
pushes to be signed if the server supports it, as if
|
|
`--signed=if-asked` is passed to 'git push'. A false value may
|
|
override a value from a lower-priority config file. An explicit
|
|
command-line flag always overrides this config option.
|
|
|
|
push.pushOption::
|
|
When no `--push-option=<option>` argument is given from the
|
|
command line, `git push` behaves as if each <value> of
|
|
this variable is given as `--push-option=<value>`.
|
|
+
|
|
This is a multi-valued variable, and an empty value can be used in a
|
|
higher priority configuration file (e.g. `.git/config` in a
|
|
repository) to clear the values inherited from a lower priority
|
|
configuration files (e.g. `$HOME/.gitconfig`).
|
|
+
|
|
----
|
|
|
|
Example:
|
|
|
|
/etc/gitconfig
|
|
push.pushoption = a
|
|
push.pushoption = b
|
|
|
|
~/.gitconfig
|
|
push.pushoption = c
|
|
|
|
repo/.git/config
|
|
push.pushoption =
|
|
push.pushoption = b
|
|
|
|
This will result in only b (a and c are cleared).
|
|
|
|
----
|
|
|
|
push.recurseSubmodules::
|
|
Make sure all submodule commits used by the revisions to be pushed
|
|
are available on a remote-tracking branch. If the value is 'check'
|
|
then Git will verify that all submodule commits that changed in the
|
|
revisions to be pushed are available on at least one remote of the
|
|
submodule. If any commits are missing, the push will be aborted and
|
|
exit with non-zero status. If the value is 'on-demand' then all
|
|
submodules that changed in the revisions to be pushed will be
|
|
pushed. If on-demand was not able to push all necessary revisions
|
|
it will also be aborted and exit with non-zero status. If the value
|
|
is 'no' then default behavior of ignoring submodules when pushing
|
|
is retained. You may override this configuration at time of push by
|
|
specifying '--recurse-submodules=check|on-demand|no'.
|
|
If not set, 'no' is used by default, unless 'submodule.recurse' is
|
|
set (in which case a 'true' value means 'on-demand').
|
|
|
|
push.useForceIfIncludes::
|
|
If set to "true", it is equivalent to specifying
|
|
`--force-if-includes` as an option to linkgit:git-push[1]
|
|
in the command line. Adding `--no-force-if-includes` at the
|
|
time of push overrides this configuration setting.
|
|
|
|
push.negotiate::
|
|
If set to "true", attempt to reduce the size of the packfile
|
|
sent by rounds of negotiation in which the client and the
|
|
server attempt to find commits in common. If "false", Git will
|
|
rely solely on the server's ref advertisement to find commits
|
|
in common.
|
|
|
|
push.useBitmaps::
|
|
If set to "false", disable use of bitmaps for "git push" even if
|
|
`pack.useBitmaps` is "true", without preventing other git operations
|
|
from using bitmaps. Default is true.
|