Jay Soffian <jaysoffian@xxxxxxxxx> writes: > diff --git a/builtin-branch.c b/builtin-branch.c > index e414c88..94ab195 100644 > --- a/builtin-branch.c > +++ b/builtin-branch.c > @@ -402,6 +402,16 @@ static int setup_tracking(const char *new_ref, const char *orig_ref) > return error("Tracking not set up: name too long: %s", > new_ref); > > + if (!prefixcmp(orig_ref, "refs/heads/")) { > + sprintf(key, "branch.%s.remote", new_ref); > + git_config_set(key, "."); > + sprintf(key, "branch.%s.merge", new_ref); > + git_config_set(key, orig_ref); > + printf("Branch %s set up to track local branch %s.\n", > + new_ref, orig_ref); > + return 0; > + } > + > memset(&tracking, 0, sizeof(tracking)); > tracking.spec.dst = (char *)orig_ref; > if (for_each_remote(find_tracked_branch, &tracking) || Although I am not so familiar with this area, the patch somehow did not feel right, so I ended up doing a bit of digging. After the context of the patch, we have this: if (tracking.matches == 1) { sprintf(key, "branch.%s.remote", new_ref); git_config_set(key, tracking.remote ? tracking.remote : "."); sprintf(key, "branch.%s.merge", new_ref); git_config_set(key, tracking.src); So it looks to me that the code already has intention to set the "branch.*.remote" variable to "." when certain condition is met. And the condition is "when tracking.remote is NULL, or it is already a dot". for_each_remote() iterates thru the remotes and find_tracked_branch() does this: static int find_tracked_branch(struct remote *remote, void *priv) { struct tracking *tracking = priv; if (!remote_find_tracking(remote, &tracking->spec)) { if (++tracking->matches == 1) { tracking->src = tracking->spec.src; tracking->remote = remote->name; } else { free(tracking->spec.src); if (tracking->src) { free(tracking->src); tracking->src = NULL; } } tracking->spec.src = NULL; } return 0; } So if there is a remote whose name is "." (or NULL, but I do not know when that can happen --- remote.c::make_remote() does not allow creating such a remote as far as I can tell), that would be found without the added extra code, wouldn't it? I did a bit of experiment and with this in .git/config: [remote "."] fetch = refs/*:refs/* it turns out that you do not have to patch the code at all. The above manual configuration feels somewhat like an ugly hack but perhaps we should make the above two lines implied? This area was last cleaned up in 6f084a5 (branch --track: code cleanup and saner handling of local branches). I do not know if the original intention of the code was to allow a hack like this to work, or it is just an unintended accident that it happens to work. Dscho, any ideas? - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html