Projenin yayına çıkacak kısmının beklemesini istiyorsak ve üzerinde de bir şeyler denemek istiyorsak o zaman çalışan kopyamız belli bir bölümlemeyle (branching) ayrılarak diğer kopyalar üzerinde rahatça çalışmamız sağlanıyor.İstersek bu kopyayı çalışabilir durumdaki kopya ile birleştirebiliyoruz.
Grup halinde çalışmalarda herkesin yaptığı değişiklikleri görebiliyoruz.
Git dağıtık bir yapı kullanıyor.Diğer versiyon kontrol sistemleri merkezi bir yapı kullanırken ve bu yapıya sürekli bağlı olmak gerekirken git’te her kullanıcıda bütün bir kopya mevcuttur ve internet olmayan ortamlarda dahi proje geliştirilmeye devam edilebiliyor.
Git kaynak depoları disk üzerinde çok az yer kaplıyor.
Git ile bölümleme(branching) ve birleştirme(merging) işlemleri kolay ve hızlı
Git çevrimdışı(offline) olarak kullanılabiliyor.
Git dağıtık (distributed) olduğu için her bir geliştiricinin makinesinde proje bütün geçmişi ile birlikte tutulabiliyor. İlk başta bunun işlemleri yavaşlattığı ve disk israfı olduğu düşünülebilir. Fakat git'in oldukça etkin algoritmalar kullanması sayesinde bu sorunlar hiç yaşanmıyor.
Git kurulum paketi Ubuntu depolarında mevcut.Alttaki kodla bu depolardan paketi kuruyoruz.
Kod:
sudo apt-get install git-core
GitHub · Build software better, together. sitesinde bir hesap açıyoruz. Aşağıdaki bölümleri hesabınıza göre doldurun.
Kod:
git config --global user.name “Kullanıcı-adı” git config --global user.email “email-adresi”
Kod:
cd ~/.ssh ls # config id_rsa id_rsa.pub known_hosts
Kod:
mkdir key_backup cp id_rsa* rm id_rsa*
Kod:
ssh-key gen
Kod:
Enter passphrase (empty for no passphrase): Parola-yazın Enter same passphrase again: Parolayı-tekrar-yazın
- Şimdi ~/.ssh/id_rsa.pub ' da oluşmuş olan ssh-key 'imizi github'a eklememiz gerekli.
- Önce Home/.ssh dizinindeki id_rsa.pub dosyasını açıp içindeki tüm satırları kopyalıyoruz. Github'ta settings'te sol taraftaki SSH key bölümüne girip oraya add SSH key butonuna tıklıyoruz. SSH keyimixe bir isim verip kopyaladığımız koduda alt kutucuğa ekliyoruz. Add key butonuna basarak keyimizi ekliyoruz.

Bilgisayar ile Github arasında bağlantıyı kurmak için alttaki kodu giriyoruz.
Kod:
ssh -T git@github.com
Git Kullanımı
Fork(Ayırma) İşlemi
https://github.com/CyanogenMod/android_packages_apps_Settings
Yukardaki linki tıklayın ve açılan sayfada Fork butonuna basın.
Böylece zahmetsizce paketi kendi hesabımıza kopyalamış olduk.
Dosya Çekme
Git üç ağaç kolu şeklinde çalışıyor diyebiliriz.İlk kısım çalıştığımız dizin,ikinci kısım yereldeki depomuz,diğer kısım ise uzak depodur.Şimdi clone komutu ile uzaktaki projeyi çekeceğiz. Kod alttaki gibi olacak.
Kod:
git clone uzak_sunucu_adresi -b bölüm
Örnek:
Mesela kendi hesabınıza forkladığınız dosyayı bilgisayara çekin. Bağlantının sonundaki -b kodu branch'ın kısaltmasıdır. Branch bölüm manasına gelir her deponun birden fazla bölümü olabilir. Bu bölümlerden hangisini indirmek istediğimizi -b komutuyla belirliyoruz.
Kod:
git clone git://github.com/eagleeyetom/android_packages_apps_Settings.git -b gingerbread
Proje tüm değişiklikleri ile artık bilgisayarımızda.
Bölümler (Branches)
Git'te default olarak master bölümü gelir.İstersek başka bölümler oluşturabiliriz ve silebiliriz.

