GitHub'da bir taahhüt mesajını nasıl arayabilirim?


328

Değil bir Git depo , ancak bu özelliği GitHub'dan özellikle - nasıl belirli bir depo / şube mesajları işlemek sadece arayabilirim?


3
Repo halka açık mı yoksa özel mi?

2
Tüm çatallarda taahhüt mesajları aramaya ne dersiniz? Ana depoda 100'den fazla çatal olduğunda tekerleği yeniden icat etmekten kaçınmaya çalışıyorum!
Daniel Sokolowski

O zamandan beri herhangi bir değişiklik var mı?
Pavel Šimerda

taahhütlerini aramak istiyorum
frumbert

Yanıtlar:


68

2017 itibariyle GitHub'ın kendisinde bulunan bir işlev .

Onlar tarafından kullanılan örnek arama repo:torvalds/linux merge:false crypto policy

resim açıklamasını buraya girin Https://github.com/blog/2299-search-commit-messages GIF resmi


Okuma / yazma erişimime sahip olduğum özel bir repo ararken izin hatası alıyorum.
anon58192932

1
Beş dakikadır izliyorum ve farenin aşağı ve sağa doğru döndükten sonra nereye gittiğini anlayamıyorum.
Kevin Krumwiede

1
@KevinKrumwiede muhtemelen "kaydı durdur" düğmesine haha
Corey Cole

Vazgeçtim ve "git log --all --grep = searhterm" kullanıyorum
Edwin Evans

206

Bunu yapabiliyordunuz, ancak GitHub bu özelliği 2013'ün ortalarında kaldırmıştı. Bunu yerel olarak başarmak için şunları yapabilirsiniz:

git log -g --grep=STRING

( -gDiğer dalları ve sarkan taahhütleri aramak istiyorsanız bayrağı kullanın .)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones.

143
neden çileden çıkardılar? Bu gerçekten yararlı bir özellik.
Josh Brown

1
Faktör Mistik: I.want.spaces.in.th.string genellikle yeterlidir.
dbrower

11
İpucu -gen yaygın kullanım durumları için bayrağı atlayın . Buna çok fazla bakmadım, ancak -garama sadece bir ay geri gidiyor gibi görünüyor. git log -g --grep=fixise developiki yıl kapsayan ~ 8000 kaydedilmesini olan bir repo dalı, sadece kadar geriye Feb 2. olarak gider
Dan Dascalescu

1
@DanDascalescu Garip, -gbayrakla en az 5 ay geriye giden taahhütleri bulabildim .
Chrispy

134

Güncelleme (2017/01/05):

GitHub, artık kullanıcı arayüzlerinden taahhüt mesajları içinde arama yapmanızı sağlayan bir güncelleme yayınladı. Daha fazla bilgi için blog yayınına bakın .


Aynı soruyu sordum ve dün GitHub'la biriyle iletişime geçtim:

Arama motorlarını Elasticsearch'e değiştirdikleri için GitHub kullanıcı arayüzünü kullanarak taahhüt mesajları aramak mümkün değildir. Ancak bu özellik takımın istek listesinde.

Maalesef şu anda bu işlev için çıkış tarihi yok.


7
+1 GitHub'da bana zamandan tasarruf ettiniz, tahmin ettiğim şeye nasıl ulaşacağımı merak ediyorum. Bu yüzden artık komut satırından grep'e ulaşmak için repoyu yerel olarak klonlamamız gerekiyor. Tanrım, bu ilerleme ha ?! ;)
McNab

68
Web kullanıcı arayüzündeki gelişmiş aramaları bile en önemli alanda (asıl tamamlama mesajı) aramaya izin vermez. Bu kesinlikle saçma IMO. Github birlikte hareket et!
Brad Thomas

22
Evet. Açık kaynaklı yazılımları kökten değiştirmeye ve yaygınlaştırmaya yardımcı olan bir web hizmeti oluşturduklarını unutun, bu özelliğe sahip olmamaları onu tam bir sahte kılar!
Jon Cairns

12
Söyleminizin içeriğini GitHub ile kolayca halka açık bir yerde yayınlamaya zaman ayırdığınız için teşekkür ederiz. Halkın bu tür bilgileri almanın tek yolu saçmadır - GitHub'ın bir kamu meselesi izleyicisine sahip olmaması çok aptalca - ama böyle bir aptallığın varlığında, burada yaptığınız şey yüzlerce kişiyi önlemenin yararlı bir yoludur diğerleri aynı isteği göndererek zaman kaybetmekten. Tasarruf ettiğiniz yüzlerce adamlık üretkenlik için teşekkür ederiz.
Mark Amery

