Merhaba, bu dersimizde git’in geliştirme yaparken kullanılan özelliklerinden biri olan git stash’i göreceğiz. Git stash, değişiklikleri commit’lemeden yerel depoya kaydetmeyi sağlayan bir araçtır.
Kendinize bir iş seçtiniz, bir branch oluşturdunuz ve o işe odaklandınız. O arada takımdan bir arkadaşınız geldi ve sizden başka branch’teki bir koda bakmanızı istedi. Ya da acil gitmesi gereken bir işi bitirip sizin de o kodu gözden geçirmenizi ve onay vermenizi istedi. Diğer bir senaryo siz odaklanmış branch’te çalışırken çok kritik bir hata aldınız ve hemen master’a dönüp o hatayı düzeltmeniz gerekiyor.
Bu durumda hemen o branch’te artık ne yaptıysanız onu commit’leyip gitmeniz gereken branch’e geçebilirsiniz. Fakat git’in bize sunuduğu stash’i de kullanabiliriz.
Chapter 9
Bildiğiniz gibi ‘half-life-2’ projemizde sıradaki bölümümüz 9’un hikayesini yazmaya başlayalım.
chapter-9 adlı bir branch oluşturup aşağıdaki satırları ekleyelim ve commit’leyelim.
1
2
3
4
Chapter 9
=============
Gordon gains access to Nova Prospekt, a Combine base, and a former prison, breaching its defenses with the help of an army of Antlions, with the goal of finding and rescuing the captured Resistance leader, Eli Vance. This is also the last chapter where Antlions are encountered, because the player soon leaves Antlion Territory. The player is introduced to Combine Turrets here as well.
Siz ekip arkadaşlarınıza ve patronunuza ‘chapter 9’ u eklediğinizi ve branch adını belirttiniz. Bir sonraki işiniz 10. bölümü yazmaya başladınız. Ama henüz bitirmediniz yani commit’e henüz hazır değil.
1
2
3
4
Chapter 10
=============
Upon arriving in Kleiner's Lab after teleporting away from the Depot, Gordon Freeman and Alyx Vance discover they have been stuck in a teleport "loop" for approximately one week. They find that the teleport caused the destruction of Nova Prospekt, and the blow they struck there was taken as a sign to begin The Uprising. The two factions have been locked in combat for a week and all of City 17 is a warzone. Freeman goes on to aid in the battle, while Alyx remains in Kleiner's Lab to help him escape the city.
Tam da o anda patronunuz veya ekip arkadaşınız geldi ve ‘9. bölüm ile ilgili sorular var. Ekip şu an üzerinde çalışıyor, ona dönüp tekrar bakar mısın? Durum biraz acil.’ dedi.
Burada
chapter-9 branch’ine dönemeyiz.
story.txt dosyasını değiştirdik. Yapabileceğimiz birden fazla seçenek var. Örneğin son yaptığımız işi commit’leyip mesajına birşeyler yazıp daha sonra 9. bölüm ile işimiz bittiğinde geri dönüp bu commit’i geri alıp üzerinde devam edebiliriz. (İlerleyen derslerimizde bunu göreceğiz.) Diğer bir yöntem git stash kullanabiliriz.
Git Stash
En hızlı çözüm olarak
git stash komutunu parametresiz olarak kullanabiliriz.
Yaptığımız değişiklikler bir anda gitti. Git stash yaptığımız değişiklikleri farklı bir şekilde kaydederek projedeki değişiklikleri de geri aldı. Bu sayede
chapter-9‘a geri dönebildik. Şimdi bu branch’te istenilen değişiklikleri de yapıp
chapter-10‘a yani uğraştığımız asıl işe geri dönelim. Aşağıdaki paragrafı
chapter-9 da
story.txt dosyasına ekliyoruz.
1
Gordon meets up with Alyx Vance in the Nova Prospekt train depot. They discover that Dr. Mossman was actually a Combine spy working on Breen's side. Together, they search the prison for Eli Vance and Judith Mossman, all the while fighting off security forces. They split up several times, but finally they reunite to track down Mossman. She teleports herself and Eli out of the facility, getting to the Citadel, forcing Alyx and Gordon to take the risk in using the same teleporter to get back to Kleiner's lab.
Not:
git stash komutunu
git stash push olarak da kullanabilirsiniz.
Git Stash Pop
‘chapter-9’ ile işimiz bittiğine göre ‘chapter-10’ daki işimize devam edelim.
chapter-10branch’ine geçtiğimizde ve
git stash pop komutunu kullanalım.
Gördüğünüz gibi yaptığımız değişiklikler geri geldi ve artık üzerinde çalışabiliriz.
Git Stash Çalışma Prensibi
Anlayacağınız gibi
git stash aslında stack yapısına sahiptir. Kaydederken
git stash push ve geri alırken
git stash pop komutunu kullandık. Push işleminde yaptığımız değişikliği en üstte koyarken, pop işleminde en üstteki değişikliği alıp uygular ve stash deki ilgili kayıt silinir. Yani pop işleminden sonra aynı işlemi tekrar yapamazsınız.
Mesaj Girmek
git stash push yaparken mesaj da verebilirsiniz. Bu sayede geri döndüğünüzde kendinize bir not eklemiş olursunuz. Şimdi dosyayı biraz daha düzenleyip tekrar stash’e kaydedelim. Yapacağımız değişiklikten sonra 10. bölüm aşağıdaki şekilde olacaktır.
1
2
3
4
Chapter 10
=============
Upon arriving in Kleiner's Lab after teleporting away from the Depot, Gordon Freeman and Alyx Vance discover they have been stuck in a teleport "loop" for approximately one week. They find that the teleport caused the destruction of Nova Prospekt, and the blow they struck there was taken as a sign to begin The Uprising. The two factions have been locked in combat for a week and all of City 17 is a warzone. Freeman goes on to aid in the battle, while Alyx remains in Kleiner's Lab to help him escape the city. The player is able to form small squads of citizens to help fight their way through the city towards Barney's location. Near the end of the chapter, Alyx finds that the bridge to Barney's location is destroyed. She climbs up a building and tries to return to help Gordon but is captured by Combine soldiers and taken to the Citadel.
Değişiklikleri görme
Burda bir komut daha görüyoruz.
git stash list bize stash’e kaydedilmiş değişiklikleri listeliyor. Şimdi
git stash show <stash-id> komutu ile ne kaydedildiğini görelim.
git stash apply
Aynı şekilde
git stash pop yerine
git stash apply <stash-id> komutunu da kullanabilirsiniz. Aradaki tek fark
pop stash’deki değişikliği silerken
apply sadece değişikliği uygular ama stash’deki kayıt kalmaya devam eder.
git stash branch
Stash, branch’ten bağımsız bir şekilde çalışır. Örneğin
chapter-10 branch’ini yanlışlıkla silseniz dahi farklı bir branch’e uygulayabilir ya da yeni bir branch oluşturup bu branch üzerinden devam edebilirsiniz. Şimdi ‘yanlışlıkla’
chapter-10 branchini silip
git stash branch <stash-id> ile yeni bir branch’e geçelim. Bu arada stash id tanımlamazsanız en sondaki stash kullanılır.
Bu şekilde istediğimiz değişikliği istediğimiz bir branch’e geçerek devam edebiliriz.
Drop ve Clear
Stash listesini temiz tutmak oldukça önemlidir. Eğer sizin için önemsiz değişiklik varsa bunu
git stash drop <stash-id> ile silebilir ya da tamamını silmek isterseniz
git stash clear komutunu kullanabilirsiniz.
Şimdi değişikliğimizi commit’leyip stash’i temizleyelim.
Notlar
Stash’i öğrendikten sonra kişisel olarak düşüncelerimi de belirtmek istedim. Ben genellikle stash kullanmaktan kaçınıyorum. Bunun sebebi çok fazla stash kullanıldığında stash listesi bir karmaşa haline geliyor. Genellikle hızlıca branch geçişlerinde veya pull işlemlerinde hemen
git stash sonra
git pull ve ardından
git stash popkomutlarını kullanıyorum. Eğer stash’i sürekli kullanıyorsanız mutlaka mesajla birlikte kaydedin. Sürekli stash listenizi temiz tutmaya çalışın. Eğer stash’i sürekli olarak kullanıyorsanız mutlaka mesajla birlikte kullanın. Bu sayede en azından değişikliğin ne olduğuna dair size ipucu vermiş olur.
Bir diğer durum da eğer yerel deponuzu bir şekilde kaybederseniz stash’lere de depo ile beraber veda etmiş olursunuz. Çok önemli bir projede çok önemli bir özellik geliştiriyorsanız bu değişiklikleri stash’de tutmak ölümcül olabilir. Bir gün sonra bilgisayarınızın diski yanmış halde bulabilirsiniz. O yüzden branch’te yeni bir commit oluşturup bunu da uzak depoya mutlaka gönderiyorum. Sonraki gün o commit’i geri alıp üzerinde çalışmaya devam ediyorum. Şu ana kadar görmedik ama bu konuları da işleyeceğiz. Hatta git ile nasıl verimli çalışacağınıza dair ipuçlarımız da olacak.
Bölüm Sonu
Bu dersimizde git’in özelliklerinden biri olan
git stash‘i inceledik. Böylece git derslerimizin ilk bölümünü yani Git 101 derslerini tamamlamış olduk. Bir sonraki bölümde ise daha ileri seviye Git konularına değineceğiz. Eğer derslerimizi buraya kadar takip ettiyseniz her projenizde mutlaka git kullanın. Diğer bir tavsiyem git’e hakim olana kadar da komut satırından kullanmaya devam edin. Günümüzde birçok UI sunan git araçları var. IDE’ler bunların en başında gelir. Conflict çözmek dışında bu tür araçları kullanmanızı tavsiye etmiyoruz. Bu sayede git’e daha kolay hakim olursunuz hem de komut satırından çoğu işlemi yapmanın daha kolay olduğunu anlarsınız.
Konu hakkında görüş ve sorularınızı yorum kısmından veya Soru & Cevap sitemizden sorabilirsiniz.
Bir sonraki derslerde görüşmek üzere…
Git derslerinin tamamı için tıklayınız.35