Git alias ignoring global settings





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







2















I have the relativePaths setting for git status set in ~/.gitconfig:



[status]
relativePaths = true


Then a git alias defined like this:



st = !git status


When I call git status, the relativePaths setting applies, but when I call the alias, it doesn't.



How can I get this to work?



NOTE:
In my alias, I actually pipe the result of git status to grep, so I need to use the ! shell syntax. I excluded that from this example because the behavior is the same without it










share|improve this question























  • It just occured to me that the bash invoked from the alias may not be reading my gitconfig, or may be missing env vars. Will check that out

    – slezica
    Nov 23 '18 at 14:53













  • Bash is not responsible for reading the gitconfig files.

    – alfunx
    Nov 23 '18 at 15:30











  • You know what I meant

    – slezica
    Nov 23 '18 at 16:05


















2















I have the relativePaths setting for git status set in ~/.gitconfig:



[status]
relativePaths = true


Then a git alias defined like this:



st = !git status


When I call git status, the relativePaths setting applies, but when I call the alias, it doesn't.



How can I get this to work?



NOTE:
In my alias, I actually pipe the result of git status to grep, so I need to use the ! shell syntax. I excluded that from this example because the behavior is the same without it










share|improve this question























  • It just occured to me that the bash invoked from the alias may not be reading my gitconfig, or may be missing env vars. Will check that out

    – slezica
    Nov 23 '18 at 14:53













  • Bash is not responsible for reading the gitconfig files.

    – alfunx
    Nov 23 '18 at 15:30











  • You know what I meant

    – slezica
    Nov 23 '18 at 16:05














2












2








2








I have the relativePaths setting for git status set in ~/.gitconfig:



[status]
relativePaths = true


Then a git alias defined like this:



st = !git status


When I call git status, the relativePaths setting applies, but when I call the alias, it doesn't.



How can I get this to work?



NOTE:
In my alias, I actually pipe the result of git status to grep, so I need to use the ! shell syntax. I excluded that from this example because the behavior is the same without it










share|improve this question














I have the relativePaths setting for git status set in ~/.gitconfig:



[status]
relativePaths = true


Then a git alias defined like this:



st = !git status


When I call git status, the relativePaths setting applies, but when I call the alias, it doesn't.



How can I get this to work?



NOTE:
In my alias, I actually pipe the result of git status to grep, so I need to use the ! shell syntax. I excluded that from this example because the behavior is the same without it







git






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 23 '18 at 14:49









slezicaslezica

44.7k1675136




44.7k1675136













  • It just occured to me that the bash invoked from the alias may not be reading my gitconfig, or may be missing env vars. Will check that out

    – slezica
    Nov 23 '18 at 14:53













  • Bash is not responsible for reading the gitconfig files.

    – alfunx
    Nov 23 '18 at 15:30











  • You know what I meant

    – slezica
    Nov 23 '18 at 16:05



















  • It just occured to me that the bash invoked from the alias may not be reading my gitconfig, or may be missing env vars. Will check that out

    – slezica
    Nov 23 '18 at 14:53













  • Bash is not responsible for reading the gitconfig files.

    – alfunx
    Nov 23 '18 at 15:30











  • You know what I meant

    – slezica
    Nov 23 '18 at 16:05

















It just occured to me that the bash invoked from the alias may not be reading my gitconfig, or may be missing env vars. Will check that out

– slezica
Nov 23 '18 at 14:53







It just occured to me that the bash invoked from the alias may not be reading my gitconfig, or may be missing env vars. Will check that out

– slezica
Nov 23 '18 at 14:53















Bash is not responsible for reading the gitconfig files.

– alfunx
Nov 23 '18 at 15:30





Bash is not responsible for reading the gitconfig files.

– alfunx
Nov 23 '18 at 15:30













You know what I meant

– slezica
Nov 23 '18 at 16:05





You know what I meant

– slezica
Nov 23 '18 at 16:05












1 Answer
1






active

oldest

votes


















1














The setting is probably applied, which you could check with an alias, e.g.:



[alias]
check-status-rel = config --global --get status.relativePaths


The reason why it doesn't work for you is explained in man git-config, in the second paragraph of the alias.* settings' description:



   alias.*
Command aliases for the git(1) command wrapper - e.g. after
defining "alias.last = cat-file commit HEAD", the invocation "git
last" is equivalent to "git cat-file commit HEAD". To avoid
confusion and troubles with script usage, aliases that hide
existing Git commands are ignored. Arguments are split by spaces,
the usual shell quoting and escaping is supported. A quote pair or
a backslash can be used to quote them.

If the alias expansion is prefixed with an exclamation point, it
will be treated as a shell command. For example, defining
"alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new"
is equivalent to running the shell command "gitk --all --not
ORIG_HEAD". Note that shell commands will be executed from the
top-level directory of a repository, which may not necessarily be
the current directory. GIT_PREFIX is set as returned by running
git rev-parse --show-prefix from the original current directory.
See git-rev-parse(1).


In short, Git aliases that are shell commands are always executed at the root directory of the repository.



Edit: Obviously, you can simply cd into the directory before running the commands:



[alias]
st = "!cd "$GIT_PREFIX" && git status"





