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

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

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

  • Как использовать входной файл неточных файлов для операции?
  • Анализ паролей Apache для исключения диапазонов IP-адресов
  • косвенное изменение переменной в POSIX, как сделано в bash?
  • echo wildcard globing
  • Как подписать скрипт Bash в качестве клиента MQTT
  • Можно ли запустить команду из bash и отправить ей нажатие клавиши
  • Я обнаружил, что 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 для всех пользователей, разделяющих одну учетную запись, где переменные среды не могут быть найдены.

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

    Спасибо.

  • Как печатать IP / MASK из списка?
  • генерировать согласованный уникальный идентификатор машины
  • Как знак двоеточия и знак вопроса доллара объединяются в sh?
  • Получить последнее сообщение фиксации, автор и хеш с помощью git ls-remote, как команда
  • Команда nvm недоступна в скрипте bash
  • Добавить строку в файл конфигурации из сценария bash?
  • One Solution collect form web for “Динамическая конфигурация пользователя для git с помощью сценария-оболочки?”

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

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

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