Переопределить настроенного пользователя для одного коммита git

106

Я пытаюсь принять участие в проекте на github.com со своего рабочего ноутбука, который уже настроен для сервера git компании. Есть ли способ зафиксировать, указав разные учетные данные автора, возможно, используя другой файл конфигурации или другие параметры командной строки?

Я пробовал использовать

--author="My Name <MyNameEmail@email.com>" 

и я получил сообщение:

 Committer: unknown <WorkEmail@workemail.net>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

но он все еще не обновлял мое имя пользователя для перехода в проект github.com. Можно ли еще что-нибудь попробовать и возможно ли это?

FilBot3
источник
2
Git различает автора и коммиттера . Чтобы временно установить коммиттер для одной команды, используйте -c user.name=Me user.email=me@example.com. Чтобы использовать настраиваемую глобальную конфигурацию, см. Этот вопрос или используйте псевдоним оболочки, содержащий -cпараметры. Но ни один из этих вариантов, вероятно, не является правильным в данной ситуации - вам нужна конфигурация для каждого репо.
Робин Грин
В Git 2.22 (второй квартал 2019 г.) у вас будут специальные настройки {author,committer}.{name,email}. Смотрите мой ответ ниже
VonC

Ответы:

191

Во-первых, автор не обязательно совпадает с коммиттером. Git отслеживает и то, и другое.

Чтобы указать, какое имя использовать только для этого репозитория, вы можете:

git config user.name "Your Name"
git config user.email "Your email"

Обратите внимание на отсутствие --globalопции. Это установит конфигурацию только в этом репозитории.

В качестве альтернативы вы можете сделать это только для одной команды, используя -cопцию:

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

Но я думаю, что лучше просто использовать параметры конфигурации выше.

Джон Закмейстер
источник
7
это именно то , что мне нужно, так как мне нужно выполнить фиксацию из общей учетной записи (root на сервере разработки) в репозиторий git под собой, и я не хочу, чтобы другим предлагалось мое имя / адрес электронной почты.
Андрей
60

Попробуйте добавить это к своей команде git:

git -c user.email=email@domain.fr -c user.name='Your Name'

Это нормально для одноразового использования, но вы можете предпочесть сохранить это в файле .git / config локального репозитория, который вы клонировали из git. Это можно сделать, запустив git config (без --global или --system, чтобы сделать его «локальным для репо») или отредактировав .git/config(это тот же синтаксис, что и~/.gitconfig

Асенар
источник
1
Спасибо! Я использую сервер с несколькими людьми и не хочу устанавливать пользователя по умолчанию. Это потрясающе!
horriblyUnpythonic
1
@horriblyUnpythonic, добро пожаловать :) Вы также можете создать псевдоним в своем .bash_aliases, и / или вы также можете установить ловушку перед фиксацией, чтобы отклонить фиксацию, когда пользователь не определен.
Asenar
28

Кроме того, можно установить переменные окружения GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEи GIT_AUTHOR_EMAILна основе в скорлупе или даже в командовании.

Джесси Глик
источник
Отлично, так как это в основном будет использоваться в сценарии общего компьютера, идеально подходит для каждого сеанса с автоматической очисткой.
kmac
1
У меня не получилось. Автор остался прежним git commit --amend. Изменился только коммитер.
Ондра Жижка
То же самое здесь, что и яgit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD
1
Это потому, что git commit --amendдизайн не изменяет автора, как сказано на странице руководства. Решение: git commit --amend --reset-author
kubanczyk
7

Я верю, что ты можешь бежать:

git config user.name "Your Name"
git config user.email you@example.com

для разных частей git. Попробуйте открыть папку, в которой выполняется работа для репозитория на сервере github.

Убедитесь, что вы видите в этой рабочей папке папку .git. Теперь откройте эту папку в Terminal / Console / CommandPrompt и попробуйте изменить имя пользователя и адрес электронной почты для этой папки, только выполнив указанные выше команды.

Изменив это, теперь вы можете получить доступ к серверу GitHub.

Посмотрите здесь: https://help.github.com/articles/setting-your-username-in-git

Кроме того, я считаю, что есть способ перейти к удаленному репо, используя ваше имя пользователя и пароль github в самой команде, но я не цитирую его, потому что это не сработало для меня.

Джо
источник
5

Продолжая ответ Джесси Глика здесь, с расширенной реализацией, потому что его предложение ИМО - лучший способ сделать это.

Добавьте ниже в свой .bash_profile. Вам будет предложено ввести пользователя при первом запуске любой команды git в активной оболочке. Затем он запомнит пользователя для всех последующих запусков.

(очевидно, перекрестная ссылка на входное значение пользователя для точных желаемых имен и адресов электронной почты для различных значений git auther / name в блоке case и при необходимости обновлять назначения)

git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    GIT_COMMITTER_EMAIL=$UNAME@domain.com
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}
трущобы
источник
2

Кроме того, можно установить переменные окружения GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEи GIT_AUTHOR_EMAILна основе в скорлупе или даже в командовании.

Фактически, начиная с Git 2.22 (второй квартал 2019 г.), у вас появилась новая возможность: {author,committer}.{name,email}были введены четыре новые переменные конфигурации для переопределения user.{name,email}в более конкретных случаях.

См. Commit 39ab4d0 (4 февраля 2019 г.) Уильяма Хаббса (``) .
(Объединено Junio ​​C Hamano - gitster- в коммите 4e021dc , 7 марта 2019 г.)

config: позволяет указывать отдельные идентификаторы автора и коммиттера

В author.email, author.name, committer.emailи committer.nameнастройки аналогичны GIT_AUTHOR_*и GIT_COMMITTER_*переменных окружения, но и для git configсистемы.
Это позволяет устанавливать их отдельно для каждого репозитория.

Git поддерживает установку различной информации об авторстве и коммиттере с помощью переменных среды. Однако переменные среды устанавливаются в оболочке, поэтому, если для разных репозиториев требуется разная информация об авторстве и коммиттере, требуется внешний инструмент.

Это добавляет поддержку мерзавца конфигурации для author.email, author.name, committer.emailи committer.name настроек , чтобы эта информация может быть установлена в хранилище.

VonC
источник