1
1000'in upvotes ile 7 yaşındaki açık sorunlarla dolu Atlasian'ın kamu izleyicisinden çok daha iyi değil ...
Askdesigners

58

Kısa cevap, taahhüt mesajlarını doğrudan github.com web sitesinde arayamazsınız. Şu an git grepiçin bu çözümde başkalarının önerdiği yerel çözümü öneriyoruz .

Bir zamanlar GitHub, git greptek bir havuz için taahhüt mesajları üzerinde bir stil araması sundu. Ne yazık ki, bu yaklaşım bir dosya sunucusunu erişilemez hale getirebilecek bir hizmet reddini ortaya çıkarmıştır. Bu nedenle git greparamayı kaldırdık .

Mevcut zarf arkası tahminleri GitHub'daki taahhütlerin sayısını 80 milyar civarında bir yere koyuyor. Google mühendisleri arkamızdan gülmesine rağmen, bu Elastik Arama'da saklanacak oldukça fazla sayıda belgedir. Bu veri kümesini aranabilir yapmak isteriz, ancak bu önemsiz bir proje değildir.


2
+1. Cevabımı yazdığımı düşündüğüm doğrulanıyor gibi görünüyor : taahhüt mesajı endekslenmiyor: indeksleme ile çalışıyorsunuz git diff's(taahhütlerin meta verileri değil, taahhütlerin içeriği anlamına geliyor)
VonC

"Taahhüt için atla" düğmesine ne dersiniz? Şu anda URL'den erişilebilir - stackoverflow.com/a/12214817/817632 ancak bunun için bir arayüz yok (bildiğim değil). Büyük / küçük harf kullanın - sürüm yerine bower.json'da bir yerde bir karma karması bulun ve bu taahhüdün tam olarak ne yaptığını görmek istiyorum. Google'a zaman kazandırır.
Olga

44

Bu GitHub'dan kaldırıldı. Kullanırım:

$git log --all --oneline | grep "search query"

resim açıklamasını buraya girin

Yazara göre de filtreleyebilirsiniz:

$git log --all --oneline --author=rickhanlonii | grep "search query"

3
Bu benim için çalıştı, ancak en çok onaylanan cevap işe yaramadı.
makdad

21

Kod arama hakkındaki yardım sayfasında , bunun henüz mümkün olmadığı anlaşılıyor.

Deponuzda, içinde arama yapılacak dosyaları veya yolları seçme yeteneği de dahil olmak üzere metin arayabilirsiniz, ancak taahhütte aramak istediğinizi belirtemezsiniz.

Belki bunu onlara önerin ?


18
Bir repoda arama yapmak söz konusu olduğunda bu daha "varsayılan" kullanım durumu gibi görünüyor. Özellikle biri tonlarca taahhüt ile yeni bir depo tanımak için. Bunu kesinlikle eklemeyi düşünmelidirler.
Jose Browne

19

Bunu Google tarafından taranan depolarla yapabilirsiniz (sonuçlar depodan depoya değişir).

Tüm taranmış depoların tüm dallarında "lisansı değiştir" için arama yap

"lisansı değiştir" sitesi: https://github.com/*/*/commits

"Lisansı değiştir" için taranan tüm depoların ana dalını ara:

"lisansı değiştir" sitesi: https://github.com/*/*/commits/master

"Lisans değiştir" için tüm taranmış twitter depolarının ana dalını ara

"lisansı değiştir" sitesi: https://github.com/twitter/*/commits/master

Twitter / some_project deposunun tüm dallarında "lisansı değiştir" için arama yap

"lisansı değiştir" sitesi: https://github.com/twitter/some_project/commits


4
@DZenBot halka açık bir repo değilse, muhtemelen git grep'e yerel bir kopyanız var, sadece bazı değişikliklerin ne zaman yapıldığını anlamak için bütün bir Genel repoyu klonlamak istemeyenler için bu cevabı koyuyorum. Ben kaydedilmesini bulmak için çoğunlukla kullanmak olduğunu eski GTK sürümleri veya için kaldırma desteği lisansları GPL3 için değiştirdiğinizde
technosaurus

15

Ocak 2017 güncellemesi (iki yıl sonra):

Artık tamamlama mesajlarını arayabilirsiniz ! (hala sadece ana dalda)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


Şubat 2015: Elasticsearch'teki mevcut arama altyapısı tabanı ( Ocak 2013'te tanıtıldı ) dikkate alındığında bunun mümkün olabileceğinden emin değilim .

"Güvenilir ve / veya resmi kaynaklardan çizim" cevabı olarak, GitHub'da Elasticsearch'ü tanıtmaktan sorumlu GitHub çalışanları ile yapılan bir röportaj (Ağustos 2013)

