Git 在函数内部时不创建 .gitconfig

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

总的来说,我是 Bash 和 Git 的新用户,我正在摸不着头脑,想知道可能是什么问题。我正在创建一个代码来检查 .gitconfig 是否存在,如果不存在,它允许您使用读取命令几乎自动配置它以获取您的电子邮件和用户名并将它们应用到一行代码中。

代码示例:

#!/bin/bash

# colors
RED='3[0;31m'
GREEN='3[0;32m'
YELLOW='3[1;33m'
NO_COLOR='3[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

如果它不存在,它会调用一个函数来配置它,但在使用 set -x 命令进行一些快速调试后,我发现文件 .gitconfig 根本没有创建,但是当我创建时它会创建它自己在函数之外。它所做的只是返回到 read GIT_AUTHOR_EMAIL,应用代码 git config --global user.email "$GIT_AUTHOR_EMAIL" 并返回到第一个读取命令。我希望代码检查 .gitconfig,如果它存在,它还会询问用户是否要重新配置他们的 Git 详细信息。我非常接近这样做。

有什么办法可以修复它或用其他方法解决吗?

定义函数 git 后,在该 shell 进程中对名称 git 的任何调用都将引用该 shell 函数。如果你想调用程序 git,那么你需要在它前面加上内置的 command:

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

如果您无意覆盖 git 命令,那么您可能希望以不同的方式命名 shell 函数,这样可以完全避免该问题。