Merge branch 'jc/push-to-checkout'
Extending the js/push-to-deploy topic, the behaviour of "git push" when updating the working tree and the index with an update to the branch that is checked out can be tweaked by push-to-checkout hook. * jc/push-to-checkout: receive-pack: support push-to-checkout hook receive-pack: refactor updateInstead codepath
This commit is contained in:
@ -2158,11 +2158,15 @@ receive.denyCurrentBranch::
|
||||
message. Defaults to "refuse".
|
||||
+
|
||||
Another option is "updateInstead" which will update the working
|
||||
directory (must be clean) if pushing into the current branch. This option is
|
||||
tree if pushing into the current branch. This option is
|
||||
intended for synchronizing working directories when one side is not easily
|
||||
accessible via interactive ssh (e.g. a live web site, hence the requirement
|
||||
that the working directory be clean). This mode also comes in handy when
|
||||
developing inside a VM to test and fix code on different Operating Systems.
|
||||
+
|
||||
By default, "updateInstead" will refuse the push if the working tree or
|
||||
the index have any difference from the HEAD, but the `push-to-checkout`
|
||||
hook can be used to customize this. See linkgit:githooks[5].
|
||||
|
||||
receive.denyNonFastForwards::
|
||||
If set to true, git-receive-pack will deny a ref update which is
|
||||
|
@ -341,6 +341,36 @@ Both standard output and standard error output are forwarded to
|
||||
'git send-pack' on the other end, so you can simply `echo` messages
|
||||
for the user.
|
||||
|
||||
push-to-checkout
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
This hook is invoked by 'git-receive-pack' on the remote repository,
|
||||
which happens when a 'git push' is done on a local repository, when
|
||||
the push tries to update the branch that is currently checked out
|
||||
and the `receive.denyCurrentBranch` configuration variable is set to
|
||||
`updateInstead`. Such a push by default is refused if the working
|
||||
tree and the index of the remote repository has any difference from
|
||||
the currently checked out commit; when both the working tree and the
|
||||
index match the current commit, they are updated to match the newly
|
||||
pushed tip of the branch. This hook is to be used to override the
|
||||
default behaviour.
|
||||
|
||||
The hook receives the commit with which the tip of the current
|
||||
branch is going to be updated. It can exit with a non-zero status
|
||||
to refuse the push (when it does so, it must not modify the index or
|
||||
the working tree). Or it can make any necessary changes to the
|
||||
working tree and to the index to bring them to the desired state
|
||||
when the tip of the current branch is updated to the new commit, and
|
||||
exit with a zero status.
|
||||
|
||||
For example, the hook can simply run `git read-tree -u -m HEAD "$1"`
|
||||
in order to emulate 'git fetch' that is run in the reverse direction
|
||||
with `git push`, as the two-tree form of `read-tree -u -m` is
|
||||
essentially the same as `git checkout` that switches branches while
|
||||
keeping the local changes in the working tree that do not interfere
|
||||
with the difference between the branches.
|
||||
|
||||
|
||||
pre-auto-gc
|
||||
~~~~~~~~~~~
|
||||
|
||||
|
Reference in New Issue
Block a user