래퍼 스크립트를 사용한 git 동적 사용자 구성?

래퍼 스크립트를 사용한 git 동적 사용자 구성?

우리는 다른 소스/버전 제어 방법에서 git으로 전환하고 있으며 git에 대한 실제 경험이 없기 때문에(일부 user.* 변수 설정이 부족함) 이 내용을 진행하기 전에 이것이 가능한 방향인지 묻고 싶었습니다. 도로 행동.

해결책은 "사용자 .gitconfig를 동적으로 설정할 수 있습니까( git config --global 의 경우)?"나에게는 가깝지만 공유 서비스 계정(루트에도 존재할 수 있음)을 사용하여 발견한 상황을 해결하지 못합니다.

/home/serviceaccount/.gitconfigUser1이 연결하고 설정한 다음 User2가 연결하고 덮어쓴다는 것을 알았습니다 . 두 세션 중 하나에서 실행하면 git config --global user.name각 호출에서 파일이 참조된다는 것을 나타내는 User2 세부 정보가 반환됩니다. 나는 루트 작업을 수행하지 않기 때문에 @oXiVanisher의 솔루션에 따라 루트로 sudo하는 두 사용자에게 이 문제가 존재하는지 알 수 없습니다.

.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
!

두 명의 사용자가 공유 서비스 계정에 연결하면 git config --global user.name각 사용자의 올바른 이름이 보고됩니다. 언뜻 보기에 이는 환경 변수를 찾을 수 없는 계정을 공유하는 모든 사용자에 대해 git을 동적으로 만드는 것처럼 보입니다.

하지만 어떻게 무언가를 파괴할 수 있나요? 내가 아직 보지 못한 것은 무엇입니까?

감사해요.

답변1

귀하의 솔루션에는 경쟁 조건(여러 동시 호출 중에 어떤 일이 발생합니까 git?)과 기타 문제(예 $*: "$@".

$GIT_CONFIG대신, 각 사용자 환경에서 다른 파일로 설정하면 어떨까요 ?

관련 정보