Aynı commit tarihçesine sahip iki repository arasında (örneğin orijinal ve fork repository’ler) commit taşımak oldukça kolay. Öncelikle kaynak repository’deki commit’lerinizin yamalarını (patch) oluşturmanız gerekiyor.

git format-patch -1 <sha>-1
Patch'in kaç commiti içereceğini belirtiyoruz.
<sha>
Patch'e dahil edilecek commit'in SHA hash'i.

Bu komut bize bir .patch dosyası oluşturacak. Ardından hedef repository’e geçiş yapıyoruz. Burada önce patch’imizi verify ederek, yamalama işleminin başarılı olup olmayacağını kontrol edebiliriz.

git apply --check dosya.patch

Son olarak yamamızı hedef repository’e uyguluyoruz:

git am < dosya.patch


Bedelli askerliğimi 11. dönemde Maltepe 23. Komando Tugayı Nurettin Baransel Kışlası’nda yaptım. Gelecek dönemlerde burada askerlik yapacak arkadaşların kafalarında soru işaretleri olabilir. Faydası olması dileğiyle gözlemlerimi paylaşmak istedim.

Öncelik yüzbaşından eğitim çavuşlarına bütün komutanlar çok iyi. “Nasıl olsa bedelliyim” rehavetine kapılmayıp, yaptığınız görevi ciddiye alırsanız bütün komutanlarınız sizi çok sever. Zaten çok sabırlılar, sizin yeni ve alışık olmadığınız bir ortamda olduğunuzun farkındalar. Bu sebeple de çoğu zaman küçük hatalarınızı görmezden gelir doğrusunu gösterirler. Komutanlar çok sabırlıydı buna rağmen sınırlarda dolaşan arkadaşlar oldu (komutanla eli cebinde konuşan, lakayıt konuşan gibi) , bu arkadaşları uyarmanızı tavsiye ederim. …


Herkese merhaba,

Bugün sizlerle birlikte git’in yerleşik (inbuilt) web arayüzü olan GitWeb’i inceleyeceğiz. GitWeb’i kullanabilmeniz için bilgisayarınızda bir HTTP sunucusunun olması gerekiyor. Ancak NGINX veya Apache kurmanıza gerek yok, lightweight HTTP sunucuları ihtiyacınızı karşılayacaktır. Eğer bilgisayarınızda Ruby varsa (OS X kullanıyorsanız Ruby kurulu bir şekilde geliyor) webrick kullanabilir ya da Linux makinalarda kurulu olan lighttpd sunucusunu kullanabilirsiniz.

Kullanacağınız HTTP sunucusuna karar verdikten sonra git instaweb komutuyla sunucunuzu kolaylıkla başlatabilirsiniz.

// Lighttpd
$ git instaweb --httpd=lighttpd
// Webrick
$ git instaweb --httpd=webrick

Gelin birlikte ReactJS kütüphanesini inceleyelim.

GitWeb Dashboard

GitWeb ana ekranında repository’nin commit’lerini, etiketlerini, branch’lerini ve uzak repoları görüntüleyebilirsiniz. Detaylarını görüntülemek istediğiniz commit mesajına tıklayabilirsiniz.


Bir süredir üzerinde çalıştığım ilk kitabım Git İle Versiyon Kontrol ve Takım Çalışması Abaküs Yayınları’ndan çıktı. Kitapevlerinde ve Kitapyurdu’nda bulabilirsiniz.

İÇİNDEKİLER
Git ile İlk Adımlar
Dallanmalar (Branching)
Çakışmalar (Conflicts)
Rebasing Nedir ve
Merge’den Farkı Nedir?
Dosyaları Eski Hallerine Döndürme (reset)
Commit’ler Arası Gezinme
Git Stash
Dosyaları Yok Sayma (gitignore)
Dosyaları Silmek
Commit’leri Başka Branch’e Kopyalamak — git-cherry
Git Takma Adları (Alias)
Git ile Hata Kontrolü (Debugging)
Semantik Versiyonlama ve Versiyon Etiketleme
Uzak Git Deposu Nedir?
GitHub
Bitbucket
Git İstemcileri
Tower
SourceTree
Git Dallanmalarına Farklı Bir Bakış Açısı
git-flow
Anlamlı Commit Mesajları ve
Branch İsimleri Nasıl Yazılır?


