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 man สำหรับคำสั่งคอมมิตมันบอกว่าฉันสามารถใช้ไฟล์

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

สำหรับตัวเลือก --author

รูปแบบนี้กำหนดไว้ที่ไหน? A และ U หมายถึงอะไร? ฉันจะยอมรับผู้ใช้รายอื่นที่มีเพียงชื่อผู้ใช้หรือเพียงอีเมลได้อย่างไร


3
ออสเตรเลียไม่ได้ยืนสำหรับสิ่งที่มันเป็นเพียงแค่ตัวอย่าง: AU ธ อร์ => ผู้แต่ง => ผู้แต่ง คุณสามารถระบุอะไรก็ได้ที่คุณต้องการเป็นชื่อ
Samy Dindane

1
ฉันรู้ว่า AU Thor ฟอร์มผู้แต่งฉันสงสัยว่ามีความสำคัญในการแยกหรือไม่
Willem D'Haeseleer

คำตอบ:


142

รูปแบบผู้เขียนที่จำเป็นขั้นต่ำตามที่ระบุไว้ในคำตอบ SO นี้คือ

Name <email>

ในกรณีของคุณหมายความว่าคุณต้องการเขียน

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

ตามความคิดเห็นของ Willem D'Haeseleer หากคุณไม่มีที่อยู่อีเมลคุณสามารถใช้<>:

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

ตามที่เขียนไว้ในgit commitหน้าคนที่คุณเชื่อมโยงหากคุณจัดหาอะไรที่น้อยกว่านั้นจะใช้เป็นโทเค็นการค้นหาเพื่อค้นหาการกระทำก่อนหน้านี้โดยมองหาการกระทำอื่น ๆ ของผู้เขียนคนนั้น


28
เพิ่งพบว่าหากคุณไม่มีที่อยู่อีเมลคุณสามารถพิมพ์ "name <>" เพื่อเว้นว่างไว้อย่างชัดเจนแทนการป้อนข้อมูลปลอม
Willem D'Haeseleer

2
หากคุณใช้"name <>"และgit commit --amendหลังจากนั้นจะล้มเหลวโดยมีinvalid identข้อผิดพลาด อย่าเลย
sanmai

7
เห็นได้ชัดว่าแม้ว่าคุณจะใช้ตัวเลือกนั้น แต่คุณยังต้องตั้งค่า user.email และ user.name ในการกำหนดค่า git ของคุณมิฉะนั้นจะบ่น git
qwertzguy

ฉันจะเพิ่มไฟล์เป็นผู้ใช้อื่นสำหรับคอมมิตแรกของฉันได้อย่างไร ฉันจะใช้คำสั่งกระทำหลังจากนั้น
MasterJoe

51

รูปแบบเฉพาะคือ:

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

1
เหตุใดจึงไม่ต้องใช้รหัสผ่านของ John Doe หากคุณยอมรับชื่อของเขา
Narek

3
@Narek ในบริบทนี้จะเป็นอย่างไร
พีเอ็ม

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

เพียงเสริม:

คอมมิต --author = "john@doe.com" -m "การแอบอ้างบุคคลอื่นเป็นสิ่งชั่วร้าย"

ในบางกรณีการคอมมิตยังคงล้มเหลวและแสดงข้อความต่อไปนี้ให้คุณ:

*** โปรดบอกฉันว่าคุณเป็นใคร

วิ่ง

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

เพื่อตั้งค่าข้อมูลประจำตัวเริ่มต้นของบัญชีของคุณ Omit --global เพื่อตั้งค่าเอกลักษณ์เฉพาะในที่เก็บนี้

ถึงแก่ชีวิต: ไม่สามารถตรวจหาที่อยู่อีเมลอัตโนมัติได้ (รับ xxxx)

ดังนั้นเพียงแค่เรียกใช้ "git config" แล้ว "คอมมิต"


นี่คือสิ่งที่ฉันต้องการ ฉันมีชื่อผู้ใช้และอีเมลแยกกันสำหรับ GitHub ขององค์กรและ GitHub สาธารณะ ฉันจำเป็นต้องตั้งค่า repo ปัจจุบันของฉันเพื่อใช้ชื่อผู้ใช้และอีเมล 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 จะถือว่าสตริงที่ให้มาเป็นรูปแบบและพยายามค้นหาชื่อที่ตรงกันระหว่างผู้เขียนคอมมิตอื่น ๆ


ไม่มีสิ่งเช่นเป็นFirstName นามสกุลกลางนามสกุล ดูนี้
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

นี่เป็นเพียงคนเดียวที่ได้ผลสำหรับฉัน หมายเหตุคำสั่งเป็นสิ่งสำคัญ git commit -c user.name="j bloggs" -am "message"ให้ข้อผิดพลาดfatal: Option -m cannot be combined with -c/-C/-F
Martin

2

เปิด Git Bash

ตั้งชื่อผู้ใช้ Git:

$ git config --global user.name "name family" ยืนยันว่าคุณตั้งชื่อผู้ใช้ Git อย่างถูกต้อง:

$ git config - ชื่อผู้ใช้ทั่วโลก

ชื่อสกุล

ตั้งค่าอีเมล 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

ทางเลือกถ้ากังวลคือการซ่อนที่อยู่อีเมลจริง ... หากคุณกำลัง committing เพื่อ Github คุณไม่จำเป็นต้องมีอีเมลจริงคุณสามารถใช้<username>@users.noreply.github.com

โดยไม่คำนึงถึงการใช้ Github หรือไม่คุณอาจจะเป็นครั้งแรกของคุณต้องการเปลี่ยนcommitterรายละเอียด (ในหน้าต่างการใช้งาน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


ซึ่งแตกต่างจากโซลูชันอื่น ๆ ทั้งหมดนี้ใช้ได้เมื่อคุณยังไม่ได้เริ่มต้น user.email/user.name ในตอนแรก
Andy

-2

เรียกใช้สองคำสั่งนี้จากเทอร์มินัลเพื่อตั้งค่าอีเมลและชื่อผู้ใช้

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

 git config --global user.name "your name" 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.