Git’e Giriş
TEDU GDSC Web & Cloud Takımı
Ali Eren Yoğurtçu
Renas Barış Özkal
Uğur Kellecioğlu
Bugün nelerden
bahsedeceğiz?
1. Versiyon Kontrol Sistemi (VCS)
2. Git
3. Repository Hosting Services
4. GUI Araçları
Versiyon Kontrolü Hakkında
Versiyon kontrolü, herhangi bir proje üzerinde, belirli değişikliklere daha sonra geri
dönüş yapabilmemiz için için bir veya birden çok dosya üzerinde zaman içinde
yapılan değişiklikleri kaydeden bir sistemdir.
Bir VCS, seçilen dosyaları önceki bir versiyonuna geri döndürmenize, zaman içindeki
değişiklikleri karşılaştırmanıza ve daha fazlasını görmenizi sağlar. Bir VCS kullanmak
aynı zamanda belli dosyaları ve üzerindeki çalışmalarınızı kaybederseniz, onları
kolayca kurtarabileceğiniz anlamına da gelir.
Git Nedir?
“Git, küçük projelerden büyük projelere kadar her şeyi hızlı ve
verimli bir şekilde ele almak için tasarlanmış ücretsiz ve açık
kaynaklı bir dağıtılmış versiyon kontrol sistemidir.” (git-scm.com)
Git Terimleri
The Three States
Git'in dosyalarınızın bulunabileceği üç ana durumu vardır:
“modified (değiştirilmiş)” , ”staged (hazırlanmış)” ve “committed
(teslim edilmiş)”:
• “Modified”, bir dosya üzerinde değişiklik yaptığımızı fakat bu
değişikliği henüz veri tabanına kaydetmediğimiz anlamına gelir.
• “Staged”, üzerinde değişiklik yaptığımız bir dosyayı veritabanı
üzerine kaydetmek için işaretlediğimiz, hazırladığımız anlamına
gelir.
• “Committed”, dosyanın yeni versiyona işlendiği ve güvenli bir
şekilde veri tabanında tutulduğu anlamına gelir.
Working tree, staging area ve Git dizini
Repository
Bir projenin sanal deposudur. Kodumuzun gerektiğinde
erişebileceğimiz sürümlerini kaydetmenize olanak tanır.
Repository kavramını genellikle “local repository” ve “remote
repository” olarak iki farklı şekilde göreceğiz. Her iki repository de
aynı projeyi barındırır, aralarındaki fark ise repositorynin
bulunduğu konumdur. Local repository kendi bilgisayarımızda,
remote repository ise bulutta farklı servisler aracılığı ile
projelerimizi saklar.
Workspace (Working directory)
Workspace veya working directory, “.git” dizininin yanında,
dosyalarımızı tuttuğumuz alandır. Biz değişiklikleri bu dosyalar
üzerinden yaparız. Yeni versiyonlar, buradaki değişiklikler
üzerinden kaydedilir.
Local Repository ve Workspace
Remote Repository
Staging Area
Staging area, “.git” dizininde bulunan ve bir sonraki
versiyonumuza hangi dosyaları ve değişikllikleri dahil edeceğimiz
bilgilerini depolayan bir dosyadır. Git dilindeki teknik adı
“index”tir, ancak “staging area (hazırlama alanı)” ifadesi ile aynı
yapıyı temsil eder.
Index Dosyası (Staging Area)
Git Staging Diyagramı
Branch
Branch, bağımsız bir geliştirme alanını temsil eder. Branch’leri yeni
bir workspace, staging area ve repository talep etmenin bir yolu
olarak düşünebilirsiniz. Yeni “commit”ler mevcut “commit” üzerine
kaydedilir.
Git Komutları
$ git init
Yeni Bir Local Repository Oluşturma
Yeni bir projeye başlıyorsak veya var olan bir projemizi artık Git ile
yönetmek istiyorsak, “git init” komutu ile yeni bir Git repositorysi
oluştururuz. Bu komut ile “.git” dizini (repository) oluşur ve “main” veya
“master” isminde yeni bir branch oluşur.
$ git clone <url>
Buluttaki Bir Repository’i Kopyalamak
Eğer bulutta bulunan bir Git projesini bilgisayarımıza indirip üzerinde
çalışmak istiyorsak “git clone” komutunu kullanabiliriz.
$ git branch
Local Repository’deki Branch’leri Listelemek
“git branch” komutu ile local repository’de bulunan branchleri
listeleyebiliriz.
$ git branch –a
Tüm Branchleri Listelemek
$ git branch <isim>
Yeni Branch Oluşturmak
$ git branch –d <isim>
Bir branch’ı Silmek
$ git checkout <isim>
Farklı Bir Branch’a Geçmek
$ git checkout -b <isim>
Yeni Branch Oluşturmak
$ git status
Bir Repository’i İnceleme
$ git add <dosya/dizin>
Dosyaları Index’e Eklemek
$ git restore --staged <dosya/dizin>
Dosyaları Index’ten Çıkarmak
$ git restore <dosya/dizin>
Workspace’deki Değişikliği Geri Almak
$ git restore <dosya/dizin>
Workspace’deki Değişikliği Geri Almak
$ git restore <dosya/dizin>
Workspace’deki Değişikliği Geri Almak
$ git commit –m “<Açıklama>”
Index’lenen Değişiklikleri Kaydetmek
$ git fetch
Remote Repository’den Güncel Bilgileri Almak
“git fetch” komutu, commitleri ve dosyaları Remote Repository’den
Local Repository’e indirir. Fetch, başkalarının ne üzerinde çalıştığını
görmek istediğimizde kullandığımız bir işlemdir. Bu işlem bize yapılan
değişiklikleri gösterir fakat bu değişiklikleri Local Repository’miz ile
birleştirmeyi zorlamaz. Başka bir deyişle, yerel çalışmalarınız üzerinde
kesinlikle hiçbir etkisi yoktur. Getirilen içeriğin “git checkout” komutu
kullanılarak açıkça teslim alınması gerekir. Bu, Local Repository’mize
entegre etmeden önce commit’leri gözden geçirmemizi sağlar.
$ git push
Local Repo’nun İçeriğini Remote Repo’ya
Göndermek
“git push” komutu, Local Repository’deki içeriği yani commitleri Remote
Repository’e yüklemek için kullanılır.
$ git pull
Remote Repo’daki İçeriği Local Repo’ya İndirmek
“git pull” komutu, Repomte Repository’den içerikleri almak, indirmek
ve yerel depoyu bu içerikle eşleşecek şekilde hemen güncellemek için
kullanılır. “git pull” komutu aslında “git fetch” komutunun ardından “git
merge” komutu ile aynı işlevi gerçekleştirir
$ git pull
Remote Repo’daki İçeriği Local Repo’ya İndirmek
$ git pull
Remote Repo’daki İçeriği Local Repo’ya İndirmek
$ git merge <isim>
Remote Repo’daki İçeriği Local Repo’ya İndirmek
Merge işlemi, Git'in projenin ayrılan dallarını tekrar bir araya getirme
yöntemidir. “git merge” komutu, “git branch” ile oluşturulan bağımsız
dalları alıp tek bir branch’e entegre etmemize olanak tanır.
$ git diff
Yapılan Değişiklikleri Görüntülemek
.gitignore Dosyası
Belli Dosyaları Göz Ardı Etmek
Hiç bir zaman index’e eklenmesini istemediğimiz dosyaları “.gitignore”
dosyasında belirterek takipten çıkarabilirz. Örneğin IDE’nin oluşturduğu
ama projenin bir parçası olmayan “.idea” klasörünü Git’in takip
etmemesini istiyorsak, “.gitignore” dosyası oluşturup “.idea” klasörünü
buraya eklemeliyiz.
Repository Hosting
Services
Repository Hosting Services
Repository hosting servisleri, bir sürüm kontrol sistemini saran ve
geliştiren üçüncü taraf web uygulamalarıdır. Bir versiyon kontrol
sistemi kullanmadan bir bu servislerden tam olarak yararlanamazsınız.
GIT GUI Araçları
GIT GUI TOOLS
Git is a popular version control system that helps developers, writers, or
anyone that requires keeping versions of their files to manage them and
track changes. It is mostly used on the terminal by many programmers or
command prompt.
Git GUI focuses on allowing users to make changes to their repository
by making new commits, amending existing ones, creating branches,
performing local merges, and fetching/pushing to remote repositories.
GIT GUI
Git GUI is known to work on all popular UNIX systems, Mac OS X, and
Windows (under both Cygwin and MSYS). To the extent possible OS specific
user interface guidelines are followed, making git gui a fairly native
interface for users.
GIT GUI
THANKS FOR PARTICIPATING
STAY TUNED!
Referanslar
https://www.atlassian.com/git/tutorials/what-is-version-
control
https://git-scm.com/docs/git-gui/

