Динамическая конфигурация пользователя для 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 не работает над debian
  • Как обычный пользователь может запускать задачу root cron немедленно, без задержки?
  • Команда sudo не работает, когда strace прилагается с PID bash
  • sudo, поскольку пользовательское разрешение отклонено по команде
  • Безопасное предоставление пользователям возможности создавать учетные записи
  • «sudo» не установлен, я не могу его установить, и он спрашивает, я ли я root
  • Как я могу сохранить * all * environment vars для определенной команды в sudo?
  • pam_unix (sudo: auth): auth не смог идентифицировать пароль для
  • One Solution collect form web for “Динамическая конфигурация пользователя для git с помощью сценария-оболочки?”

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

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

    Interesting Posts

    Начальные вопросы относительно «<», «<<» и чтения файлов

    Скрипт Perl работает отлично в интерактивной оболочке, но не как задание cron

    Установите Ubuntu с маленького USB-накопителя

    Ошибка загрузки с RHEL 6

    bash + регулярное выражение + подтверждение имени машины

    Настройка переменной среды LANG для xfce

    Как определить несколько маршрутов для гостей KVM с помощью CentOS 7

    передавать все файлы в каталоге как один аргумент в perl-скрипт

    Запускать автоматически Noip2 при загрузке машины?

    Как заставить awk работать в цикле while

    Файловая система по-прежнему показывает старое значение после сокращения в Linux, однако показывает правильное значение в LVM

    Сделать mount not list «фиктивными» файловыми системами (например, df)

    Есть ли способ перечислить пакеты с даты, когда они вошли в архив Debian?

    Как узнать, загружен ли файл wget?

    Почему моя панель инструментов Emacs отличается от ssh w / X forwarding на Cygwin vs CentOS?

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