Kod:
#Bölüm listesi git branch # Yeni bölüm oluşturmamızı sağlar. git branch yeni_bölüm_ismi # İstediğimiz bölüme geçmemizi sağlar. git checkout bölüm_ismi # Bölüm siler. git branch -D bölüm_adı
Örnek olarak bilgisayara indirdiğimiz paket üzerinde işlem yapalım. Önce paketin içinde dosya silip ekleyelim.
Paketin olduğu dosya dizinine gidip alttaki kodlarla yeni bölüm açıp o bölüme geçelim.
Kod:
git branch deneme git checkout deneme
Alttaki kodla neler olduğuna bakalım.
Kod:
git status
Gördüğünüz gibi bilgisayardaki ve githubdaki paketler karşılaştırılıp yapılan değişiklikler gösteriliyor.
Birden fazla bölümümüz varken iki bölümdeki değişiklikleri birleştirmek için merge komutunu kullanıyoruz.
Kod:
git merge bölüm_adı
Bu komut ile bulunduğumuz branch, burada ismini verdiğimiz branch ile birleşmiş oluyor. Merge işlemi iki farklı geliştirici ortak değişiklikleri düzenlemiş ise çakışmalara yol açabilir.Buna dikkat etmek gerekir. Değişiklikleri birleştirmeden önce, önizleme yapmak için;
Kod:
git diff kaynak_bölüm hedef_bölüm
Yeni dosya oluşturmak için;
Kod:
vim dosya-adı

Projemize ilk düzenlemeyi yapalım:
Öncelikle depoya eklemek istediğimiz veya daha önce eklenmiş,değişiklik yapılmış dosyayı index(hazırlık alanı) denilen git geçici alanına eklemeliyiz.
Kod:
#Hazırlık alanına dosya ekle git add dosya_ismi # Bütün değişen ve yeni dosyaları hazırlık alanına ekle git add . # değişiklik olmuş veya silinmiş dosyaları hazırlık alanına ekle git add -u
Kod:
git commit -m"commitin içeriğini anlatan mesajımız"
Böylece dosyamız uzak sunucuya atıldı.Ancak henüz değişiklik uygulanmadı.Değişikliklerin uygulanabilmesi için alttaki kod ile değişikliğin hangi bölümde yapılacağını göstermemiz lazım:
Kod:
git push
Hata alırsanız:
Kod:
git push uzak_sunucu_adresi bölüm-adı
Kod:
git push git@github.com:eagleeyetom/android_packages_apps_Settings.git xda
Bu komut ile beraber yaptığımız değişiklikler uzak depoya gönderilmiş oldu.
Bu şekilde proje arkadaşlarımızın yaptığı değişiklikleri kendi yerel depomuza çekmek için ise:
Kod:
git pull
Düzenleme geçmişini görmek için alttaki kodu kullanabilirisiniz.
Kod:
git log
Düzenlediğimiz bir dosyayı silmek için :
Kod:
git rm dosya_adı git push origin bölüm-adı
Kod:
git revert silinen_dosya_log_id
Eğer kaydı çok erken yapmışsanız, bazı dosyaları eklemeyi unutmuşsanız ya da kayıt mesajında hata yapmışsanız, sık rastlanan düzeltme işlemlerinden birini kullanabilirsiniz. Kaydı değiştirmek isterseniz, commit komutunu --amend seçeneğiyle çalıştırabilirsiniz:
Kod:
git commit --amend
Hazırlanmış Bir Dosyayı Hazırlık Alanından Kaldırma
benchmarks.rb dosyasını bu öneriye uygun olarak hazırlık alanından(index) kaldıralım:
Kod:
$ git reset HEAD benchmarks.rb benchmarks.rb: locally modified $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # modified: README.txt # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # modified: benchmarks.rb
Dosya Düzenlemesini(commit) Geri Alma
Yanlış birşey yapmanız durumunda lokal değişiklikleri geri almak için;
Kod:
$ git checkout -- benchmarks.rb $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # modified: README.txt
Tüm Kayıttan Bir Dosyayı Kaldırma
Kod:
$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21) Ref 'refs/heads/master' was rewritten
Git'de Eski Sürüme Geri Dönme
Kod:
$git log commit a867b4af366350be2e7c21b8de9cc6504678a61b` Author: Me Date: Thu Nov 4 18:59: 41 2010 -0400 commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4 Author: Me Date: Thu Nov 4 05:13: 39 2010 -0400 commit 0766c053c0ea2035e90f504928f8df3c9363b8bd Author: Me Date: Thu Nov 4 00:55:06 2010 -0400 commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50 Author: Me Date: Wed Nov 3 23:56:08 2010 -0400
Kod:
git checkout 0d1d7fc32
Kod:
git checkout -b old-state 0d1d7fc32
Kod:
#Bu yerel değişiklikleri yok eder #Saklamak isteyip düzenleme yapmadığımız iş varsa yapmayınız $ git reset --hard 0d1d7fc32 #Alternatif olarak işi saklı tutmak için $ git stash $ git reset --hard 0d1d7fc32 $ git stash pop #Bu değişiklikleri kaydeder, o halde sıfırlandıktan sonraki parçayı yeniden uygular #Eğer bir şeyler değiştiyse çakışmaları birleştirebilirsin.
Kod:
#3 tane geri dönüş düzenlemesini oluştururuz $ git revert 0766c053 25eee4ca a867b4af # geri dönüş düzenlemelerinden birine geçiş yapmamızı sağlar $ git checkout 0d1d7fc32 #en sonda da ne yaptığınızı en iyi şekilde açıklayan bir mesaj yazınız $ git commit
Hiç yorum yok:
Yorum Gönder