Git 101

  • 1.
    Git’e Giriş TEDU GDSCWeb & Cloud Takımı Ali Eren Yoğurtçu Renas Barış Özkal Uğur Kellecioğlu
  • 2.
    Bugün nelerden bahsedeceğiz? 1. VersiyonKontrol Sistemi (VCS) 2. Git 3. Repository Hosting Services 4. GUI Araçları
  • 3.
    Versiyon Kontrolü Hakkında Versiyonkontrolü, herhangi bir proje üzerinde, belirli değişikliklere daha sonra geri dönüş yapabilmemiz için için bir veya birden çok dosya üzerinde zaman içinde yapılan değişiklikleri kaydeden bir sistemdir. Bir VCS, seçilen dosyaları önceki bir versiyonuna geri döndürmenize, zaman içindeki değişiklikleri karşılaştırmanıza ve daha fazlasını görmenizi sağlar. Bir VCS kullanmak aynı zamanda belli dosyaları ve üzerindeki çalışmalarınızı kaybederseniz, onları kolayca kurtarabileceğiniz anlamına da gelir.
  • 4.
    Git Nedir? “Git, küçükprojelerden büyük projelere kadar her şeyi hızlı ve verimli bir şekilde ele almak için tasarlanmış ücretsiz ve açık kaynaklı bir dağıtılmış versiyon kontrol sistemidir.” (git-scm.com)
  • 5.
  • 6.
    The Three States Git'indosyalarınızın bulunabileceği üç ana durumu vardır: “modified (değiştirilmiş)” , ”staged (hazırlanmış)” ve “committed (teslim edilmiş)”: • “Modified”, bir dosya üzerinde değişiklik yaptığımızı fakat bu değişikliği henüz veri tabanına kaydetmediğimiz anlamına gelir. • “Staged”, üzerinde değişiklik yaptığımız bir dosyayı veritabanı üzerine kaydetmek için işaretlediğimiz, hazırladığımız anlamına gelir. • “Committed”, dosyanın yeni versiyona işlendiği ve güvenli bir şekilde veri tabanında tutulduğu anlamına gelir.
  • 7.
    Working tree, stagingarea ve Git dizini
  • 8.
    Repository Bir projenin sanaldeposudur. Kodumuzun gerektiğinde erişebileceğimiz sürümlerini kaydetmenize olanak tanır. Repository kavramını genellikle “local repository” ve “remote repository” olarak iki farklı şekilde göreceğiz. Her iki repository de aynı projeyi barındırır, aralarındaki fark ise repositorynin bulunduğu konumdur. Local repository kendi bilgisayarımızda, remote repository ise bulutta farklı servisler aracılığı ile projelerimizi saklar.
  • 9.
    Workspace (Working directory) Workspaceveya working directory, “.git” dizininin yanında, dosyalarımızı tuttuğumuz alandır. Biz değişiklikleri bu dosyalar üzerinden yaparız. Yeni versiyonlar, buradaki değişiklikler üzerinden kaydedilir.
  • 10.
  • 11.
  • 12.
    Staging Area Staging area,“.git” dizininde bulunan ve bir sonraki versiyonumuza hangi dosyaları ve değişikllikleri dahil edeceğimiz bilgilerini depolayan bir dosyadır. Git dilindeki teknik adı “index”tir, ancak “staging area (hazırlama alanı)” ifadesi ile aynı yapıyı temsil eder.
  • 13.
  • 14.
  • 15.
    Branch Branch, bağımsız birgeliştirme alanını temsil eder. Branch’leri yeni bir workspace, staging area ve repository talep etmenin bir yolu olarak düşünebilirsiniz. Yeni “commit”ler mevcut “commit” üzerine kaydedilir.
  • 16.
  • 17.
    $ git init YeniBir Local Repository Oluşturma Yeni bir projeye başlıyorsak veya var olan bir projemizi artık Git ile yönetmek istiyorsak, “git init” komutu ile yeni bir Git repositorysi oluştururuz. Bu komut ile “.git” dizini (repository) oluşur ve “main” veya “master” isminde yeni bir branch oluşur.
  • 19.
    $ git clone<url> Buluttaki Bir Repository’i Kopyalamak Eğer bulutta bulunan bir Git projesini bilgisayarımıza indirip üzerinde çalışmak istiyorsak “git clone” komutunu kullanabiliriz.
  • 21.
    $ git branch LocalRepository’deki Branch’leri Listelemek “git branch” komutu ile local repository’de bulunan branchleri listeleyebiliriz.
  • 22.
    $ git branch–a Tüm Branchleri Listelemek
  • 23.
    $ git branch<isim> Yeni Branch Oluşturmak
  • 24.
    $ git branch–d <isim> Bir branch’ı Silmek
  • 25.
    $ git checkout<isim> Farklı Bir Branch’a Geçmek
  • 26.
    $ git checkout-b <isim> Yeni Branch Oluşturmak
  • 27.
    $ git status BirRepository’i İnceleme
  • 28.
    $ git add<dosya/dizin> Dosyaları Index’e Eklemek
  • 29.
    $ git restore--staged <dosya/dizin> Dosyaları Index’ten Çıkarmak
  • 30.
    $ git restore<dosya/dizin> Workspace’deki Değişikliği Geri Almak
  • 31.
    $ git restore<dosya/dizin> Workspace’deki Değişikliği Geri Almak
  • 32.
    $ git restore<dosya/dizin> Workspace’deki Değişikliği Geri Almak
  • 33.
    $ git commit–m “<Açıklama>” Index’lenen Değişiklikleri Kaydetmek
  • 34.
    $ git fetch RemoteRepository’den Güncel Bilgileri Almak “git fetch” komutu, commitleri ve dosyaları Remote Repository’den Local Repository’e indirir. Fetch, başkalarının ne üzerinde çalıştığını görmek istediğimizde kullandığımız bir işlemdir. Bu işlem bize yapılan değişiklikleri gösterir fakat bu değişiklikleri Local Repository’miz ile birleştirmeyi zorlamaz. Başka bir deyişle, yerel çalışmalarınız üzerinde kesinlikle hiçbir etkisi yoktur. Getirilen içeriğin “git checkout” komutu kullanılarak açıkça teslim alınması gerekir. Bu, Local Repository’mize entegre etmeden önce commit’leri gözden geçirmemizi sağlar.
  • 36.
    $ git push LocalRepo’nun İçeriğini Remote Repo’ya Göndermek “git push” komutu, Local Repository’deki içeriği yani commitleri Remote Repository’e yüklemek için kullanılır.
  • 40.
    $ git pull RemoteRepo’daki İçeriği Local Repo’ya İndirmek “git pull” komutu, Repomte Repository’den içerikleri almak, indirmek ve yerel depoyu bu içerikle eşleşecek şekilde hemen güncellemek için kullanılır. “git pull” komutu aslında “git fetch” komutunun ardından “git merge” komutu ile aynı işlevi gerçekleştirir
  • 41.
    $ git pull RemoteRepo’daki İçeriği Local Repo’ya İndirmek
  • 42.
    $ git pull RemoteRepo’daki İçeriği Local Repo’ya İndirmek
  • 43.
    $ git merge<isim> Remote Repo’daki İçeriği Local Repo’ya İndirmek Merge işlemi, Git'in projenin ayrılan dallarını tekrar bir araya getirme yöntemidir. “git merge” komutu, “git branch” ile oluşturulan bağımsız dalları alıp tek bir branch’e entegre etmemize olanak tanır.
  • 45.
    $ git diff YapılanDeğişiklikleri Görüntülemek
  • 46.
    .gitignore Dosyası Belli DosyalarıGöz Ardı Etmek Hiç bir zaman index’e eklenmesini istemediğimiz dosyaları “.gitignore” dosyasında belirterek takipten çıkarabilirz. Örneğin IDE’nin oluşturduğu ama projenin bir parçası olmayan “.idea” klasörünü Git’in takip etmemesini istiyorsak, “.gitignore” dosyası oluşturup “.idea” klasörünü buraya eklemeliyiz.
  • 50.
  • 51.
    Repository Hosting Services Repositoryhosting servisleri, bir sürüm kontrol sistemini saran ve geliştiren üçüncü taraf web uygulamalarıdır. Bir versiyon kontrol sistemi kullanmadan bir bu servislerden tam olarak yararlanamazsınız.
  • 53.
  • 54.
  • 57.
    Git is apopular version control system that helps developers, writers, or anyone that requires keeping versions of their files to manage them and track changes. It is mostly used on the terminal by many programmers or command prompt. Git GUI focuses on allowing users to make changes to their repository by making new commits, amending existing ones, creating branches, performing local merges, and fetching/pushing to remote repositories. GIT GUI
  • 58.
    Git GUI isknown to work on all popular UNIX systems, Mac OS X, and Windows (under both Cygwin and MSYS). To the extent possible OS specific user interface guidelines are followed, making git gui a fairly native interface for users. GIT GUI
  • 59.
  • 60.

Editor's Notes

  • #2 Selamlar, hoş geldiniz Bugün Google DSC TED Üniversitesi olarak sizlere Versiyon control sistemlerini ve git yazılımını tanıtacağız.
  • #4 “Versiyon kontrolü” nedir ve neden önemsemeliyiz? Versiyon kontrolü, herhangi bir proje üzerinde, belirli değişikliklere daha sonra geri dönüş yapabilmemiz için için bir veya birden çok dosya üzerinde zaman içinde yapılan değişiklikleri kaydeden bir sistemdir. Örneğin bir grafik veya web tasarımcısıysanız ve bir görüntünün veya tasarımın farklı versiyonunlarını saklamak isterseniz, bir VCS kullanmak işinizi oldukça kolaylaştıracaktır. Bir VCS, seçilen dosyaları önceki bir versiyonuna geri döndürmenize, tüm projeyi önceki bir versiyona döndürmenize, zaman içindeki değişiklikleri karşılaştırmanıza ve daha fazlasını görmenizi sağlar. Bir VCS kullanmak aynı zamanda belli dosyaları ve üzerindeki çalışmalarınızı kaybederseniz, onları kolayca kurtarabileceğiniz anlamına da gelir.