---
title: 'Depo Oluşturma ve Yapılandırma'
source: 'https://academia.sh/tr/kurslar/surum-kontrolune-giris/depo-olusturma-ve-yapilandirma'
course: 'Sürüm Kontrolüne Giriş'
language: tr
updated: '2026-08-17T18:10:47+00:00'
license: 'CC BY-SA 4.0'
---

# Depo Oluşturma ve Yapılandırma

Boş bir dizinin depoya dönüştürülmesi, `.git` dizininin içeriği ve sistem, kullanıcı ile depo düzeyindeki yapılandırma katmanlarının önceliği.

Önceki iki ders modeli kurdu: tarihçe bir yönlü çevrimsiz çizgedir ve dağıtık bir sistemde bu
çizgenin tamamı yerelde durur. Bu ders modeli somutlaştırır — kursun örnek deposu olan
`sozluk` projesi oluşturulur ve deponun disk üzerindeki karşılığı incelenir.

Yapılandırmayla başlamak gerekir, çünkü bir işlemenin yazarı yapılandırmadan okunur ve
yazar bilgisi işlemenin kimliğine girer.

## Üç Yapılandırma Katmanı

Ayarlar üç ayrı dosyada tutulur ve dar kapsamlı olan geniş olanı örter:

| Katman | Kapsam | Seçenek |
|---|---|---|
| Sistem | Makinedeki tüm kullanıcılar | `--system` |
| Kullanıcı | Bir kullanıcının tüm depoları | `--global` |
| Depo | Yalnızca içinde bulunulan depo | `--local` |

Aynı anahtar birden çok katmanda tanımlıysa depo düzeyindeki değer geçerlidir. Bu, "genel
olarak şu kimlikle çalışırım, ama şu depoda başka bir kimlik kullanırım" ayrımını mümkün kılar.

Kullanıcı düzeyinde üç ayar yapılır:

```bash
git config --global user.name "Deniz Kaya"
git config --global user.email "deniz@ornek.test"
git config --global init.defaultBranch main
```

İlk ikisi işlemelerin yazar alanını doldurur; ikisi tanımlı değilse işleme yazma denemesi
hatayla durur. Üçüncüsü, yeni oluşturulan depoların ilk dalının adını belirler. **Dal
(branch)** kavramı Dallanma ve İşbirliği kursunun konusudur; burada yalnızca çıktılarda
görünecek bir ad olarak geçecektir.

Ayarların yazıldığı yer okunabilir:

```bash
git config --list --global
```

```
user.name=Deniz Kaya
user.email=deniz@ornek.test
init.defaultbranch=main
```

Anahtar adlarının bölüm ve ad kısımlarının büyük/küçük harf duyarsız olduğuna dikkat edin:
`init.defaultBranch` yazıldı, `init.defaultbranch` olarak listelendi. Değerler ise harfi
harfine korunur.

## Depoyu Oluşturmak

Depo, var olan bir dizin içinde kurulur:

```bash
mkdir sozluk
cd sozluk
git init
```

Komut tek satırlık bir onay yazar: `Initialized empty Git repository in` ifadesinin ardından
oluşturulan `.git` dizininin tam yolu gelir. Yol, komutun çalıştırıldığı dizine bağlı olduğu
için her sistemde farklıdır.

Bu andan sonra dizin bir depodur. Dizinin görünür içeriği değişmemiştir; eklenen tek şey
`.git` adlı gizli bir alt dizindir. Depo, o alt dizinin kendisidir: `.git` silinirse dosyalar
kalır, tarihçe gider.

## `.git` Dizininin İçeriği

```bash
ls .git
```

```
HEAD
config
description
hooks
info
objects
refs
```

Yedi girdiden dördü bu kurs boyunca sürekli kullanılacaktır:

- **`objects`** — nesne veritabanı. Önceki derste anlatılan içerik adresli depolama burada
  gerçekleşir: dosya içerikleri, dizin görüntüleri ve işlemeler bu dizinde karma değerlerine
  göre adlandırılmış dosyalar hâlinde durur. Yeni bir depoda boştur.
- **`refs`** — insan tarafından okunabilir adları nesne kimliklerine bağlayan başvurular.
  `refs/heads` dal uçlarını, `refs/tags` etiketleri tutar. İkisi de başlangıçta boştur.
- **`HEAD`** — o an üzerinde çalışılan başvuruyu gösteren tek satırlık dosya.
- **`config`** — deponun kendi yapılandırması; üç katmanın en dar olanı.

Kalan üçü daha seyrek kullanılır: `hooks` belirli olaylarda çalıştırılacak betikleri, `info`
depoya özel yardımcı dosyaları, `description` yalnızca bazı sunucu arayüzlerinin okuduğu bir
tanım metnini tutar.

`HEAD` dosyası doğrudan okunabilir:

```bash
cat .git/HEAD
```

```
ref: refs/heads/main
```

İçerik bir nesne kimliği değil, bir başvuruya yapılan başvurudur. Henüz hiçbir işleme
yazılmadığı için `refs/heads/main` dosyası da yoktur; `HEAD` var olmayan bir hedefi gösterir.
Bu geçici tutarsızlık, ilk işleme yazıldığında giderilecektir.

