GIT cam kết là người dùng khác nhau mà không cần email / hoặc chỉ email


127

Tôi đang cố gắng thực hiện một số thay đổi với tư cách là một người dùng khác, nhưng tôi không có địa chỉ email hợp lệ, lệnh sau không hoạt động với tôi:

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

Tôi gặp vấn đề tương tự khi cố gắng cam kết chỉ với một địa chỉ email

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

Trên trang man GIT cho lệnh commit, nó cho biết tôi có thể sử dụng

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

Đối với tùy chọn - Tác giả.

Định dạng này được định nghĩa ở đâu? A và U đại diện cho cái gì? Làm thế nào để tôi cam kết cho một người dùng khác chỉ có tên người dùng hoặc chỉ một email?


3
AU không đại diện cho bất cứ điều gì, đó chỉ là một ví dụ: AU Thor => AUThor => Author . Bạn có thể chỉ định bất cứ điều gì bạn muốn như là một tên.
Samy Dindane

1
Tôi biết rằng AU Thor hình thành Tác giả, tôi đã tự hỏi nếu có bất kỳ ý nghĩa trong việc tách biệt.
Willem D'Haeseleer

Câu trả lời:


142

Định dạng tác giả yêu cầu tối thiểu, như được gợi ý trong câu trả lời SO này , là

Name <email>

Trong trường hợp của bạn, điều này có nghĩa là bạn muốn viết

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

Theo nhận xét của Willem D'Haeseleer, nếu bạn không có địa chỉ email, bạn có thể sử dụng <>:

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

Như được viết trên git committrang man mà bạn đã liên kết đến, nếu bạn cung cấp bất cứ thứ gì ít hơn thế, nó được sử dụng làm mã thông báo tìm kiếm để tìm kiếm thông qua các cam kết trước đó, tìm kiếm các cam kết khác của tác giả đó.


28
Chỉ cần phát hiện ra rằng nếu bạn không có địa chỉ email, bạn cũng có thể chỉ cần nhập "tên <>", để trống một cách rõ ràng thay vì nhập giả.
Willem D'Haeseleer

2
Nếu bạn sử dụng "name <>"git commit --amendsau đó, nó sẽ bị invalid identlỗi; vì vậy đừng
sanmai

7
Rõ ràng ngay cả khi sử dụng tùy chọn đó, bạn vẫn cần phải đặt user.email và user.name trong cấu hình git của mình, nếu không thì git phàn nàn.
qwertzguy

51

Định dạng cụ thể là:

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

1
Tại sao nó không yêu cầu mật khẩu của John Doe nếu bạn cam kết cho tên của anh ấy?
Narek 17/03/2015

3
@Narek Điều gì sẽ xảy ra trong bối cảnh này?
PMR

37

Các

định dạng AU Thor <Author@example.com> tiêu chuẩn

Có vẻ như được định nghĩa như sau: (theo như tôi biết, hoàn toàn không có bảo hành)

AU Thor = tên người dùng bắt buộc

  • Sự tách biệt của các nhân vật có lẽ chỉ ra rằng các khoảng trắng được cho phép, nó cũng có thể giống với tên viết tắt.
  • Tên người dùng phải được theo sau bởi 1 khoảng trắng, khoảng trắng thừa sẽ bị cắt ngắn

<tác giả@example.com> = địa chỉ email tùy chọn

  • Phải luôn nằm giữa <> dấu hiệu.
  • Định dạng địa chỉ email không được xác thực, bạn có thể nhập bất cứ thứ gì bạn muốn
  • Tùy chọn, bạn có thể bỏ qua điều này một cách rõ ràng bằng cách sử dụng <>

Nếu bạn không sử dụng cú pháp chính xác này, git sẽ tìm kiếm thông qua các xác nhận hiện có và sử dụng xác nhận đầu tiên có chứa chuỗi được cung cấp của bạn.

Ví dụ:

  1. Chỉ tên người dùng

    Bỏ qua địa chỉ email một cách rõ ràng:

    git commit --author="John Doe <>" -m "Impersonation is evil."
    
  2. Chỉ email

    Về mặt kỹ thuật, điều này là không thể. Tuy nhiên, bạn có thể nhập địa chỉ email làm tên người dùng và bỏ qua địa chỉ email một cách rõ ràng. Điều này dường như không hữu ích lắm. Tôi nghĩ việc trích xuất tên người dùng từ địa chỉ email sẽ có ý nghĩa hơn nữa và sau đó sử dụng nó làm tên người dùng. Nhưng nếu bạn phải:

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

