Динамическая конфигурация пользователя для git с помощью сценария-оболочки?

Мы находимся в процессе перехода от других методов управления версиями / версиями к git и, поскольку у меня нет фактического опыта работы с git (если не заданы некоторые переменные пользователя. *), Я хотел бы спросить, является ли это жизнеспособным направлением прежде чем совершить себя по этой дороге.

Решение: « Возможно ли динамически установить пользователей .gitconfig (для git config -global)? », Но это не касалось ситуации, которую я обнаружил с помощью общих учетных записей служб (и которые могут существовать для root, тоже ).

Я обнаружил, что User1 будет подключаться и /home/serviceaccount/.gitconfig будет установлен, тогда User2 будет подключаться и перезаписывать это: выполнение git config --global user.name в любом сеансе будет возвращать данные User2, предлагая ссылаться на файл при каждом вызове. Поскольку я не делаю root, я не знаю, существует ли эта проблема для двух пользователей, которые sudo могут корневать после решения @ oXiVanisher.

Чтобы сделать эту динамику для общих учетных записей служб, скрипт-обертка выполняется в соответствующем .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 config --global user.name сообщает собственное имя для каждого пользователя. Сначала краснеть, похоже, что это может сделать git dynamic для всех пользователей, разделяющих одну учетную запись, где переменные среды не могут быть найдены.

Но как я нарушаю вещи? Что я еще не вижу?

Спасибо.

  • Что такое эквивалент sudo для FreeBSD?
  • sudo и sssd не работают с группами пользователей
  • Как узнать, являюсь ли я sudoer?
  • Насколько безопасно sudo при запуске от root для запуска приложения в качестве менее привилегированного пользователя?
  • Как я могу использовать собственный локальный текстовый редактор для изменения системных (требуется root для сохранения) файлов в удаленной системе?
  • Можете ли вы указать несколько паролей учетной записи пользователя?
  • debian 8.2 больше не может su root
  • Ошибка открытия кеша
  • One Solution collect form web for “Динамическая конфигурация пользователя для git с помощью сценария-оболочки?”

    Похоже, что ваше решение будет иметь условия гонки (что происходит во время нескольких одновременных вызовов git ?), А также другие проблемы (например, неправильное использование $* вместо "$@" .

    Вместо этого, почему бы не использовать только значение $GIT_CONFIG в среде каждого пользователя для другого файла?

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.