Estamos no processo de passar de outros métodos de controle de versão / fonte para o git e, como não tenho experiência com o git (curto de configurar algumas variáveis do usuário. *), gostaria de perguntar se isso é um direção viável para tomar antes de me comprometer nesta estrada.
A solução em " É possível definir os usuários .gitconfig (para git config --global) dinamicamente? " chegou perto de mim, mas não resolveu uma situação que descobri usando contas de serviço compartilhado (e que podem existir) para root também).
Descobri que User1 se conectaria e /home/serviceaccount/.gitconfig
seria definido, então User2 se conectaria e sobrescreveria: uma execução de git config --global user.name
em qualquer sessão retornaria detalhes de User2, sugerindo que o arquivo é referenciado em cada chamada. Porque eu não faço root, eu não sei se este problema existe para dois usuários que sudo para root seguindo a solução do @ oXiVanisher.
Para tornar essa dinâmica para contas de serviço compartilhadas, um script de wrapper é transferido no .gitconfig
apropriado com base no usuário que o está executando. O núcleo disso é:
#!/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
!
Quando dois usuários estão conectados à conta de serviço compartilhado, git config --global user.name
informa o nome adequado para cada usuário. À primeira vista, parece que isso pode tornar o git dinâmico para todos os usuários que compartilham uma conta onde as variáveis de ambiente não podem ser encontradas.
Mas como eu estou quebrando as coisas? O que eu ainda não estou vendo?
Obrigado.