Keep a different configuration file (untracked) for each branch

前端 未结 1 934
北海茫月
北海茫月 2021-01-19 00:15

In a git repository I have two files: config/conf.yaml.sample (which is tracked by git, but it\'s ignored when my program is launched) and a copy of it called <

相关标签:
1条回答
  • 2021-01-19 00:32

    It seems that Git's post-checkout hook is right up your alley:

    This hook is invoked when a git checkout is run after having updated the worktree. The hook is given three parameters: the ref of the previous HEAD, the ref of the new HEAD (which may or may not have changed), and a flag indicating whether the checkout was a branch checkout (changing branches, flag=1) or a file checkout (retrieving a file from the index, flag=0). This hook cannot affect the outcome of git checkout.

    It is also run after git clone, unless the --no-checkout (-n) option is used. The first parameter given to the hook is the null-ref, the second the ref of the new HEAD and the flag is always 1.

    This hook can be used to perform repository validity checks, auto-display differences from the previous HEAD if different, or set working dir metadata properties.

    The following script (which must be made executable) should get you started; modify it to suit your needs and save it as .git/hooks/post-checkout:

    #!/bin/sh
    #
    # An example post-checkout hook script to perform an action conditionally on
    # the branch (if any) just checked out.
    # 
    # Test whether a branch was just checked out
    if [ "$3" -eq 1 ]; then
        # Save the value of HEAD (do not issue an error if HEAD is detached) 
        symrefHEAD=`git symbolic-ref --quiet HEAD`
        if [  "$symrefHEAD" = "refs/heads/master" ]; then
            # Do something useful for master, e.g.
            # cp config/conf_master.yaml config/conf.yaml
            printf " --- test: You just checked out master. ---\n"
        elif [ "$symrefHEAD" = "refs/heads/develop" ] ; then
            # Do something useful for develop, e.g.
            # cp config/conf_develop.yaml config/conf.yaml
            printf "--- test: You just checked out develop. ---\n"
        else
            # default case
            printf "You just checked out some other branch.\n"
        fi
    else
        printf "No branch was checked out\n"
    fi
    
    0 讨论(0)
提交回复
热议问题