share|improve this answer


























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53448800%2fgit-alias-ignoring-global-settings%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    The setting is probably applied, which you could check with an alias, e.g.:



    [alias]
    check-status-rel = config --global --get status.relativePaths


    The reason why it doesn't work for you is explained in man git-config, in the second paragraph of the alias.* settings' description:



       alias.*
    Command aliases for the git(1) command wrapper - e.g. after
    defining "alias.last = cat-file commit HEAD", the invocation "git
    last" is equivalent to "git cat-file commit HEAD". To avoid
    confusion and troubles with script usage, aliases that hide
    existing Git commands are ignored. Arguments are split by spaces,
    the usual shell quoting and escaping is supported. A quote pair or
    a backslash can be used to quote them.

    If the alias expansion is prefixed with an exclamation point, it
    will be treated as a shell command. For example, defining
    "alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new"
    is equivalent to running the shell command "gitk --all --not
    ORIG_HEAD". Note that shell commands will be executed from the
    top-level directory of a repository, which may not necessarily be
    the current directory. GIT_PREFIX is set as returned by running
    git rev-parse --show-prefix from the original current directory.
    See git-rev-parse(1).


    In short, Git aliases that are shell commands are always executed at the root directory of the repository.



    Edit: Obviously, you can simply cd into the directory before running the commands:



    [alias]
    st = "!cd "$GIT_PREFIX" && git status"





    share|improve this answer






























      1














      The setting is probably applied, which you could check with an alias, e.g.:



      [alias]
      check-status-rel = config --global --get status.relativePaths


      The reason why it doesn't work for you is explained in man git-config, in the second paragraph of the alias.* settings' description:



         alias.*
      Command aliases for the git(1) command wrapper - e.g. after
      defining "alias.last = cat-file commit HEAD", the invocation "git
      last" is equivalent to "git cat-file commit HEAD". To avoid
      confusion and troubles with script usage, aliases that hide
      existing Git commands are ignored. Arguments are split by spaces,
      the usual shell quoting and escaping is supported. A quote pair or
      a backslash can be used to quote them.

      If the alias expansion is prefixed with an exclamation point, it
      will be treated as a shell command. For example, defining
      "alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new"
      is equivalent to running the shell command "gitk --all --not
      ORIG_HEAD". Note that shell commands will be executed from the
      top-level directory of a repository, which may not necessarily be
      the current directory. GIT_PREFIX is set as returned by running
      git rev-parse --show-prefix from the original current directory.
      See git-rev-parse(1).


      In short, Git aliases that are shell commands are always executed at the root directory of the repository.



      Edit: Obviously, you can simply cd into the directory before running the commands:



      [alias]
      st = "!cd "$GIT_PREFIX" && git status"





      share|improve this answer




























        1












        1








        1







        The setting is probably applied, which you could check with an alias, e.g.:



        [alias]
        check-status-rel = config --global --get status.relativePaths


        The reason why it doesn't work for you is explained in man git-config, in the second paragraph of the alias.* settings' description:



           alias.*
        Command aliases for the git(1) command wrapper - e.g. after
        defining "alias.last = cat-file commit HEAD", the invocation "git
        last" is equivalent to "git cat-file commit HEAD". To avoid
        confusion and troubles with script usage, aliases that hide
        existing Git commands are ignored. Arguments are split by spaces,
        the usual shell quoting and escaping is supported. A quote pair or
        a backslash can be used to quote them.

        If the alias expansion is prefixed with an exclamation point, it
        will be treated as a shell command. For example, defining
        "alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new"
        is equivalent to running the shell command "gitk --all --not
        ORIG_HEAD". Note that shell commands will be executed from the
        top-level directory of a repository, which may not necessarily be
        the current directory. GIT_PREFIX is set as returned by running
        git rev-parse --show-prefix from the original current directory.
        See git-rev-parse(1).


        In short, Git aliases that are shell commands are always executed at the root directory of the repository.



        Edit: Obviously, you can simply cd into the directory before running the commands:



        [alias]
        st = "!cd "$GIT_PREFIX" && git status"





        share|improve this answer















        The setting is probably applied, which you could check with an alias, e.g.:



        [alias]
        check-status-rel = config --global --get status.relativePaths


        The reason why it doesn't work for you is explained in man git-config, in the second paragraph of the alias.* settings' description:



           alias.*
        Command aliases for the git(1) command wrapper - e.g. after
        defining "alias.last = cat-file commit HEAD", the invocation "git
        last" is equivalent to "git cat-file commit HEAD". To avoid
        confusion and troubles with script usage, aliases that hide
        existing Git commands are ignored. Arguments are split by spaces,
        the usual shell quoting and escaping is supported. A quote pair or
        a backslash can be used to quote them.

        If the alias expansion is prefixed with an exclamation point, it
        will be treated as a shell command. For example, defining
        "alias.new = !gitk --all --not ORIG_HEAD", the invocation "git new"
        is equivalent to running the shell command "gitk --all --not
        ORIG_HEAD". Note that shell commands will be executed from the
        top-level directory of a repository, which may not necessarily be
        the current directory. GIT_PREFIX is set as returned by running
        git rev-parse --show-prefix from the original current directory.
        See git-rev-parse(1).


        In short, Git aliases that are shell commands are always executed at the root directory of the repository.



        Edit: Obviously, you can simply cd into the directory before running the commands:



        [alias]
        st = "!cd "$GIT_PREFIX" && git status"






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 24 '18 at 9:19

























        answered Nov 23 '18 at 15:14









        alfunxalfunx

        873314




        873314
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53448800%2fgit-alias-ignoring-global-settings%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Tangent Lines Diagram Along Smooth Curve

            Yusuf al-Mu'taman ibn Hud

            Zucchini