Git'teki Oturumu Kapat özelliği ne işe yarar?


Yanıtlar:


536

Oturum kapatma, Linux çekirdeğine ve diğer birkaç projeye düzeltme ekleri almak için bir gerekliliktir, ancak çoğu proje bunu gerçekten kullanmaz.

Bu ertesinde tanıtıldı SCO dava , (ve SCO telif hakkının ihlaline ilişkin diğer suçlamalar bir şekilde, aslında mahkemeye götürdü asla çoğu,) Menşe Geliştiriciler Belgesi . Söz konusu yamayı oluşturduğunuzu ya da bilginiz dahilinde, uygun bir açık kaynak lisansı altında oluşturulduğunu ya da size birileri tarafından sağlandığını onayladığınızı söylemek için kullanılır. bu şartlar altında başka. Bu, uygun bir özgür yazılım (açık kaynak) lisansı altında yayınlanmayan telif hakkıyla korunan kodun çekirdeğe dahil edilmemesini sağlamak için, söz konusu kodun telif hakkı durumu için sorumluluk alan bir insan zinciri oluşturulmasına yardımcı olabilir.


91
Açıklanan anlamın Signed-off-by:Linux çekirdek projesi (ve Git projesinin kendisi) tarafından kaydedilen mesaj satırlarına atanan anlam olduğu unutulmamalıdır . Bununla birlikte, diğer projeler için, proje onlara anlam atamadığı sürece bu tür satırlar anlamsızdır (örneğin, projenin belgelerinde tanımlayarak; örneğin Linux'un SubmittingPatches veya Git's SubmittingPatches ).
Chris Johnsen

39
Peki, bunun neden tamamlama mesajında ​​yapılması gerekiyordu? Taahhütlerin kendilerine bağlı bir yazarı olduğunu ve SHA1 karma işleminin bir parçası olduğunu düşündüm.
Leif Andersen

34
@Yasal Yazarlık bilgisi yeterli değildir. Bir yama yazmış olabilirim, ancak Unix'in bazı kodlarına dayanırsam, GPL altında serbest bırakma iznim olmazdı (en azından daha yüksek birinden imza atmadan). Ya da, bir yama çekirdek ağacına sarılmadan önce onu birkaç farklı koruyucu arasında yapabilir; imza, velayet zincirini gösterir. Bağlantı verdiğim menşe belgesini okuyun; Bir imza satırı eklediğinizde anlamı budur. "Yazar" başlığı yanlış olabilir ve menşe sertifikasındaki her şeyle anlaşma gerektiği anlamına gelmez.
Brian Campbell

68
PGP anahtarı olmadan, imzalamanın gerçek olduğu nasıl tespit edilebilir?
HRJ

7
@HRJ Bir imzanın gerçekliği sizin üzerinizde (komiser). Yazara değil, imzalanmış olana da. Daha sonra birisi (çoğunlukla oturum kapatıldı) geçerli olmadığına itiraz ederse, sizinle bir e-posta veya kabul ettiğini kanıtlayan bir şey daha iyi olur. Komiser, eğer GPG imzalı değilse (IMHO zayıf bir savunma değil, ...) böyle bir blob yapmadığını söyleyebilir. Bu durumda, komite daireyi kapatmak için -S'yi kullanabilir. Şimdi -S ve -s ile, bir yazarın yazdığı kodun bazı oturumlar kapatılmış kişiler tarafından kullanılmasına izin verildiğine dair komitenin sözüne dayanan bir velayet zinciriniz var.
Dr Beco

70

Çıkış, kesinleştirme mesajının sonundaki, kesinliğin kimin yazar olduğunu onaylayan bir satırdır. Temel amacı, özellikle yamalar ile kimin ne yaptığını izlemeyi geliştirmektir.

Örnek taahhüt:

Add tests for the payment processor.

Signed-off-by: Humpty Dumpty <humpty.dumpty@example.com>

Açık kaynaklı bir proje için kullanılıyorsa, kullanıcının gerçek adını içermelidir.

Şube bakıcılarının yamaları birleştirmek için yamaları biraz değiştirmesi gerekiyorsa, göndericiden redf yapmasını isteyebilir, ancak karşı üretken olacaktır. Kodu ayarlayabilir ve imzalarını sonuna kadar koyabilir, böylece orijinal yazar hala yama için kredi alır.

Add tests for the payment processor.

Signed-off-by: Humpty Dumpty <humpty.dumpty@example.com>

[Project Maintainer: Renamed test methods according to naming convention.]
Signed-off-by: Project Maintainer <project.maintainer@example.com>

Kaynak: http://gerrit.googlecode.com/svn/documentation/2.0/user-signedoffby.html


38
authorBir git taahhüdü alanında bu gereksiz değil mi? Hep ayrı olduğunu bu yüzden düşünce authorve committertarla. Yazar düzeltme eki yazarı ve yazar düzeltme eki uygulayan ve iten adamdır.
Leif Gruenwoldt

