'Git Suçlama' ne yapar?


314

Kullanım yöntemleri hakkında birçok soru gördüm git blame, ama onları gerçekten anlamıyorum.

BlameGitHub arayüzündeki dosyaların üstünde bir düğme görüyorum . Tıklandığında, sol çubuktaki kullanıcı adlarıyla bazı farklılıklar gösterir. Bu ne gösteriyor?

Neden git blameGitHub dışında gerçekten kullanılıyor?


67
Eğer "suçlama" da kulağa hoş geliyorsa, suçlama sizin için bu komut dosyasını yükleyebilir ve git praisebunun yerine kullanabilirsiniz :) github.com/ansman/git-praise
Jon Kiparsky

7
Ne suç ne de övgü olmalı; doğası gereği varsayımsal ve nesnel olmalıydı.
pdvries

41
git objectively-determine-contributersadece aynı yüzüğü yok.
Ritwik Bose

27
@RitwikBose or onlygit who
aktivb

Yanıtlar:


238

Gönderen git-suçlama :

Verilen dosyadaki her satıra, satırı en son değiştiren revizyondan gelen bilgilerle açıklama ekler. İsteğe bağlı olarak, verilen revizyondan açıklama eklemeye başlayın.

Bir veya daha fazla kez belirtildiğinde, -L ek açıklamayı istenen satırlarla sınırlar.

Misal:

johndoe@server.com:~# git blame .htaccess
...
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  4) allow from all
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  5)
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  6) <IfModule mod_rewrite.c>
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  7)     RewriteEngine On
...

git blameSatır başına değişiklik geçmişini kronolojik olarak göstermediğini lütfen unutmayın . Sadece bir belgedeki son işleme kadar son kimin değiştiğini gösterir HEAD.

Bu bir belge hattının log / tam tarihini görmek için, bir çalıştırmak gerekir yani git blame path/to/fileher Gözlerinde farklı taahhüt git log.


1
yani sadece son kişiyi görmek için mi?
Rıfat Erdem Şahin

2
Evet, çizgiyi değiştiren son kişiyi görmenizi sağlar.
Mark

@Mark Yani bir IDE'ye açıklama eklediğimizde, dahili olarak bir git blame komutu yapar mı?
Nagarajan Shanmuganathan

2
@NagarajanShanmuganathan evet, git kullanırsanız, sahne arkasında olan şey budur.
Mark

152

Komut kendini oldukça iyi açıklıyor. Hangi iş arkadaşının belirli bir satır yazdığını veya projeyi mahvettiğini anlamak, böylece onları suçlayabilirsiniz :)


105
Komut aslında, birini çalıştırarak birini suçluyormuşsunuz gibi geliyor . En azından bu yazıda ne yaptığını öğrenmeden önce bana böyle geldi.
Francisco C.

12
@FranciscoC. Bunu arıyorsunuz: github.com/jayphelps/git-blame-someone-else
DustWolf

2
@FranciscoC. ne bekle, bu tam olarak bunu yapmıyor mu yani başka birini suçlamanı sağlıyor mu?
IanDess

16
@IanDess Belki de sadece anlambilimseldir, ancak aslında kimin hangi değişikliklerin yapıldığı konusunda sizi bilgilendirdiği gibi, git blamekalıcı bir etkisi olacakmış gibi gelir git commit. Bu ve "suçlama" kelimesinin taşıdığı negatif çağrışım, komutadan uzak durmanız gereken bir şey gibi ses çıkarır ve bunun gibi sorulara yol açar.
Francisco C.

20
Açıkçası, çağrılmalıdır git praise.
pfnuesel

75

GitHub'dan :

Suçlama komutu, bir dosyada kimin değişiklik yaptığını belirlemenize yardımcı olmak için tasarlanmış bir Git özelliğidir.

