How do I copy a branch & its config to a new name?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]