Git Öğreniyorum - 3
Git grep
Git’in önemli komutu grep hakkında bir kaç bilgi vereceğim.
Ben grep’i git’in arama komutu olarak biliyordum, ancak unix sistemlerde filtreleme komutu imiş. Geniş kullanım alanı varmış yani.
Genel söz dizimi
{% highlight bash %} $ git grep [özellikler] arama_kelimesi [dosyalar] {% endhighlight %}
Örneğin
{% highlight bash %} $ git grep 'kapsayamama' /home/fatih/ana.css {% endhighlight %}
Yukarıdaki örnek basit bir kullanıma örnek olarak veridi. /home/fatih/ana.css klasörü içinde kapsayamama kelimesini arayacaktır.
Grep’in bazı özellikleri vardır. Bu kısayolları kullanarak aramalarımıza bazı özellikler ekleriz.
{% highlight bash %} $ git grep -v 'kapsayamama' /home/fatih/ana.css {% endhighlight %}
İçinde kapsayamama geçmeyen satırları bize verecektir. -v (invert-match)
{% highlight bash %} $ git grep -c 'kapsayamama' /home/fatih/ana.css {% endhighlight %}
Aradığımız dosya içinde kapsayamama kelimesinin kaç kere geçtiğini bize gösterir. -c (count)
{% highlight bash %} $ git grep -i 'kapsayamama' /home/fatih/ana.css {% endhighlight %}
Aramanın büyük-küçük harfe duyarsızlaştırır. Yani arama sonuçlarında Kapsayamama çıkar. -i (ignore-case)
{% highlight bash %} $ git grep -r 'kapsayamama' /home/fatih/ {% endhighlight %}
Aramanın belirlene dizin ve alt dizinlerde yapılmasını belirler. -r (recursive)
{% highlight bash %} $ git grep -n 'kapsayamama' /home/fatih/ {% endhighlight %}
grep ile listelenen sonuçların hangi satırda olduğunu gösterir. -n (line-number)
{% highlight bash %} $ git grep '<script' /home/fatih/ {% endhighlight %}
‘’(ters bölü işareti) karakteri kendisinden sonra gelen karakterin özel bir karakter olduğunu gösterir ve aramaya dahil edilmesini sağlar.
{% highlight bash %} $ git grep 'kapsayamama' /home/fatih/ {% endhighlight %}
Birden fazla arama bloğunu bir arada kullanmak için | boru(pipe) işaretini kullanırız.
{% highlight bash %} $ git grep '^script' /home/fatih/ {% endhighlight %}
grep aramalarımızda Düzenli İfadeleri(regex) kullanabiliriz. Yukarıdaki örnekte script ile başlayan sonuçları getir demektir.
{% highlight bash %} $ git grep 'script$' /home/fatih/ {% endhighlight %}
Yukarıdaki script ile biten satırları listeler. Düzenli ifadeler ile yapabileceklerimizi düşündüğümüzde aramalarımızı ne kadar özelleştirebileceğimizi anlarız.
{% highlight bash %} $ git grep /home/fatih | more {% endhighlight %}</p> <p>grep ile arama yaptığımızda pencere genişliği kadar çıktıları bize gösterir. Tüm satırın gösterilmesi için | more kullanırız.</p> <p>##Git kodlarını renklendirmek için</p> <p>git komutları ve işlemlerini renklendirmek mümkündür. Daha okunaklı ekranlar için Git’in status, branch ve diff komutlarını renklendirelim. Renklendirme için konfigürasyon dosyasına ~/.gitconfig aşağıdaki kodları eklemeniz yeterli.</p> <p>{% highlight bash %} [color] branch = auto diff = auto status = auto</p> <p>[color "branch"] current = yellow reverse local = yellow remote = green</p> <p>[color "diff"] meta = yellow bold frag = magenta bold old = red bold new = green bold</p> <p>[color "status"] added = yellow changed = green untracked = cyan {% endhighlight %}</p> <h2>Git dallanmalarını düzenleme</h2> <p>Git'te master'a gitmiş bütün eski dallanmalarımızı(branch) -lokalden- silmek için şöyle bir komut kullanabiliriz:</p> <p>{% highlight bash %} git branch --merged master | grep -v 'master$' | xargs git branch -d {% endhighlight %}</p> <p>Kaynak: <a href="http://devblog.springest.com/a-script-to-remove-old-git-branches">http://devblog.springest.com/a-script-to-remove-old-git-branches</a></p> <p><a href="https://twitter.com/muratcorlu">Murat Çorlu</a></p> <h2>Git te dosya adı arama</h2> <p>git'te dosya adıyla arama:</p> <p>{% highlight bash %} git ls-files '<em>kelime</em>' {% endhighlight %}</p> <p><img src="/content/images/ssbly7qzvohj_9wv9oc4hog9-orvpgywf7sthq4nsiggxyve-yk6lldhojbwcllzeulmd27xsrwi1tty3o-hewjrsetgxdj7ganwuc7eifiemt1pyews.gif" alt="ls-files"></p> <h2>Git ile Suçluyu Bulmak</h2> <p>{% highlight bash %} git blame {% endhighlight %}</p> <p>Bir örnek yapalım:</p> <p>{% highlight bash %} git blame source/css-ile-tablolari-sekillendirmek.md {% endhighlight %}</p> <p>kodu aşağıdaki sonucu döndürüyor. Her satırı tek tek en son kimin, ne zaman değiştirdiğini gösteriyor.</p> <p><img src="/content/images/zfpqtlkq_yrizyj6xbhvkckxjvau3yzbd38ed_-qm5lrzewoctmickb1ief_amikcdxtkvzwy8ntkzbwiookd7-5e8inmvifocfxw3aey8tbcrqnuoq0.gif" alt="blame"></p> <h2>Git ile Sadece Belirlenen Dosyaları Gönderme</h2> <p>{% highlight bash %} git add {% endhighlight %}</p> <p>ile eklenecek dosya veya dosyalar eklenir ve sonra</p> <p>{% highlight bash %} git commit -m "aciklama_yaz" {% endhighlight %}</p> <p>ile gönderim yapılır. Bir örnek yapalım. Örneği 3 dosyada değişiklik yaptık.</p> <p><img src="/content/images/k05wdtez-iehvkxeinyuuc3xhtbgfcdnqkhfc082aa4diwkdx0mgrxmpbwiay4fzgkcsc2d12r6wr3mgx1rbulo1gdogrprmqsbjb-ck9nrfvvggnx_f.gif" alt="commit"></p> <p>Ancak biz bu değişikliklerden sadece bir tanesini(source/xhtml-ipuclari-1.md) göndermek istiyoruz</p> <p><img src="/content/images/7enktsdww4-n9ui9ojx_hsstxdu9qz0q-vshokfsoxurh7xxydzn-7nzjwlu3kyax1kufrbzhmtmtbf9b4o92kzym3gx6i07yxvfkpedstylp1mcimyt.gif" alt="commit add"></p> <p>Dosyayı gönderirken</p> <p>{% highlight bash %} git commit -m "xhtml makalesindeki duzeltme yapildi" {% endhighlight %}</p> <p>kullanımı önemli.</p> <p><img src="/content/images/no5ftsiv8cil11qd7xb2ssioo7om7n2-1nnydeua8n5j8cinsexy9--zohfwmuuj7rkkteehcfswq-uzvt4onckc63yljsarfhfee5-cctjuicccp2i7.gif" alt="commit push"></p> <p>Sonuçta sadece source/xhtml-ipuclari-1.md dosyası gönderilirken diğer iki dosya gönderilmedi.<br /></p> <h2>Otomatik Tamamlama</h2> <p>Git ile terminalde kod yazarken en güzel özelliklerden birisi <tab> tuşu ile otomatik tamamlama yapabilme özelliği. Benim bilgisayarımda hazır geliyor eğer sizde yüklü değilse kaynak bağlantıda yükleme ayrıntıları mevcut.</p> <p>{% highlight bash %} $ git co<tab><tab> commit config {% endhighlight %}</p> <p>Yukarıda görüldüğü gibi git co yazdık ve yazacağımız komutu unuttuk veya tamamını yazmak istemedik, ilk <tab> tuşuna bastığımızda eğer başka eşleşen kelime yoksa bize direk sonucu getirir, <tab> tuşuna iki kere basınca bu sefer eşleşen tüm kelimeler altta listelenir. Sonraki <tab> tuşuna basışlarımızda ise altta listelenen kelimeler arasında gezeceğiz.</p> <p>Yukarıdaki örnekte eğer com<tab> yapsa idik commit tamamlamasını otomatik yapacaktı.</p> <p><a href="http://git-scm.com/book/en/Git-Basics-Tips-and-Tricks">http://git-scm.com/book/en/Git-Basics-Tips-and-Tricks</a></p> <h2>Kaynaklar</h2> <ul> <li>http://bariseser.net/grep-komutu-ve-kullanimi-kendime-not/</li> <li>http://www.hostingsiteniz.com/grep-komutu-kullanimi-t24.0.html</li> <li><a href="http://forum.ubuntu-tr.net/index.php?topic=17445.0">http://forum.ubuntu-tr.net/index.php?topic=17445.0</a></li> <li>http://oneromer.com/?p=76</li> <li><a href="http://jblevins.org/log/git-colors">http://jblevins.org/log/git-colors</a></li> <li>http://www.thinkfirstblinksecond.com/2012/04/05/git-auto-completion/</li> </ul>