ラッパースクリプトを使用したgitダイナミックユーザーの設定

ラッパースクリプトを使用したgitダイナミックユーザーの設定

私たちは他のソース/バージョン制御方法でgitに切り替えており、gitの実際の経験がないので(一部のuser.*変数の設定が不足している)、この内容を進める前にこれが可能な方向かどうかを尋ねたかったです。道路行動。

解決策は「ユーザーの.gitconfigを動的に設定できますか(git config --globalの場合)?「私には近いですが、共有サービスアカウント(ルートにも存在する可能性があります)を使用して見つかった状況を解決できませんでした。

/home/serviceaccount/.gitconfigUser1が接続して設定し、User2が接続して上書きされることがわかりました。 2 つのセッションのいずれかで実行すると、git config --global user.name各呼び出しでファイルが参照されることを示す User2 の詳細が返されます。私はroot操作を実行していないので、@oXiVanisherのソリューションに従ってrootとしてsudoしている2人のユーザーにこの問題があるかどうかはわかりません。

.gitconfig共有サービスアカウントを動的にするために、ラッパースクリプトはそれを実行しているユーザーに応じて適切にローリングされます。鍵は次のとおりです。

#!/bin/sh

myuser=`who -m | awk '{ print $1 }'`
HOST=`hostname`

# atomic locking over NFS via https://unix.stackexchange.com/a/22062
LOCKFILE="/local/share/bin/.git.lock"
TMPFILE=${LOCKFILE}.$$
echo "$myuser @ $HOST" > $TMPFILE
if ln $TMPFILE $LOCKFILE 2>&-; then
  :
else
  echo "$LOCKFILE detected"
  echo "Script in use by $(<$LOCKFILE)"
  /bin/rm -f $TMPFILE
  exit
fi
trap "/bin/rm -f ${TMPFILE} ${LOCKFILE}" 0 1 2 3 15

# find my gitconfig
CFGFILE="/local/share/DOTfiles/DOTgitconfig.$myuser"
if [ ! -s $CFGFILE ]; then
  echo "No personal /local/share/DOTfiles/DOTgitconfig found."
  exit
fi

# roll it in
cp $CFGFILE $HOME/.gitconfig

# execute git
/usr/bin/git "$@"

# roll it back in case of changes
cp $HOME/.gitconfig $CFGFILE

# zero it out
cat > $HOME/.gitconfig << !
# This file intentionally blank for dynamic use
# The wrapper script is /local/share/bin/git
!

2人のユーザーが共有サービスアカウントに接続すると、git config --global user.name各ユーザーの正しい名前が報告されます。一見すると、環境変数が見つからないアカウントを共有するすべてのユーザーに対してgitを動的にするように見えます。

しかし、どのように何かを破壊することができますか?私がまだ見ていないものは何ですか?

ありがとうございます。

答え1

あなたのソリューションには、競合状態(複数の同時呼び出し中に何が起こりますかgit?)やその他の問題(例$*"$@"

$GIT_CONFIG代わりに、各ユーザー環境で別のファイルに設定したいですか?

関連情報