git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* How do I copy a branch & its config to a new name?
@ 2017-03-22 22:46 Ævar Arnfjörð Bjarmason
  2017-03-22 22:58 ` Jeff King
  2017-03-24  0:52 ` Jonathan Nieder
  0 siblings, 2 replies; 7+ messages in thread
From: Ævar Arnfjörð Bjarmason @ 2017-03-22 22:46 UTC (permalink / raw)
  To: Git Mailing List

When I start work on a new series I have e.g. avar/various-tag-2 with
its upstream info set to origin/master.

When I start avar/various-tag-3 just:

    git checkcout -b avar/various-tag-3 avar/various-tag-2

I don't get the correct tracking info. As far as I can tell there's no
way to do this in a single command, either you do:

    git checkout -b avar/various-tag-4 avar/various-tag-3 && git
branch --set-upstream-to origin/master

Or:

    git checkout -b avar/various-tag-3 -t origin/master && git reset
--hard avar/various-tag-2

But both of these are really just a limited special case for what I'd
really like, which is given branch "foo", copy it and all its
configuration to a new name "bar". I.e. both of the hacks above only
set up the correct tracking info, but none of the other branch.*
variables I may have set.

So I have this relative horror-show as an alias:

    $ git config alias.cp-branch
    !f() { git checkout -b $2 $1 && for line in $(git config --list
--file .git/config | grep "^branch\.$1"); do key=$(echo $line | cut
-d= -f1); newkey=$(echo $key | sed "s!$1!$2!"); value=$(echo $line |
cut -d= -f2); git config $newkey $value; done; }; f

Turned into a more readable tiny shell-script you can call git-cp-branch that's:

    #!/bin/sh -e
    git checkout -b $2 $1
    for line in $(git config --list --file $(git rev-parse
--git-dir)/config | grep "^branch\.$1");
    do
        key=$(echo $line | cut -d= -f1)
        newkey=$(echo $key | sed "s!$1!$2!")
        value=$(echo $line | cut -d= -f2)
        git config $newkey $value
    done

I couldn't find any previous list discussion about this, but if not I
think something like:

    git [checkout|branch] --copy src dest

Would make sense as an interface for this.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-03-24 21:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-22 22:46 How do I copy a branch & its config to a new name? Ævar Arnfjörð Bjarmason
2017-03-22 22:58 ` Jeff King
2017-03-22 23:54   ` Ævar Arnfjörð Bjarmason
2017-03-22 23:57     ` Jeff King
2017-03-24  0:52 ` Jonathan Nieder
2017-03-24 11:10   ` Ævar Arnfjörð Bjarmason
2017-03-24 21:17     ` Jeff King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).