Những gì mà tác giả đã làm 7 ngày trước; cam kết 14 giờ trước có nghĩa là gì trên GitHub?


21

Tôi đang thấy điều này trên kho GitHub này :

nhập mô tả hình ảnh ở đây

Điều đó có nghĩa là gì? Làm thế nào một cái gì đó có thể được "tác giả 7 ngày trước", và "cam kết 14 giờ trước"?


Git có thể đo dấu thời gian giữa các tệp anh ta chỉnh sửa và khi anh ta thực sự cam kết và đẩy? Tôi không thấy việc sử dụng cho một tính năng như vậy nhưng đó là những gì từ ngữ ngụ ý ..
Seth

@ Đây là những gì tôi nghĩ lúc đầu, nhưng tôi thậm chí chưa bao giờ nghe nói về Git làm bất cứ điều gì với dấu thời gian.
Hoàn tác

@Seth Git bỏ qua dấu thời gian của tập tin. Committer có thể thay đổi dấu thời gian của tác giả khi đang sử dụng commit --date=. Schwern giải thích nó rất độc đáo.
ADTC

@Undo Tôi hy vọng bạn không nhầm lẫn "14 giờ trước" với "14 ngày trước" ... Bây giờ điều đó thực sự kỳ lạ, có một điều gì đó được cam kết mà dường như thậm chí còn chưa được tác giả cho đến 7 ngày sau ... Tôi ' m không chắc chắn nếu Git ngăn cài đặt dấu thời gian của tác giả lớn hơn dấu thời gian committer; nó có lẽ không quan tâm.
ADTC

Câu trả lời:


21

Git có một khái niệm riêng về tác giả (người đã viết mã) và người ủy quyền (người đã cam kết nó với kho lưu trữ). Tương tự như vậy có thể có ngày khác nhau cho cả hai. Họ thường giống nhau.

Bạn muốn chúng khác nhau chủ yếu nếu người viết mã hoặc gửi bản vá không có quyền truy cập vào kho lưu trữ như trong các dự án sử dụng danh sách gửi thư để gửi bản vá. Trong trường hợp này, người có quyền truy cập push sẽ áp dụng các bản vá và chạy git commitvới một trong hai --author--datecông tắc hoặc sử dụng các biến môi trường GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL và GIT_AUTHOR_DATE (tài liệu trong git-cam-cây .

Các trường hợp khác là sử dụng git cherry-pickhoặc git rebase. Người đi làm là người thực hiện việc hái anh đào, và tác giả là tác giả của cam kết ban đầu. Git sẽ xử lý thiết lập danh tính tác giả và ngày cho bạn.

Bạn có thể xem thông tin này trong kho lưu trữ với git log --pretty=fuller.

commit 21550561941b078ea1862b882ec89f26696ff5bb (HEAD, origin/master, origin/HEAD, master)
Author:     thiagopnts <thiagopnts@gmail.com>
AuthorDate: Tue Nov 18 14:52:49 2014 -0200
Commit:     Thiago Pontes <email@thiago.me>
CommitDate: Tue Nov 25 09:46:58 2014 -0200

    open repository url if confirmed, closes #1

1
git rebasecũng khiến ngày cam kết được cập nhật trong khi ngày tác giả vẫn giữ nguyên.
cjm

@cjm Bạn nói đúng! rebase và cherry-pick đều hành xử giống nhau về mặt này. Điều đó có ý nghĩa, một rebase có thể được coi là nhiều anh đào.
Schwern

1
Để áp dụng các bản vá từ thư, cũng có git am , tự động lấy ngày và tác giả từ thư.
deltab

6

Điều này trông giống như một sự pha trộn giữa cách Git hoạt động với ngày và cách nó được tham chiếu với các từ khóa đóng của GitHub .

Git tách biệt giữa ngày cam kết và ngày tác giả. Trong Pro Git, họ đi sâu vào sự khác biệt :

Tác giả là người ban đầu viết tác phẩm, trong khi người viết là người cuối cùng áp dụng tác phẩm. Vì vậy, nếu bạn gửi một bản vá cho một dự án và một trong những thành viên cốt lõi áp dụng bản vá đó, cả hai bạn đều nhận được tín dụng - bạn là tác giả và thành viên cốt lõi là người đi làm.

Vì vậy, trong khi bản thân mã đã được cam kết / viết "7 ngày trước" (cục bộ), nó không được "áp dụng" hoặc vá vào mã cho đến "14 giờ trước", vì nó không được nhìn thấy trong điều khiển từ xa cho đến khi được tham chiếu gần thông điệp.


2
Trong khi tôi chưa kiểm tra nó, tôi không tin rằng thông tin tác giả đã được thêm vào bởi các từ khóa đóng của Github. Danh tính và ngày tháng của tác giả và tác giả được ghi vào ID cam kết. Nếu Github thay đổi bất kỳ thứ nào trong số này, nó sẽ thay đổi ID cam kết ở đầu xa. Các kho lưu trữ từ xa và địa phương sẽ phân kỳ. Tác giả sẽ không thể đẩy hoặc kéo mà không buộc nó.
Schwern

2
Cam kết không giống như đẩy đến từ xa. Hãy nhớ rằng hầu hết mọi thứ trong Git đều có thể được thực hiện cục bộ, bao gồm cả các cam kết. Bạn có thể cam kết trước (cung cấp cả dấu thời gian) và đẩy sau (chỉ đơn thuần tải lên cam kết từ xa nhưng không đưa ra bất kỳ dấu thời gian nào). Không có "dấu thời gian đẩy" vì nó không quan trọng để biết khi nào một cam kết được đẩy - nó có thể (và thường là) được đẩy và kéo bất kỳ số lần nào.
ADTC
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.