Ghi đè người dùng đã định cấu hình cho một cam kết git duy nhất


100

Tôi đang cố gắng thực hiện một dự án trên github.com từ máy tính xách tay làm việc của mình, dự án này đã được định cấu hình cho máy chủ git của công ty. Có cách nào để cam kết chỉ định các thông tin xác thực tác giả khác nhau, có thể sử dụng tệp cấu hình khác hoặc các công tắc dòng lệnh khác không?

Tôi đã thử sử dụng

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

và tôi nhận được tin nhắn:

 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

nhưng nó vẫn không cập nhật tên người dùng của tôi vì đã cam kết với dự án github.com. Có điều gì khác tôi có thể thử và nó thậm chí có thể?


2
Git phân biệt giữa tác giảcó duyên . Để đặt trình xác nhận tạm thời cho một lệnh, hãy sử dụng -c user.name=Me user.email=me@example.com. Để sử dụng cấu hình chung tùy chỉnh, hãy xem câu hỏi này hoặc sử dụng bí danh shell chứa -ccác tùy chọn. Nhưng cả hai điều này có lẽ không phải là điều đúng đắn để làm trong tình huống này - bạn muốn có một cấu hình cho mỗi repo.
Robin Green

Với Git 2.22 (Quý 2 năm 2019), bạn sẽ có các cài đặt chuyên dụng {author,committer}.{name,email}. Xem câu trả lời của tôi bên dưới
VonC

Câu trả lời:


182

Đầu tiên, tác giả không nhất thiết phải giống như người cam kết. Git theo dõi cả hai.

Để đặt tên nào sẽ chỉ sử dụng cho kho lưu trữ này, bạn có thể làm:

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

Lưu ý sự vắng mặt của --globaltùy chọn. Thao tác này sẽ chỉ đặt cấu hình trong kho lưu trữ này.

Ngoài ra, bạn có thể thực hiện việc này chỉ với một lệnh duy nhất, sử dụng -ctùy chọn:

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

Nhưng tôi nghĩ tốt hơn là chỉ sử dụng các tùy chọn cấu hình ở trên.


6
đây chính xác là những gì tôi cần vì tôi cần phải cam kết từ tài khoản được chia sẻ (root trên máy chủ devel) vào git repo dưới quyền của mình và tôi không muốn người khác cung cấp tên / email của mình.
andrej

58

Hãy thử thêm điều này vào lệnh git của bạn:

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

Điều này là tốt cho một lần chụp, nhưng bạn có thể thích lưu nó trong tệp .git / config của repo cục bộ mà bạn đã sao chép từ git. Điều này có thể được thực hiện bằng cách chạy git config (không có --global hoặc --system để làm cho nó trở thành "cục bộ trong repo") hoặc bằng cách chỉnh sửa .git/config(cú pháp giống như~/.gitconfig


1
Cảm ơn bạn! Tôi đang chia sẻ máy chủ với nhiều người và không muốn đặt người dùng mặc định. Đây là hoàn hảo!
horriblyUnpythonic

1
@horriblyUnpythonic, bạn được chào đón :) Bạn cũng có thể tạo một bí danh trong của mình .bash_aliasesvà / hoặc bạn cũng có thể đặt một móc cam kết trước để từ chối cam kết khi người dùng không được xác định.
Asenar

28

Bạn cũng có thể thiết lập các biến môi trường GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, và GIT_AUTHOR_EMAILtrên cơ sở mỗi vỏ hoặc thậm chí mỗi lệnh.


Tuyệt vời, vì điều này chủ yếu được sử dụng trong kịch bản máy tính chia sẻ, mỗi phiên với tính năng dọn dẹp tự động là hoàn hảo.
kmac

1
Không làm việc cho tôi. Tác giả giữ nguyên sau git commit --amend. Chỉ có người cam kết đã thay đổi.
Ondra Žižka

Tôi cũng vậy ở đâygit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD

1
Điều này là do git commit --amendthiết kế không làm thay đổi tác giả, như trang báo nói. Giải pháp: git commit --amend --reset-author
kubanczyk

7

Tôi tin rằng bạn có thể chạy:

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

cho các phần khác nhau của git. Thử mở thư mục nơi công việc đang được thực hiện cho repo đến máy chủ github.

Đảm bảo rằng bạn thấy thư mục .git trong thư mục công việc đó. Bây giờ hãy mở thư mục đó trong Terminal / Console / CommandPrompt và thử thay đổi tên người dùng và email cho thư mục đó chỉ bằng cách chạy các lệnh tôi đã chỉ định ở trên.

Bằng cách thay đổi điều đó, bây giờ bạn có thể truy cập vào máy chủ GitHub.

Hãy xem tại đây: https://help.github.com/articles/setting-your-username-in-git https://help.github.com/articles/setting-your-username-in-git

Ngoài ra, tôi tin rằng có một cách để chuyển đến một repo từ xa bằng cách sử dụng tên người dùng và mật khẩu github của bạn trong chính lệnh đó, nhưng tôi không trích dẫn nó vì nó không hoạt động với tôi.


5

Theo dõi câu trả lời của Jesse Glick tại đây với triển khai mở rộng vì IMO gợi ý của anh ấy là cách tốt nhất để thực hiện điều này.

Thêm phần bên dưới vào .bash_profile của bạn. Nó sẽ nhắc bạn cho người dùng khi lần đầu tiên chạy bất kỳ lệnh git nào trong trình bao hoạt động. Sau đó, nó sẽ ghi nhớ người dùng cho tất cả các lần chạy tiếp theo.

(rõ ràng là tham chiếu chéo một giá trị người dùng đầu vào đến các tên và địa chỉ email mong muốn chính xác cho các giá trị git auther / name khác nhau trong khối trường hợp và cập nhật các chỉ định nếu cần)

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

Bạn cũng có thể thiết lập các biến môi trường GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, và GIT_AUTHOR_EMAILtrên cơ sở mỗi vỏ hoặc thậm chí mỗi lệnh.

Trên thực tế, kể từ Git 2.22 (Quý 2 năm 2019), bạn có một tùy chọn mới: Bốn biến cấu hình mới {author,committer}.{name,email}đã được giới thiệu để ghi đèuser.{name,email} trong các trường hợp cụ thể hơn.

Xem cam kết 39ab4d0 (04/02/2019) của William Hubbs (``) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 4e021dc , ngày 07 tháng 3 năm 2019)

config: cho phép cung cấp id tác giả và người cam kết riêng biệt

Các author.email, author.name, committer.emailcommitter.namethiết lập được tương tự như GIT_AUTHOR_*GIT_COMMITTER_*môi trường biến, nhưng đối với git confighệ thống.
Điều này cho phép chúng được đặt riêng cho từng kho lưu trữ.

Git hỗ trợ thiết lập các thông tin về quyền tác giả và người cam kết khác nhau với các biến môi trường. Tuy nhiên, các biến môi trường được đặt trong shell, vì vậy nếu thông tin về quyền tác giả và người xác nhận khác nhau là cần thiết cho các kho lưu trữ khác nhau, thì cần phải có công cụ bên ngoài.

Này thêm hỗ trợ để cấu hình git cho author.email, author.name, committer.emailcommitter.name các thiết lập vì vậy thông tin này có thể được thiết lập cho mỗi kho.

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.