Olumsuz sonucu ismine rağmen, git suçlama aslında oldukça zararsızdır; birincil işlevi, bir dosyadaki hangi satırları kimin değiştirdiğini ve nedenini belirtmektir. Kodunuzdaki değişiklikleri tanımlamak için yararlı bir araç olabilir.

Temel olarak, git-blamebir dosyanın her satırını en son hangi düzeltme ve yazarın değiştirdiğini göstermek için kullanılır. Bir dosyanın gelişim tarihçesini kontrol etmek gibidir.


2
Bu bana gereksiz geliyor, taahhütler ve kullanıcı kayıt günlüğünden kimliği arasında bir fark görebilirsiniz. Burada her şeyi anlıyorsam, taahhüt geçmişinden daha az kalıcıdır. Belki bir şeyleri kaçırıyorum, ama kamuoyunda aşağılanma yoluyla uygulanan kodlama standartları gibi görünüyor.
user1431356

8
Komutun adı Linus'un mizah anlayışının bir sonucuydu sanırım :) Kimseyi küçük düşürmek için kullanılmadı :) yararlı bir komutun adı için sadece komik (ya da değil) bir seçim :)
Mladen

2
@ user1431356 - önemli olan, belirli bir satırı etkileyen ilk günlük satırını istemenizdir . Aksi takdirde, belirli bir dizeyi günlüklerde aramanız gerekir. (Bu gerçekten uygun bir yaklaşımdır - "git log -S" için man sayfalarına bakın.)
azernik

1
"Suçlama" unvanı git'den yıllar önce var olan bir şeydir. Sadece bakmak svn'nin uygulanması . Linus Torvalds tarafından verilen bir isim değildi.
JackAce

"Sanırım emrin adı Linus'un mizah anlayışının sonucuydu :) Kimseyi küçük düşürmek için kullanılmadı :)" lol ... Daha çok Linus'un kişiliğiydi ve birini aşağılamak.
Sinaestetik

34

git blameKomutu bir dosyada yapılan son değişiklikler sorumludur taahhüt hangi kim / bilmek için kullanılır. Her satırın yazarı / taahhüdü de görülebilir.

git blame filename (koddaki tüm satırlardaki değişikliklerden sorumludur)

git blame filename -L 0,10 ("0" satırından "10" satırına değişikliklerden sorumludur)

Suçlama için başka birçok seçenek var, ancak genellikle bunlar yardımcı olabilir.


2

git blameKomut (Q2 2019), bunu yapacağız Git 2,22 ile ... son satırı modifiye revizyon bilgilerle satırları not ekler ve daha hızlı "etrafında çünkü bir performans düzeltmenin, git blamehangi (özellikle doğrusal tarihinin," için optimize etmeliyiz).

Bkz. Taahhüt K892014 (02 Nis 2019), David Kastrup ( fedelibre) . (Göre Birleştirilmiş Junio Cı Hamano - gitster- içinde işlemek 4d8c4da , 25 Nisan 2019)

blame.c: kökeni lekeleri hevesle düşürmeyin

Bir ebeveyn blob zaten suçlama için sıraya girdiğinde, bir suçlama adımının sonunda blobun düşmesi, hemen yeniden yüklenmesine, I / O miktarının iki katına çıkmasına ve doğrusal bir geçmişi işlerken paketinin açılmasına neden olur.

Bu tür ana blobları hafızada tutmak, çoğunlukla eski dallardan birleştirmeleri işlerken ek hafıza baskısına neden olması gereken makul bir optimizasyon gibi görünüyor.


1

git blameHer satırı son düzenleme ve değişiklikler yazarı kim iken komut satırı ile bir dosya hattının içeriğini incelemek ve görmek için kullanılır.

Kodda bir hata varsa, onu kimin kapladığını belirlemek için kullanın, o zaman onu suçlayabilirsiniz. Git Suçu Suçla (d).

Bir satır kodunun geçmişini bilmeniz gerekiyorsa, git log -S"code here" , git blame'den daha basit .

git log vs git blame

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.