Thread (4 messages) flat view 4 messages, 2 authors, 2016-06-16

Re: [RFC/PATCH v2] pull: add --set-upstream

From: Philip Oakley <hidden>
Date: 2016-06-16 02:19:45

From: "Erwan Mathoniere" <redacted>
quoted hunk ↗ jump to hunk
Implement `git pull [--set-upstream | -u] <remote> <refspecs>` that set
tracking to the remote branch the user just pulled from.

After successfully pulling from `<remote>`, for each `<refspec>`
described in format `<remote_branch>:<local_branch>`, set
`branch.<local_branch>.remote` to `<remote>` and
`branch.<local_branch>.merge` to `refs/heads/<remote_branch>`. If
`<refspec>` lacks `<local_branch>` in the previous format or directly
refers to a branch, use the current branch as `<local_branch>` in the
above configuration setting.

`git push` has already its `--set-upstream`, it makes sense to have its
symmetrical for `git pull`.

For a beginner, when trying to use argumentless `git pull` without
tracking information set, advising to use
`git branch --set-upstream-to` to set upstream can be quite confusing.
Using this `git pull --set-upstream` is easier and more natural.

Signed-off-by: Erwan Mathoniere <redacted>
Signed-off-by: Jordan De Gea <redacted>
Signed-off-by: Matthieu Moy <redacted>
---

Changes from v1:
- Code reshaped to :
 * warn + no-op when pulling from or to something that isn't a branch
or a configured remote
 * set upstream only after successfully merging/rebasing
- More relevant documentation
- Tests reshaped to be more independent from each others
- More tests (tags, detached heads, non-configured remote...)


For now, the documentation is quite hard to understand, but I didn't
figure how to explain without using too technical words. Should it stay
as it is or should I write something similar the above commit message?

Allowing to set non-configured repository as upstream isn't easy to
handle since the type of refspec must be checked and this is done by
verifying the existence of the remote-tracking branch at
`refs/remotes/<remote>/<branch>`.


Documentation/git-pull.txt |  18 +++++
builtin/pull.c             | 106 ++++++++++++++++++++++++++++-
t/t5544-pull-upstream.sh   | 164 
+++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 285 insertions(+), 3 deletions(-)
create mode 100755 t/t5544-pull-upstream.sh
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index d033b25..6ae5e58 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -93,6 +93,24 @@ OPTIONS
 has to be called afterwards to bring the work tree up to date with the
 merge result.

+-u::
+--set-upstream::
+ After successfully pulling from explicitly given <repository> and
s/from explicitly/from an explicitly/
+ <refspecs>, set the configuration of the local branches pulled on, so
s/branches pulled on/branches that were pulled/
+ that each one tracks the remote branch pulled from. If a configuration
+ already exists, it is overwriten. For example, with `git pull -u origin
+ branch` the current branch will track `branch` from `origin`.
++
+If two or more branches are pulled on the same local branch, only the 
last one
+in arguments will be tracked.
Is this specific to this pull --setupstream or a general worning ? i.e. that 
a second entry is created in the config file, or that only the last branch 
refspec will be added?
quoted hunk ↗ jump to hunk
++
+The given <repository> must be a configured remote. Can only set tracking 
to
+remote branches (e.g. can't set upstream to remote HEAD).
++
+Works symmetrically as `--set-upstream` for linkgit:git-push[1]. Allow 
using
+argumentless linkgit:git-pull[1] and other commands.  For more 
information, see
+`branch.<name>.merge` in linkgit:git-config[1].
+
Options related to merging
~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/builtin/pull.c b/builtin/pull.c
[snip] 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help