Git ile branch’lerinizi karşılaştırmak oldukça kolaydır. Diyelim ki master branch’i ile develop branch’ini karşılaştırmak istiyorsunuz,

git diff master..develop

Bu komut iki branch’in tüm dosyaları arasındaki farkı size gösterecektir. — name-status, — name-only gibi parametreler ekleyerek sadece dosya adlarını da listeleyebilirsiniz.

git diff --name-status master..develop

Normalde aşağıdaki gibi bir komut ile MySQL veritabanlarınızın yedeğini alabilirsiniz.

mysqldump --all-databases > backup.sql -u root -p

Ancak bu komutu cronjob vs benzeri zamanlanmış görev ve otomasyon sistemleriyle kullanamazsınız çünkü mysqldump komutu size MySQL veritabanı şifresini soracak ve siz şifreyi girene kadar devam etmeyecektir. Bu noktada sorununuzu çözmek için MySQL şifrenizi de komuta dahil etmek isteyebilirsiniz, -u root -pSIFRE gibi ancak geniş yetkilere sahip MySQL kullanıcısı şifrelerini bu şekilde açık olarak cronjob’a kaydetmek risklidir.

Bu riskleri minimuma indirmek için sadece yedek alma işiyle sorumlu ve sadece gerekli yetkilere sahip bir kullanıcı oluşturabilirsiniz.

GRANT LOCK TABLES, SELECT ON *.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';
FLUSH PRIVILEGES;

Artık cronjob kaydınızı ekleyebilirsiniz.

mysqldump --all-databases > backup.sql -u BACKUPUSER -pPASSWORD

Diyelim ki şöyle bir MySQL SELECT sorgunuz var:

SELECT … WHERE alan=”deger”

ve bu sorgu boş döndüğü zaman “veri yok” yazmak istiyorsunuz. Bu durumda SELECT IFNULL() kullanabilirsiniz.

SELECT IFNULL((SELECT … WHERE alan=”deger”) ,“veri yok”);

kaynak


Git repoma bir submodule eklemeye çalışırken şu hatayı alıyordum:

A git directory for 'admin' is found locally with remote(s)

Çünkü daha önce admin adında farklı bir submodule’üm vardı. Bu da git’in tarihçe ağacında çakışmaya yol açıyordu. Bu sebeple bu eksi submodule’ü tamamen tarihe kazımam gerekti ve StackOverflow sitesindeki bu cevap tam olarak aradığım çözümdü.


Diyelim ki bir klasöre varsayılan bir yazma/okuma izni vermek ve daha sonra bu klasörün içine oluşturulacak tüm klasör ve dosyalara otomatik olarak belli bir izin atamak istiyorsunuz bu durumda aşağıdaki çözüm işinize yarayacaktır.

# Not : ACL desteği olması gerekiyor.

chmod g+s <directory>  //set gid 
setfacl -d -m g::rwx /<directory> //set group to rwx default
setfacl -d -m o::rx /<directory> //set other

kaynak


Arkadaşlarıma anlatırken istisnasız her seferinde eğlendiğim ve aynı zamanda korkudan titrediğim bir hikayeyi yazmak istedim. Belki bir farkındalık oluşur, belki havacılık sektöründen birilerinin dikkatini çeker ve birşeyler değişir diye.

1–2 sene önce Letonya’ya gitmek üzere Atatürk Havalimanı’na gittim. Havalimanından içeriye girdim. Elimde bir şişe su vardı. Uluslararası bir uçuş olduğundan pimpirikli davranıp uçuştan 2–3 saat kadar erken havalimanına varmıştım. Check-in yaptım ancak pasaport kontrolünden geçip izole ve sağlam korunaklı olması gereken alana henüz geçmemiştim. Çünkü yarım saat sonra bir ilaç içmem gerekiyordu, o alana elimde suyla almıyordular ve ben içeride bir şişe suya 5 TL vermek istemiyordum. Ama daha sonra…

Eray Alakese

git lover, amateur blog / book author, computer engineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store