Bash

是否可以動態設置使用者 .gitconfig(用於 git config –global)?

  • June 11, 2017

我有一個問題,我們以自己的使用者johndoe身份登錄系統,然後必須執行 asudo su - root才能執行管理任務。我們在 git 儲存庫中有系統配置文件(這使一切變得更好)。但是現在我失去了使用者(johndoe/home/johndoe/.gitconfig文件中的設置。我嘗試設置$GIT_CONFIG有效的變數,但這僅用於設置 repo 配置,而不是全域配置,因此不會設置對我來說重要的變數:

$ sudo su - root
Hello johndoe. Switching your .gitconfig to /home/johndoe/.gitconfig
# git config --get user.name
John Doe
# git config --get user.email
johndoe@somefirm.somewhere
# git config --global --get user.name
# git config --global --get user.email
#

這是我嘗試的技巧:

$ cat .bashrc
--- snip ---

# load git config of user
LOGINUSER=$(who am i|awk '{print $1}')
if [ "$LOGINUSER" != "root" ]; then
   GITCFGFILE="/home/$LOGINUSER/.gitconfig"
   if [ -f $GITCFGFILE ]; then
       echo "Hello $LOGINUSER. Switching your .gitconfig to $GITCFGFILE"
       export GIT_CONFIG=$GITCFGFILE
   fi
fi

有沒有辦法為全域 git 配置設置路徑?

回答我的問題:否

這是我最終得到的解決方案:我添加了一個/etc/profile.d/gitsetup.sh包含以下內容的文件:

[ -z "$PS1" ] && return
[ -z "$BASH_VERSION" -o -z "$PS1" ] && return
CFGFILE="/home/$(who am i|awk '{ print $1 }')/.gitconfig"
[ $USER == "root" -a -f "$CFGFILE" -a -n "$CFGFILE" ] && cat $CFGFILE > $HOME/.gitconfig

它在第一行和第二行測試互動式 shell,在第三行讀取源 .gitconfig 路徑,然後如果源文件存在則替換根配置文件。

引用自:https://unix.stackexchange.com/questions/156364