Search code examples
bashgitshellgit-config

Git doesn't create .gitconfig when it's inside a function


I'm a fairly new user in Bash and Git in general and I'm scratching my head about what the problem could be. I'm creating a code that checks if .gitconfig exists and if it doesn't it allows you to configure it almost automatically using a read command to get your email and username and apply them in a line of code.

Code example:

#!/bin/bash

# colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NO_COLOR='\033[0m'

# function git
git () { 
   printf "${RED}Set your Git email\n${NO_COLOR}"
   read GIT_AUTHOR_EMAIL
   git config --global user.email "$GIT_AUTHOR_EMAIL"
   printf "${RED}Set your Git username\n${NO_COLOR}"
   read GIT_AUTHOR_USERNAME
   git config --global user.name "$GIT_AUTHOR_USERNAME"
   git config --list | grep user.email && git config --list | grep user.name
}

# git check & configuration
if [ -f ".gitconfig" ]; then
   printf "${YELLOW}Git was previously configured\n${NO_COLOR}"
   exit
else
   git
   printf "${YELLOW}Done\n${NO_COLOR}"
   exit
fi

If it doesn't exist, it calls a function to configure it but after some quick debugging using the set -x command I figured out the file .gitconfig is not created at all but it does when I do it myself outside a function. All it does is go back to read GIT_AUTHOR_EMAIL, apply the code git config --global user.email "$GIT_AUTHOR_EMAIL" and go back to the first read command. I want the code to check for .gitconfig and if it exists it'll also ask if the user wants to re-configure their Git details. I'm super close on doing so.

Is there any way I can fix it or do it another way?


Solution

  • Once you've defined the function git, any invocation of the name git in that shell process will refer to that shell function. If you'd like to invoke the program git, then you need to prefix it with the built-in command:

    command git config --global user.name "$GIT_AUTHOR_USERNAME"
    

    If it wasn't your intention to override the git command, then you probably want to name your shell function differently, which avoids the problem altogether.