GIT выполняет фиксацию от имени другого пользователя без электронной почты / или только электронной почты

127

Я пытаюсь зафиксировать некоторые изменения от имени другого пользователя, но у меня нет действующего адреса электронной почты, у меня не работает следующая команда:

git commit --author="john doe" -m "some fix"
fatal: No existing author found with 'john doe'

У меня такая же проблема при попытке совершить фиксацию только с адресом электронной почты

git commit --author="john@doe.com" -m "some fix"
fatal: No existing author found with 'john@doe.com'

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

standard A U Thor <author@example.com> format

Для параметра --author.

Где определяется этот формат? что означает A и U? как сделать фиксацию для другого пользователя только с именем пользователя или только с электронной почтой?

Виллем Д'Хазелер
источник
3
AU ничего не означает, это просто пример: AU Thor => AUThor => Author . В качестве имени можно указать все, что угодно.
Samy Dindane
1
Я знаю, что AU Thor формирует Author, мне было интересно, было ли какое-то значение в разделении.
Willem D'Haeseleer

Ответы:

142

Минимальный требуемый формат автора, на который намекает этот ответ SO , является

Name <email>

В вашем случае это означает, что вы хотите написать

git commit --author="Name <email>" -m "whatever"

Согласно комментарию Виллема Д'Хазелера, если у вас нет адреса электронной почты, вы можете использовать <>:

git commit --author="Name <>" -m "whatever"

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

eykanal
источник
28
Только что выяснилось, что если у вас нет адреса электронной почты, вы также можете просто ввести «name <>», чтобы явно оставить его пустым, а не вводить фальшивый.
Willem D'Haeseleer
2
Если вы используете "name <>", и git commit --amendпосле, он завершится invalid identошибкой; так что просто не надо
sanmai
7
По-видимому, даже при использовании этой опции вам все равно нужно установить user.email и user.name в конфигурации git, иначе git жалуется.
qwertzguy
Как мне добавить файл от имени другого пользователя для моей первой фиксации? После этого я воспользуюсь командой фиксации.
Мастер Джо
51

Конкретный формат:

git commit --author="John Doe <john@doe.com>" -m "Impersonation is evil." 
PMR
источник
1
Почему не требуется пароль Джона Доу, если вы делаете коммит на его имя?
Нарек
3
@ Нарек Что бы это было в этом контексте?
pmr
37

стандартный формат AU Thor <author@example.com>

Кажется, это определяется следующим образом: (насколько я знаю, без каких-либо гарантий)

AU Thor = требуемое имя пользователя

  • Разделение символов, вероятно, указывает на то, что разрешены пробелы, они также могут напоминать инициалы.
  • После имени пользователя должен стоять 1 пробел, лишние пробелы будут обрезаны.

<author@example.com> = необязательный адрес электронной почты

  • Всегда должно быть между знаками <>.
  • Формат адреса электронной почты не проверяется, вы можете ввести практически все, что хотите.
  • Необязательно, вы можете явно опустить это, используя <>

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

Примеры:

  1. Только имя пользователя

    Не указывайте адрес электронной почты явно:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. Только электронная почта

    Технически это невозможно. Однако вы можете ввести адрес электронной почты в качестве имени пользователя и явно опустить адрес электронной почты. Это не кажется очень полезным. Я думаю, что было бы еще разумнее извлечь имя пользователя из адреса электронной почты, а затем использовать его в качестве имени пользователя. Но если вам нужно:

    git commit --author="john@doe.com <>" -m "Impersonation is evil." 
    

Я столкнулся с этим, когда пытался преобразовать репозиторий из mercurial в git. Я тестировал команды на msysgit 1.7.10.

Виллем Д'Хазелер
источник
13

Просто добавка :

git commit --author = "john@doe.com" -m "Выдача себя за другое лицо - зло."

В некоторых случаях фиксация по-прежнему не выполняется и отображается следующее сообщение:

*** Скажите, пожалуйста, кто вы?

Бегать

git config --global user.email "you@example.com" git config --global user.name "Ваше имя"

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

фатальный: невозможно автоматически определить адрес электронной почты (получено xxxx)

Так что просто запустите «git config», затем «git commit»

qinxian
источник
Это то, что мне было нужно. У меня есть отдельные имя пользователя и адрес электронной почты для корпоративного GitHub и общедоступного GitHub. Мне нужно было настроить мое текущее репо на использование моего общедоступного имени пользователя GitHub и адреса электронной почты, чтобы я мог отправлять свои изменения, не раскрывая личный адрес электронной почты.
TBirkulosis
8

Формат

A U Thor <author@example.com>

просто означает, что вы должны указать

FirstName MiddleName LastName <email@example.com>

Похоже, что отчество и фамилия необязательны (возможно, часть перед электронным письмом вообще не имеет строгого формата). Попробуйте, например, вот что:

git commit --author="John <john@doe.com>" -m "some fix"

Как говорится в документах:

  --author=<author>
       Override the commit author. Specify an explicit author using the standard 
       A U Thor <author@example.com> format. Otherwise <author> is assumed to 
       be a pattern and is used to search for an existing commit by that author 
       (i.e. rev-list --all -i --author=<author>); the commit author is then copied 
       from the first such commit found.

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

KL-7
источник
Не существует такой вещи, как FirstName MiddleName LastName . Смотрите это .
Samy Dindane
3

--authorОпция не работает:

*** Please tell me who you are.

Run

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

Это делает:

git -c user.name='A U Thor' -c user.email=author@example.com commit
user2394284
источник
Это единственное, что у меня сработало. Обратите внимание на порядок важен. git commit -c user.name="j bloggs" -am "message"выдает ошибкуfatal: Option -m cannot be combined with -c/-C/-F
Мартин
2

Откройте Git Bash.

Задайте имя пользователя Git:

$ git config --global user.name "name family" Убедитесь, что вы правильно установили имя пользователя Git:

$ git config --global user.name

имя семьи

Установите адрес электронной почты Git:

$ git config --global user.email email@foo.com Убедитесь, что вы правильно установили адрес электронной почты Git:

$ git config --global user.email

email@foo.com

Пн
источник
0

Все зависит от того, как вы совершаете.

Например:

git commit -am "Some message"

будет использовать ваше ~\.gitconfigимя пользователя. Другими словами, если вы откроете этот файл, вы должны увидеть строку, которая выглядит так:

[user]
    email = someemail@gmail.com

Это адрес электронной почты, который вы хотите изменить. Если вы выполняете пул-реквест через Bitbucket или Github и т. Д., Вы будете тем, под каким именем вы вошли.

Колобский каньон
источник
0

Альтернатива , если забота , чтобы скрыть реальный адрес электронной почты ... Если вы совершаете на Github вам не нужен реальный электронной почты , вы можете использовать<username>@users.noreply.github.com

Независимо от того, с помощью Github или нет, вы , вероятно , первым хотите изменить коммиттер детали (об использовании окна SET GIT_...)

GIT_COMMITTER_NAME='username' 
GIT_COMMITTER_EMAIL='username@users.noreply.github.com'

Затем установите автора

git commit --author="username <username@users.noreply.github.com>"

https://help.github.com/articles/keeping-your-email-address-private

KCD
источник
В отличие от всех других решений, это работает, если вы изначально не инициализировали user.email/user.name.
Энди
-2

Запустите эти две команды из терминала, чтобы установить адрес электронной почты и имя пользователя.

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

 git config --global user.name "your name" 
Диптенду Дас
источник