## Deponun Kendi Yapılandırması

```bash
cat .git/config
```

```
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
```

Bu değerler depo oluşturulurken sistemden okunarak yazılır. `repositoryformatversion` depo
biçiminin sürümünü, `bare` deponun çalışma dizini olup olmadığını, `logallrefupdates`
başvuru değişikliklerinin günlüğe yazılıp yazılmayacağını belirtir. Son ikisi dosya sistemine
bağlıdır: `ignorecase`, dosya adlarında büyük/küçük harf ayrımı yapmayan dosya sistemlerinde
(macOS ve Windows'un olağan yapılandırmaları) `true` olur; `precomposeunicode` yalnızca macOS
üzerinde yazılır. Çoğu Linux dosya sisteminde bu iki satır bulunmaz.

Depo düzeyine bir ayar yazmak için komut deponun içinden, `--local` seçeneğiyle çalıştırılır:

```bash
git config --local user.email "deniz@baska-kurum.ornek"
```

Bu satır yalnızca `sozluk` deposundaki işlemeleri etkiler; kullanıcı düzeyindeki değer diğer
depolarda geçerli kalır.

## Deponun Kökü Nasıl Bulunur

Komutlar deponun kök dizininden çalıştırılmak zorunda değildir. Bir komut çalıştırıldığında,
içinde bulunulan dizinden başlanarak yukarı doğru `.git` aranır; bulunan ilk `.git` deponun
kökünü belirler.

```bash
git rev-parse --show-toplevel
```

```
<ust-dizin>/sozluk
```

Çıktı, deponun kök dizininin tam yoludur; yukarıda üst dizinin adı kısaltılmıştır. Alt bir
dizinden çalıştırıldığında aynı değer döner; kökün neresi olduğu bulunulan yere göre değişmez.
Kök ile bulunulan yer arasındaki göreli yol ayrıca sorulabilir:

```bash
git rev-parse --show-prefix
```

```
gecici/alt/
```

Arama yukarı doğru olduğu için, bir deponun içinde ikinci bir `git init` çalıştırmak beklenen
sonucu vermez: yeni bir `.git` oluşur ve o alt ağaç dıştaki depodan kopar. İç içe depo
gerektiren durumlar için ayrı düzenekler vardır; bu kursta tek bir depo kullanılacaktır.

Depo dışında çalıştırılan komut açık bir hata verir:

```
fatal: not a git repository (or any of the parent directories): .git
```

## Bir Değerin Kaynağını Bulmak

Beklenmedik bir ayarın hangi katmandan geldiği doğrudan sorulabilir:

```bash
git config --list --show-origin --global
```

```
file:<ev-dizini>/.gitconfig	user.name=Deniz Kaya
file:<ev-dizini>/.gitconfig	user.email=deniz@ornek.test
file:<ev-dizini>/.gitconfig	init.defaultbranch=main
```

Her satırın başında değerin okunduğu dosya yazar; yukarıdaki çıktıda ev dizininin yolu
kısaltılmıştır, gerçek çıktıda tam yol görünür. Katman seçeneği kaldırılırsa üç katmanın
tamamı birleştirilmiş hâlde listelenir ve aynı anahtarın birden çok satırda görünmesi
mümkündür; bu durumda geçerli olan **son** satırdır.

Tek bir anahtarın geçerli değeri şöyle sorulur:

```bash
git config user.name
```

```
Deniz Kaya
```

## İlk Durum

```bash
git status
```

```
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)
```

Üç satır üç ayrı bilgi verir. Birincisi, `HEAD` dosyasının gösterdiği başvurunun adıdır.
İkincisi, `refs/heads/main` başvurusunun henüz bir nesneye bağlanmadığını söyler. Üçüncüsü,
çalışma dizininde kayda alınacak hiçbir şey bulunmadığını bildirir.

`git status` bu kursun en sık çalıştırılacak komutudur. Her seferinde aynı soruyu yanıtlar:
çalışma dizini, hazırlık alanı ve son işleme arasında hangi farklar var? Sonraki konu bu üç
bölgeyi tek tek tanımlayacaktır.

## Özet

- Yapılandırma sistem, kullanıcı ve depo katmanlarında tutulur; dar kapsam geniş kapsamı örter.
- `user.name` ve `user.email` tanımlı değilse işleme yazılamaz; bu değerler işlemenin
  kimliğine girer.
- `git init`, var olan bir dizinde `.git` alt dizinini oluşturur; depo o alt dizindir.
- `.git/objects` nesne veritabanını, `.git/refs` adlandırılmış başvuruları, `.git/HEAD` o an
  çalışılan başvuruyu tutar.
- `--show-origin`, bir ayarın hangi dosyadan geldiğini gösterir.

## Sonraki Adım

Depo kuruldu ama boş. Bir dosya oluşturulduğunda ne olur — dosya doğrudan tarihçeye mi girer,
yoksa arada bir aşama mı vardır? Sonraki ders, çalışma dizini ile nesne veritabanı arasında
duran hazırlık alanını tanımlayacak ve bu alanın `.git` içindeki karşılığını gösterecek.
