Apa yang “ditulis 7 hari yang lalu; berkomitmen 14 jam yang lalu ”berarti di GitHub?

21

Saya melihat ini di repositori GitHub ini :

masukkan deskripsi gambar di sini

Apa artinya ini? Bagaimana sesuatu bisa "ditulis 7 hari yang lalu", dan "dilakukan 14 jam yang lalu"?

Batalkan
sumber
Mungkinkah git mengukur cap waktu antara file yang dia edit dan kapan dia benar-benar berkomitmen dan mendorong? Saya tidak melihat kegunaan untuk fitur seperti itu tapi itulah yang tersirat dari kata-katanya ..
Seth
@Seth Itulah yang saya pikirkan pada awalnya, tetapi saya belum pernah mendengar Git melakukan apa pun dengan cap waktu.
Undo
@Seth Git mengabaikan cap waktu file. Committer dapat mengubah stempel waktu penulis dengan menggunakan commit --date=. Schwern menjelaskannya dengan sangat baik.
ADTC
@Undo Saya harap Anda tidak bingung "14 jam yang lalu" dengan "14 hari yang lalu" ... Sekarang itu benar-benar aneh, untuk melakukan sesuatu yang tampaknya bahkan belum ditulis sampai 7 hari kemudian ... Saya ' saya tidak yakin apakah Git mencegah pengaturan stempel waktu penulis lebih besar dari stempel waktu pengendara; mungkin tidak peduli.
ADTC

Jawaban:

21

Git memiliki konsep terpisah dari pengarang (orang yang menulis kode) dan pengalih (orang yang melakukan itu ke repositori). Demikian pula, mungkin ada tanggal yang berbeda untuk keduanya. Mereka biasanya sama.

Anda ingin mereka berbeda terutama jika orang yang menulis kode atau mengirimkan tambalan tidak memiliki akses push ke repositori seperti dalam proyek yang menggunakan milis untuk pengiriman tambalan. Dalam hal ini, orang dengan akses push akan menerapkan tambalan dan menjalankan git commitdengan baik --authordan --dateberalih atau menggunakan GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL dan variabel lingkungan GIT_AUTHOR_DATE (didokumentasikan dalam pohon git-commit-tree .

Kasus lain menggunakan git cherry-pickatau git rebase. Komuter adalah orang yang melakukan pengambilan ceri, dan penulis adalah penulis komit asli. Git akan menangani pengaturan identitas dan tanggal penulis untuk Anda.

Anda dapat melihat informasi ini di repositori bersama git log --pretty=fuller.

commit 21550561941b078ea1862b882ec89f26696ff5bb (HEAD, origin/master, origin/HEAD, master)
Author:     thiagopnts <[email protected]>
AuthorDate: Tue Nov 18 14:52:49 2014 -0200
Commit:     Thiago Pontes <[email protected]>
CommitDate: Tue Nov 25 09:46:58 2014 -0200

    open repository url if confirmed, closes #1
Schwern
sumber
1
git rebasejuga menyebabkan tanggal komit diperbarui sementara tanggal penulis tetap sama.
cjm
@ cjm Anda benar! rebase dan cherry-pick keduanya berperilaku sama dalam hal ini. Masuk akal, sebuah rebase dapat dianggap sebagai beberapa pilihan ceri.
Schwern
1
Untuk menerapkan tambalan dari surat, ada juga git , yang secara otomatis mengambil tanggal dan pembuat dari pesan surat.
deltab
6

Ini terlihat seperti campuran antara cara kerja Git dengan tanggal dan bagaimana direferensikan dengan kata kunci penutup GitHub .

Git memisahkan antara tanggal komit dan penulis. Dalam Pro Git mereka sedikit berbeda :

Penulis adalah orang yang awalnya menulis karya tersebut, sedangkan komuter adalah orang yang terakhir mengaplikasikan karya tersebut. Jadi, jika Anda mengirim tambalan ke proyek dan salah satu anggota inti menerapkan tambalan, Anda berdua mendapatkan kredit - Anda sebagai penulis, dan anggota inti sebagai pengangkut.

Jadi sementara kode itu sendiri dilakukan / ditulis "7 hari yang lalu" (secara lokal), itu tidak "diterapkan" atau ditambal ke kode sampai "14 jam yang lalu", karena tidak terlihat di remote sampai yang dirujuk tutup pesan.

Delapan Hari Malaise
sumber
2
Meskipun saya belum mengujinya, saya tidak percaya informasi penulis ditambahkan oleh kata kunci penutup Github. Identitas dan tanggal committer dan penulis dimasukkan ke dalam ID komit. Jika Github mengubah semua ini, itu akan mengubah ID komit pada ujung jarak jauh. Repositori jauh dan lokal akan berbeda. Penulis tidak akan bisa mendorong atau menarik tanpa memaksanya.
Schwern
2
Berkomitmen tidak sama dengan mendorong ke jarak jauh. Ingatlah bahwa hampir semua yang ada di Git dapat dilakukan secara lokal, termasuk komitmen. Anda dapat melakukan komit pertama (yang memberikan kedua cap waktu) dan mendorong kemudian (yang hanya mengunggah komit ke jarak jauh tetapi tidak memberikan cap waktu apa pun). Tidak ada 'push timestamp' karena tidak penting untuk mengetahui kapan sebuah komit ditekan - komit dapat (dan seringkali) didorong dan ditarik beberapa kali.
ADTC