git-branch: add --track and --no-track options
PATCH 1/3 git-branch: add --track and --no-track options
In order to track and build on top of a branch 'topic' you track from your upstream repository, you often would end up doing this sequence:
git checkout -b mytopic origin/topic git config --add branch.mytopic.remote origin git config --add branch.mytopic.merge refs/heads/topic
This would first fork your own 'mytopic' branch from the 'topic' branch you track from the 'origin' repository; then it would set up two configuration variables so that 'git pull' without parameters does the right thing while you are on your own 'mytopic' branch.
This commit adds a --track option to git-branch, so that "git branch --track mytopic origin/topic" performs the latter two actions when creating your 'mytopic' branch.
If the configuration variable remote.NAME.trackintolocalbranches is set to true, you do not have to pass the --track option explicitly; further patches in this series allow setting the variable with a "git remote add" option. The configuration variable is off by default, and there is a --no-track option to countermand it even if the variable is set.
--- Documentation/git-branch.txt | 9 ++- builtin-branch.c | 126 ++++++++++++++++++++++++++++++++++++++++--- cache.h | 1 trace.c | 14 ++-- 4 files changed, 134 insertions(+), 16 deletions(-)
This version provides a variable-argument wrapper nfasprintf around the git function nfvasprintf, and uses it instead of the GNU extension asprintf.
Documentation/git-branch.txt +8 -1
@@ -10,7 +10,7 @@ SYNOPSIS [verse] 'git-branch' [--color | --no-color] [-r | -a] [-v [--abbrev=<length> | --no-abbrev]] -'git-branch' [-l] [-f] <branchname> [<start-point>] +'git-branch' [--track | --no-track] [-l] [-f] <branchname> [<start-point>] 'git-branch' (-m | -M) [<oldbranch>] <newbranch> 'git-branch' (-d | -D) [-r] <branchname>...
@@ -26,6 +26,13 @@ It will start out with a head equal to the one given as <start-point>. If no <start-point> is given, the branch will be created with a head equal to that of the currently checked out branch. +When a local branch is started off a remote branch, git can setup the +branch so that gitlink:git-pull[1] will appropriately merge from that +remote branch. If this behavior is desired, it is possible to make it +the default using the `trackintolocalbranches` option of the +corresponding remote. Otherwise, it can be chosen per-branch using +the `--track` and `--no-track` options. + With a '-m' or '-M' option, <oldbranch> will be renamed to <newbranch>. If <oldbranch> had a corresponding reflog, it is renamed to match <newbranch>, and a reflog entry is created to remember the branch
builtin-branch.c +113 -7
171 lines not on this page · raw message
cache.h +1 -0
@@ -477,6 +477,7 @@ extern struct tag *alloc_tag_node(void);extern void alloc_report (void );/* trace.c */ +extern int nfasprintf (char **str,const char *fmt, ...);extern int nfvasprintf (char **str,const char *fmt,va_list va);extern void trace_printf (const char *format, ...);extern void trace_argv_printf (const char **argv,int count,const char *format, ...);
trace.c +6 -8
@@ -26,14 +26,14 @@#include "quote.h" /* Stolen from "imap-send.c". */ -static int git_vasprintf (char **strp,const char *fmt,va_list ap) +int nfvasprintf (char **strp,const char *fmt,va_list ap) {int len;char tmp[1024 ];if ((len =vsnprintf (tmp,sizeof (tmp), fmt, ap)) <0 || !(*strp =xmalloc (len +1 ))) -return -1 ; +die ("Fatal: Out of memory\n" );if (len >= (int )sizeof (tmp))vsprintf (*strp, fmt, ap);else
@@ -41,13 +41,11 @@ static int git_vasprintf(char **strp, const char *fmt, va_list ap)return len; } -/* Stolen from "imap-send.c". */ -int nfvasprintf (char **str,const char *fmt,va_list va) +int nfasprintf (char **str,const char *fmt, ...) { -int ret =git_vasprintf (str, fmt, va); -if (ret <0 ) -die ("Fatal: Out of memory\n" ); -return ret; +va_list args; +va_start (args, fmt); +return nfvasprintf (str, fmt, args); }/* Get a trace file descriptor from GIT_TRACE env variable. */