Danh sách gửi thư + git format-patch
+ git apply
có thể tạo tác giả! = Committer
Trong các dự án như nhân Linux, nơi các bản vá là:
tạo ra một cam kết mới với tác giả và người đi làm khác nhau:
- tác giả là người đã viết bản vá
- người giao dịch là người duy trì dự án và là người hợp nhất bản vá
Xem ví dụ bản vá được chọn ngẫu nhiên này và cam kết tương ứng:
Các giao diện web Git như GitHub và GitLab có thể hoặc không thể tạo tác giả! = Committer
Vì Git (Hub | Lab) giữ cả kho lưu trữ ngược dòng và ngã ba trên cùng một máy, chúng có thể tự động làm bất cứ điều gì bạn có thể làm tại địa phương, bao gồm cả:
Tạo một cam kết hợp nhất.
Không tạo tác giả! = Committer.
Giữ nguyên SHA hoặc cam kết mới và tạo ra một cam kết mới:
* Merge commit (committer == author == project maintainer)
|\
| * Feature commit (committer == author == contributor)
|/
* Old master (random committer and author)
Trong lịch sử, đây là phương pháp có sẵn đầu tiên trên GitHub.
Tại địa phương, điều này được thực hiện với git merge --no-ff
.
Điều này tạo ra hai cam kết cho mỗi yêu cầu kéo và giữ một ngã ba trong lịch sử git.
nổi loạn trên đỉnh master
GitHub cũng hack các cam kết để đặt committer == bất cứ ai nhấn nút hợp nhất. Điều này không bắt buộc và thậm chí không được thực hiện theo mặc định tại địa phương git rebase
, nhưng nó mang lại trách nhiệm cho người duy trì dự án.
Cây git bây giờ trông như:
* Feature commit (committer == maintainer, author == contributor)
|
* Old master (random committer and author)
đó là chính xác như của các git apply
bản vá email.
Trên GitHub hiện tại:
- bạn chọn phương thức khi hợp nhất thông qua menu thả xuống trên nút hợp nhất
- phương thức có thể được bật hoặc tắt trên cài đặt repo của chủ sở hữu
https://help.github.com/articles/about-merge-methods-on-github/
Làm thế nào để thiết lập committer của một cam kết mới?
Điều tốt nhất tôi có thể tìm thấy là sử dụng các biến môi trường để ghi đè lên committer:
GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'
Làm thế nào để có được cam kết và ngày cam kết của một cam kết nhất định?
Chỉ có dữ liệu tác giả hiển thị theo mặc định trên git log
.
Để xem ngày bắt đầu, bạn có thể:
định dạng nhật ký cụ thể cho điều đó:
git log --pretty='%cn %cd' -n1 HEAD
ở đâu cn
và cd
đứng cho Committer Name
vàCommitter Date
sử dụng fuller
định dạng được xác định trước:
git log --format=fuller
Xem thêm: Cách định cấu hình 'nhật ký git' để hiển thị 'ngày cam kết'
ở mức thấp và hiển thị toàn bộ dữ liệu cam kết:
git cat-file -p HEAD
Làm cách nào để đặt ngày bắt đầu của một cam kết mới?
git commit --date
chỉ đặt ngày tác giả: đối với ngày giao dịch, điều tốt nhất tôi có thể tìm thấy là với biến môi trường:
GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'
Xem thêm: Sự khác biệt giữa tác giả và người đi làm trong Git là gì?
Làm thế nào Git lưu trữ tác giả vs committer trong nội bộ?
Xem: Định dạng tệp của đối tượng cam kết git là gì?
Về cơ bản, cam kết là một tệp văn bản và nó chứa hai trường được phân tách bằng dòng:
author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}
Điều này làm rõ rằng cả hai là hai mục nhập dữ liệu hoàn toàn độc lập trong đối tượng cam kết.