10
Bir taahhüdün yazarının kim olduğunu gerçekten onaylıyor mu? Yani, -S (--gpg-sign) kadar, çünkü sanmıyorum. Herkesin herhangi bir isim ve e-posta ile "İmzaladı" satırı ekleyebileceğini düşünüyorum, oysa GPG imzası çok daha güvenilir, ama belki de yanılıyorum.
hdl

1
“Çıkış yapma, tamamlama mesajının sonunda, taahhüdün yazarı kimin olduğunu doğrulayan bir satırdır. Temel amacı, özellikle yamalar ile kimin ne yaptığını izlemeyi geliştirmektir. ” - Bu neredeyse kesinlikle yanlış (özellikle ilk cümle). Karşı bir örnek olarak, örneğin iki oturum açma üstbilgisi olan b2c150d3aa (VonC'nin cevabına bağlı olarak) ; biri yazar tarafından, biri yazar tarafından. Bu, Git ve Linux projelerinde yaygın olarak kullanılan bir uygulamadır.
Guildenstern

(Önceki yorumdan devam.) Oturumu kapatmak, taahhüdü belirli koşullar altında yazdığınız veya yukarıda belirtilen koşulu yerine getiren (tarafından belirtilen) bir kişi tarafından yazılan bir şeyi aktardığınız anlamına gelir. Böylece bir sertifika zinciri gibi bir şey oluşturur.
Guildenstern

Yukarıdaki güncelleme: Son cevabımda bir şey kaçırdım ve bu cevabı hafife aldım. Yazar “kodun ayarlanması” konusunda kısmen doğrudur, ancak “çıkış” fragmanına yanlış vurgu yapmaktadır. Belgeler, bunun hakkında bilgi veren köşeli bir römork eklemeniz gerektiğini söylüyor (cevaptaki örnekte olduğu gibi). Dolayısıyla, bununla bağlantılı olarak imza , entegratör / sürdürücü gibi insanlar tarafından küçük değişiklikler eklemek için kullanılabilir. Ancak imza hala esas olarak tarif ettiğim gibi hizmet ediyor.
Guildenstern

30

git 2.7.1 (Şubat 2016) b2c150d (05 Ocak 2016) tarihinde David A. Wheeler ( david-a-wheeler) tarafından açıklanmıştır .
(Göre Birleştirilmiş Junio Cı Hamano - gitster- içinde işlemek 7aae9ba , 5 Şubat 2016)

git commitman sayfası artık şunları içeriyor:

-s::
--signoff::

Signed-off-byTaahhüt günlüğü iletisinin sonuna komisyoncunun satırını ekleyin .
İmzalamanın anlamı projeye bağlıdır, ancak genellikle komisyon sahibinin bu eseri aynı lisans altında gönderme hakkına sahip olduğunu ve Geliştirici Menşe Belgesi'ni kabul ettiğini onaylar ( daha fazla bilgi için bkz. Https://developercertificate.org ).


Açıklayan belgeleri genişletin --signoff

Ne --signoffanlama geldiğini daha ayrıntılı olarak açıklamak için çeşitli belge (kılavuz sayfası) dosyalarını değiştirin .

Bu esinlenerek " paultom '' Bottomley: DCO hakkında mütevazı bir teklif ' ' (pauline:

Ben DCO'ya ile olan sorun olduğunu bir "ekleyerek -sgit gerçekten bile DCO'nun duymuş anlamına gelmez işlemeye" argüman ( man sayfası DCO her yerde bahsedilmemektedir ), aslında görüldüğü never mind.git commit

Öyleyse, " signed-off-by" in varlığı , gönderenin DCO'yu kabul ettiğini ve taahhüt ettiğini nasıl ima edebilir? Gerçek ile birlikte ben SOBs olmadan yamalar " signed-off-byBunu yeniden yapabilir , böylece yeniden gönder" den başka bir şey söyleme yamalar listelerinde yanıtlar gördüm .

Git'in belgelerini genişletmek, geliştiricilerin kullandıklarında anladıklarını iddia etmeyi kolaylaştıracaktır --signoff.


Bu imzalamanın artık (Git 2.15.x / 2.16, Q1 2018 için) de mevcut olduğunu unutmayın git pull.

W. Trevor King ( ) tarafından taahhüt edilen 3a4d2c7 (12 Eki 2017) bölümüne bakınız . (Tarafından Birleştirilmiş - Junio C Hamano - içinde fb4cd88 taahhüt 2017, 06 Kas)wking
gitster

pull: --signoff/--no-signoff" git merge" adresine geç

birleştirme alabilir --signoff, ancak --signoffaşağı çekmeden kullanmak kullanmak elverişsizdir; ' pull' seçeneği alıp geçmesine izin verin .


2
Git taahhüdü belgelerinde bile (nihayet) belgeye atıfta bulunulursa, -s bayrağı bilgi ve anlaşma / rıza / ??? Bence, SOB yasal olarak çok zayıf. SOB, en azından Linus tarafından bir sosyal sorunu çözmek için icat edildi, çünkü diğerleri yüksek genel bürokrasiyi savunuyordu. Linus hiçbir şey istemedi, ama onları susturmak için bunu yaptı. Söyleyebildiğim kadarıyla avukatlar, eğer varsa, ona çok fazla yatırım yapmanızı tavsiye etmiyorlardı. (Ben LWN'de 'paulj'um).
paulj

3
VonC, sen gerçek bir Git küratörsün. Bunun gibi sorularla ilgili her zaman bu kadar iyi yapılandırılmış, bilgilendirici ve hoş çapraz referanslı cevaplara sahipsiniz - Git geliştirmenin geçmişini nihai kullanıcı-karşılama araçlarına ve belgelerine kadar takip edin. Bunun için teşekkür ederim.
Guildenstern

3
@Guildenstern Bu güzel yorum için teşekkür ederim.
VonC

17

Bu soruya güzel cevaplar var. Mevcut uygulamada bu tür hatların / başlıkların / fragmanların ne hakkında olduğu hakkında daha geniş bir cevap eklemeye çalışacağım. Özellikle oturum açma başlığı hakkında çok fazla değil (sadece bu değil).

“Çıkış” (↑ 2) gibi üstbilgiler veya fragmanlar (↑ 1), mevcut uygulamada Git ve Linux gibi projelerde taahhüt için meta verileri etkin bir şekilde yapılandırmıştır. Bunların tümü, mesajın gövdesinin “serbest form” (yapılandırılmamış) kısmından sonra, tamamlama mesajının sonuna eklenir. Bunlar, genellikle iki nokta üst üste ve bir boşluk ( ) ile sınırlanan jeton değeri (veya anahtar / değer çifti) çiftleridir :␣.

Bahsettiğim gibi, “çıkış” mevcut uygulamadaki tek fragman değil. Örneğin , “Kirli İnek” ile ilgili olan bu taahhüde bakınız :

 mm: remove gup_flags FOLL_WRITE games from __get_user_pages()
 This is an ancient bug that was actually attempted to be fixed once
 (badly) by me eleven years ago in commit 4ceb5db9757a ("Fix
 get_user_pages() race for write access") but that was then undone due to
 problems on s390 by commit f33ea7f404e5 ("fix get_user_pages bug").

 In the meantime, the s390 situation has long been fixed, and we can now
 fix it by checking the pte_dirty() bit properly (and do it better).  The
 s390 dirty bit was implemented in abf09bed3cce ("s390/mm: implement
 software dirty bits") which made it into v3.9.  Earlier kernels will
 have to look at the page state itself.

 Also, the VM has become more scalable, and what used a purely
 theoretical race back then has become easier to trigger.

 To fix it, we introduce a new internal FOLL_COW flag to mark the "yes,
 we already did a COW" rather than play racy games with FOLL_WRITE that
 is very fundamental, and then use the pte dirty flag to validate that
 the FOLL_COW flag is still valid.

 Reported-and-tested-by: Phil "not Paul" Oester <kernel@linuxace.com>
 Acked-by: Hugh Dickins <hughd@google.com>
 Reviewed-by: Michal Hocko <mhocko@suse.com>
 Cc: Andy Lutomirski <luto@kernel.org>
 Cc: Kees Cook <keescook@chromium.org>
 Cc: Oleg Nesterov <oleg@redhat.com>
 Cc: Willy Tarreau <w@1wt.eu>
 Cc: Nick Piggin <npiggin@gmail.com>
 Cc: Greg Thelen <gthelen@google.com>
 Cc: stable@vger.kernel.org
 Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Yukarıdaki “çıkış” fragmanına ek olarak:

  • “Bilgi” (yama hakkında bilgilendirildi)
  • “Onayladı” (kodun sahibi tarafından onaylandı, “bana iyi görünüyor”)
  • “İnceleyen” (inceleme)
  • “Bildirilen ve test edilen” (sorunu bildirdim ve test etti (sanırım))

Gerrit gibi diğer projelerin de kendi başlıkları ve bunlar için ilişkili anlamları vardır.

Bkz. Https://git.wiki.kernel.org/index.php/CommitMessageConventions

Hikayeden çıkarılacak ders

Benim izlenimime göre, bu belirli meta veriler için ilk motivasyon bazı yasal konular olmasına rağmen (diğer cevaplara göre değerlendirilir), bu tür meta veriler uygulamasının sadece bir yazarlık zinciri oluşturma davasıyla uğraşmanın ötesine geçti.

[↑ 1]: man git-interpret-trailers
[↑ 2]: Bunlara bazen “hıçkırık” (baş harfleri) denir, öyle görünüyor.


2
İlginç kullanım durumu. +1
VonC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.