Bash
是否可以動態設置使用者 .gitconfig(用於 git config –global)?
我有一個問題,我們以自己的使用者johndoe身份登錄系統,然後必須執行 a
sudo 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 路徑,然後如果源文件存在則替換根配置文件。