Tim Pease : Burada iki belge türümüz var: Biri bir kaynak kodu dosyası diğeri bir havuz. Git'in çalışma şekli taahhütleriniz ve her taahhüt için bir şubeniz olması. Havuz belgeleri, dizine eklenmiş belirli bir havuz için en son taahhüdü izler. Bir kullanıcı Github'a yeni bir taahhütte bulunduğunda, o depo belgesini elastik aramadan çıkarırız. Daha sonra en son dizine eklenen taahhüdü görürüz ve daha sonra bu son push ile önceden dizine eklediğimiz dosya arasında değiştirilen, eklenen veya silinen tüm dosyaların bir listesini alırız. Ardından, değiştirilen belgeleri güncelleyebiliriz. Birisi her itişinde kaynak kod ağacının tamamını yeniden indekslememiz gerekmez.

Andrew Cholakian: Yani, siz sadece endeksiniz, sanırım, ana dal.

Tim Pease: Doğru. Oraya gireceğiniz sadece ana dalın başı ve yine de çok fazla veri, iki milyar belge, 30 terabayt.

Andrew Cholakian: Bu çok büyük.

[...]

Tim Pease: Push kaynak kodu indeksleme ile, kendi kendini iyileştirme süreci.
En son endekslenmiş taahhüdü takip eden veri havuzu belgesine sahibiz. Eğer kaçırırsak, bu işlerin başarısız olduğu üç taahhüdü kaçırırsak, bir sonraki taahhüt gelir, hala endekslediğimiz önceki taahhüt ile bu yeni itme ile gördüğümüz taahhüt arasındaki farkı inceliyoruz.
Bunu yaparsınız git diffve güncellenen, silinen veya eklenen tüm dosyaları alırsınız. “Tamam, bu dosyaları kaldırmamız gerekiyor. Bu dosyaları ve hepsini eklememiz gerekiyor. ” Bu kendi kendini onaran ve hemen hemen tüm mimaride benimsediğimiz yaklaşım bu.

Bütün araçlar değil bu bütün dalları bütün repo o yaklaşımla endeksli olacaktır.
Şu an için bir global taahhüt mesajı araması yok.
Ve Tim Pease kendisi taahhüt mesajlarının endekslenmediğini onaylar .

Yerel bir klonu kişinin kendi elasticsearch yerel indeksleme almak mümkün olmadığı Not: "bakınız ElasticSearch ile git depo aranıyor "

Ancak belirli bir repo için en kolayı klonlamak ve aşağıdakileri yapmaktır:

git log --all --grep='my search'

(" Git mesajında ​​bir Git deposunu nasıl arayabilirim? " Bölümündeki diğer seçenekler )


7

Bu GitHub'dan kaldırıldığından, bunu gitkyapmak için Linux'ta kullanıyorum .

Terminalden deponuza gidin ve yazın gitk.

GUI'nin ortasında bir arama kutusu var. İyi bir filtre seçimi sağlar:

Arama çubuğu

Kapsam - yolları içeren, dokunan yollar, dize ekleme / kaldırma, satır eşleşmesini değiştirme

Eşleme türü - Tam / IgnCase / Normal İfade

Arama alanları - Tüm alanlar / Başlık / Yorumlar / Committer



4

Deponun yerel bir sürümüne sahipseniz, arama teriminizle eşleşen tüm taahhütler için varsayılan tarayıcınızdaki yeni sekmelerde GitHub sayfalarını açmak için yazdığım bu ham kabuk komut dosyasını denemek isteyebilirsiniz:

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); do
    python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done

Sadece https://github.com/RepoOwnerUserName/RepoName/deponuzun gerçek GitHub URL'si ile değiştirin , komut dosyasını bir yere kaydedin (örneğin githubsearch.sh, yürütülebilir yapın ( chmod +x githubsearch.sh) ve ardından ~/.bashrcdosyanıza aşağıdaki diğer adı ekleyin) :

alias githubsearch='/path/to/githubsearch.sh'

Daha sonra Git deponuzun herhangi bir yerinden terminalde bunu yapın:

githubsearch "what you want to search for"

ve (büyük / küçük harfe duyarlı olmayan) arama teriminizle eşleşen tüm taahhütlerde, ilgili GitHub sayfaları tarayıcınızda açılır. (Arama teriminiz yüzlerce taahhütte görünüyorsa, bu tarayıcınızın çökmesine ve bilgisayarınızın CPU'sunu bir süre yiyebileceğine dikkat edin.)


0

2019'un ortasından itibaren, sol üstteki arama kutusuna aramak istediğiniz şeyi yazıp "İşlemler" i tıklamanız yeterlidir.

resim açıklamasını buraya girin

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.