Tôi đã chạy vào đây khi cố gắng chuyển đổi một kho lưu trữ từ đồng bóng sang git. Tôi đã thử nghiệm các lệnh trên msysgit 1.7.10.


13

Chỉ cần bổ sung

git commit - Tác giả = "john@doe.com" -m "Mạo danh là xấu xa."

Trong một số trường hợp, cam kết vẫn không thành công và hiển thị cho bạn thông báo sau:

*** Hãy cho tôi biết bạn là ai.

Chạy

git config --global user.email "you@example.com" git config --global user.name "Tên của bạn"

để đặt danh tính mặc định của tài khoản của bạn. Bỏ qua --global để chỉ nhận dạng danh tính trong kho lưu trữ này.

gây tử vong: không thể tự động phát hiện địa chỉ email (có xxxx)

Vì vậy, chỉ cần chạy "git config", sau đó "git commit"


Đây là những gì tôi cần. Tôi có tên người dùng và email riêng cho GitHub của công ty và GitHub công khai. Tôi cần đặt repo hiện tại của mình để sử dụng tên người dùng và email GitHub công khai của mình để tôi có thể đẩy các thay đổi của mình mà không để lộ email riêng tư.
Bệnh lao phổi

8

định dạng

A U Thor <author@example.com>

chỉ đơn giản là bạn nên chỉ định

FirstName MiddleName LastName <email@example.com>

Có vẻ như tên đệm và họ là tùy chọn (có thể là phần trước email không có định dạng nghiêm ngặt nào cả). Hãy thử, ví dụ, cái này:

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

Như các tài liệu nói:

  --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.

nếu bạn không sử dụng định dạng này, git coi chuỗi được cung cấp dưới dạng mẫu và cố gắng tìm tên phù hợp giữa các tác giả của các cam kết khác.


Không có thứ gọi là FirstName MiddleName LastName . Xem này .
Samy Dindane

3

Các --authortùy chọn không hoạt động:

*** Please tell me who you are.

Run

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

Cái này không

git -c user.name='A U Thor' -c user.email=author@example.com commit

Đây là người duy nhất làm việc cho tôi. Lưu ý thứ tự là quan trọng. git commit -c user.name="j bloggs" -am "message"đưa ra một lỗifatal: Option -m cannot be combined with -c/-C/-F
Martin

2

Mở Git Bash.

Đặt tên người dùng Git:

$ git config --global user.name "name họ" Xác nhận rằng bạn đã đặt đúng tên người dùng Git:

$ git config - người dùng toàn cầu.name

tên gia đình

Đặt email Git:

$ git config --global user.email email@foo.com Xác nhận rằng bạn đã đặt email Git chính xác:

$ git config - người dùng toàn cầu

email@foo.com


0

Tất cả phụ thuộc vào cách bạn cam kết.

Ví dụ:

git commit -am "Some message"

sẽ sử dụng ~\.gitconfigtên người dùng của bạn . Nói cách khác, nếu bạn mở tệp đó, bạn sẽ thấy một dòng giống như thế này:

[user]
    email = someemail@gmail.com

Đó sẽ là email bạn muốn thay đổi. Nếu bạn thực hiện yêu cầu kéo qua Bitbucket hoặc Github, v.v. bạn sẽ là bất cứ ai bạn đăng nhập.


0

Một sự thay thế nếu mối quan tâm là ẩn địa chỉ email thực ... Nếu bạn đang cam kết với Github, bạn không cần một email thực sự bạn có thể sử dụng<username>@users.noreply.github.com

Bất kể sử dụng Github hay không, bạn có thể đầu tiên muốn thay đổi bạn committer chi tiết (trên cửa sổ sử dụng SET GIT_...)

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

Sau đó đặt tác giả

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

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


Không giống như tất cả các giải pháp khác, giải pháp này hoạt động khi bạn chưa khởi tạo user.email/user.name ban đầu.
Andy

-2

Chạy hai lệnh này từ thiết bị đầu cuối để đặt email và tên người dùng

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

 git config --global user.name "your name" 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.