首页 > 解决方案 > Git 在函数内部时不会创建 .gitconfig

问题描述

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

代码示例:

#!/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

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

有什么办法可以修复它或以其他方式做吗?

标签: bashgitshellgit-config

解决方案


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

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

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


推荐阅读