Can you prevent default-push, but allow pull?

后端 未结 4 1049
悲哀的现实
悲哀的现实 2020-12-18 07:07

I want to know if there\'s a way to turn off the default push, but keep the default pull when using Mercurial. I don\'t want to accidentally pollute the master repository b

相关标签:
4条回答
  • 2020-12-18 07:43

    I was able to solve this by putting the following in my .hg/hgrc file, but I was wondering if there's a better/official way.

    [paths]
    default = http://server/hg/repo
    default-push = .
    
    0 讨论(0)
  • 2020-12-18 07:52

    I like your own answer of setting paths.default-push = . -- it is simple and it is clear that it will work.

    Another option would be a pre-push hook:

    [hooks]
    pre-push = if [ $HG_PATS == "[]" -o $HG_PATS == "['default']" ]; then
                   read -p "Really push to default? " -n 1; echo
                   [ "$REPLY" == "y" ]
               fi
    

    (Here I'm taking advantage of how you can split a long value over several lines by indenting them in a Mercurial config file.)

    A push to default looks this

    % hg push
    Really push to default? n
    warning: pre-push hook exited with status 1
    

    where I typed the n. The hooks checks for both no arguments ($HG_PATS == "[]") and a default as the argument ($HG_PATS == "['default']") and will only prompt you in those cases. The $HG_PATS variable was introduced in Mercurial 1.6.

    PS: I saw you updated the question and asked for a solution in PowerShell, but I'm afraid I know nothing about that language. However, you should be able to lift the important concepts from this answer yourself.

    0 讨论(0)
  • 2020-12-18 07:53

    The answer previously posted, in hgrc setting

       default-push = .
    

    is ALMOST but not quite correct. It can break, e.g. if you hg your home directory.

    Here is the my current BKM to disable default-push:

    I've embellished the idea of setting paths.default-push in ~/.hgrc, making it a little bit more self documenting and less error-prone - since, as I point out below, setting default-push = . does not always disable pushing.

    in ~/.hgrc

    [paths]
    # my main project master repo
    project-master = ...
    
    #DISABLING IMPLICIT PUSH
    #     to prevent embarassment from accidentally pushing to the project master repo
    #     instead of, in my case, a repo that has fine grain commits
    #     that the rest of the team does not want to see in the project master repo
    #default-push = .
    #     this works mostly, but NOT if you use hg on your home directory
    #     since '.' in ~/.hgrc seems to be interpreted as -R ~
    #default-push = /NONEXISTENT_default-push_--_must_specify_push_target_explicity
    #     this works ok, but I can clean up the error message using blanks
    #     keeping this around because blanks in pathnames confuses many UNIX tools
    default-push = /'NONEXISTENT default-push -- must specify push target explicitly'
    #     this amounts to disabling implicit push targets.
    
    0 讨论(0)
  • 2020-12-18 08:06

    Your solution probably is the quickest and is certainly effective. If there's any official way it would be using a preoutgoing hook:

    [hooks]
    preoutgoing = bash -c 'read -p "Really push to $HG_URL? " -n 1 RESP ; [ "$RESP" == "y" ]'
    

    which will ask you if you want to push and provide the URL to which it would go as a reminder.

    0 讨论(0)
提交回复
热议问题