Monthly Archives: Nisan 2014

Genel

Yararlı Git Numaraları #3

Zaman zaman gün içinde ihtiyaç duydukça kullandığım bazı ufak tefek git/shell tricklerini paylaşmaya devam ediyorum:

Belirli Bir İsim Desenine Sahip Git Dallarının Geliştirme Ortamından veya Uzak Uçtan Silinmesi:

İsimleri “mybranch-12-r001” – “mybranch-12-r095” arasında değişen git dallarını;

ggeliştirme ortamından toplu halde silmek için:

$ git branch | grep "mybranch-12-r" | xargs -I {} git branch -D {}

git branch: Geliştirme ortamında yeralan dal listesini döner.

grep “mybranch-12-r”: Bir önceki komutdan elde edilen dal listesindeki mybranch-12-r desenine uygun dal isimlerini filtreler.

xargs -I {} git branch -D {} : Bir önceki komut ile elde edilen filtrelenmiş dal listesindeki her satır için “git branch -D” komutunu çalıştırarak satırda adı geçen dalı geliştirme ortamından siler.

uzak uçtan toplu halde silmek için:

$ git branch -r|grep "origin/mybrnach-12-r"|awk -F/ '{print $2}'|xargs -I {} git push origin :{}

Yukarıdaki komut dizisinde komut borusu ile ayrılan ifadeleri inceleyelim:

git branch -r : Uzak uçda takip edilen dal listesini döner.

grep “origin/mybrnach-12-r”: Bir önceki komutdan elde edilen dal listesindeki mybranch-12-r desenine uygun dal isimlerini filtreler.

awk -F/ ‘{print $2}’ : Bir önceki komutdan dönen filtrelenmiş dal listesindeki her satırı “/” ifadesiyle bölerek dal ismini içeren ikinci bölümü döner.

xargs -I {} git push origin :{} : Bir önceki komut ile elde edilen filtrelenmiş dal listesindeki her satır için “git push origin :” komutunu çalıştırarak satırda adı geçen dalı uzak uçdan siler.

Master Dal ile Birleşmiş Olan Dalların Geliştirme Ortamından Silinmesi

Master dalla birleştirmiş olduğunuz dalları, geliştirme ortamında ayrıca saklamanıza gerek yoktur. Bu dalları geliştirme ortamınızdan silmek için aşağıdaki komutu kullanabilirsiniz.

$ git checkout master && git branch --merged | grep -v "\*" | xargs -n 1 git branch -d

Yukarıdaki komut dizisinde komut borusu ile ayrılan ifadeleri inceleyelim:
git checkout master && git branch –merged : master dalına checkout işlemini gerçekleştirir ve master ile birleştirilen dal listesini döner.

grep -v “\*” : Bir önceki komutda dönen dal listesinde * ile ifade edilen git reposunun içinde bulunduğu geçerli dalı listenin dışında bırakır.

xargs -n 1 git branch -d : Bir önceki komutdan dönen listedeki her bir dal ismi için “git branch -d” komutunu çalıştırarak listedeki dalları geliştirme ortamından siler.

Git Reposunda Belirli Bir Dal Veya Referansdaki Kodun Sürümden Çıkartılması (Kopyalanması)

Geçmişte svn kullanıcılarının hatırlayacağı “svn export” komutunun yaptığı işlemi gerçekleştiren bu komut, genellikle deployment için repodaki kodun belirli bir daldaki durumunun kopyasının sürüm kontrolü dışında biryerde oluşturulması için kullanılır.

$ git archive --remote=git@bitbucket.org:dagnet_d/zf2.git --format=tar --prefix=zf2/ master |tar -xvf -

Bu işlem, git@bitbucket.org:dagnet_d/zf2.git reposunda, master daldaki Zend Framework 2 kodunu tar formatında geçerli ortama aktarır. Aktarılan kod tabanına ait dosya ve klasörler, zf2 isimli klasörün altında olacak şekilde oluşturulur. Komut borusundan sonraki kısımdayse sıkıştırılmış veri geçerli ortam diskine açılarak kod tabanının sürüm kontrolü dışında master dalın HEAD referansındaki kopyası oluşturulur.

Versiyon kontrolü işlerini Github üzerinde gerçekleştiriyorsanız git archive işlemi, doğrudan uzak repodan gerçekleştirilememektedir. Github kullanıcıları bu işlemi şu şekilde gerçekleştirebilirler:

$ git clone git@github.com:ibrahimgunduz34/paranoia.git paranoia
$ cd paranoia
$ git archive --format=tar --prefix=paranoia_current/ master |tar -xv -C ../
$ cd .. 
$ rm -rf paranoia