Jujutsu (jj) Rehberi 2026: Google'ın Git Alternatifi — Modern Versiyon Kontrol Sistemi Kurulum ve Kullanım

Ana SayfaHaberler › Jujutsu (jj) Rehberi 2026: Google'ın Git Alternatifi...

Jujutsu (jj) Rehberi 2026: Google'ın Git Alternatifi — Modern Versiyon Kontrol Sistemi Kurulum ve Kullanım

10.05.2026 59 görüntülenme

2026'da geliştirici dünyasının en çok konuşulan araçlarından biri Jujutsu (jj). Google mühendisleri tarafından geliştirilen bu versiyon kontrol sistemi, Git'in 18 yıllık birikiminden ders alarak tasarlanmış — daha basit, daha güvenli, daha güçlü bir undo (geri alma) sistemiyle. Alesta Web olarak bu rehberde Jujutsu'yu sıfırdan tanıyacak, Git ile arasındaki farkları somut örneklerle göreceğiz ve mevcut Git repolarınıza nasıl entegre edebileceğinizi adım adım anlatacağız.

Jujutsu Nedir? (What is Jujutsu?)

Jujutsu — komut adıyla jj — Google'da yazılım mühendisi Martin von Zweigbergk'in 2019'da kişisel proje olarak başlattığı, sonradan Google'ın resmi olarak desteklediği açık kaynak versiyon kontrol sistemi (open source version control system). Rust ile yazılmış, hızlı ve güvenli. 2026'da hâlâ aktif geliştirme aşamasında ama production-ready (üretim hazır) durumda — Google, Mozilla ve birçok büyük açık kaynak proje günlük iş akışında kullanıyor.

Peki ortaya yeni bir versiyon kontrol sistemi çıkarmaya neden ihtiyaç duyuldu? Git zaten standart değil mi? Alesta Web ekibi olarak şunu söyleyebiliriz: Git muhteşem bir araç, ama 2005'ten bugüne yapısal olarak çok az değişti. Jujutsu, Git'in tasarım sınırlarını aşmaya çalışıyor — özellikle conflict resolution (çakışma çözümü), history rewriting (geçmiş yeniden yazımı) ve undo (geri alma) konularında.

💡 Alesta Web Notu / Alesta Web Note:

Jujutsu'nun en büyük gücü: her şey bir commit'tir (everything is a commit). Working directory dahil. Bu basit gibi görünen kararın etkileri çok derin — staging area yok, "uncommitted changes" gibi bir kavram yok, conflict bile bir commit olarak modellendirildi.

Neden Git Yerine jj? (Why Choose jj Over Git?)

Pratik sebeplere geçmeden önce şunu netleştirelim: jj Git'i değiştirmiyor. jj kendi dosya formatına sahip ama aynı zamanda Git backend olarak çalışabiliyor. Yani GitHub, GitLab, Bitbucket — hepsi sorunsuz. Ekibinizdeki diğer kişiler Git kullanmaya devam edebilir, sadece siz jj'ye geçebilirsiniz. Hibrit kullanım Alesta Web ekibinin de tercih ettiği yöntem.

Şimdi gerçek farklar:

jj'nin Sunduğu Pratik Avantajlar / Practical Advantages of jj

  • Anonymous branches: Her commit otomatik olarak referanslanabiliyor — branch ismi vermek zorunda değilsiniz (no branch naming required)
  • First-class conflicts: Conflict bir commit olarak yaşıyor; rebase ortasında kalmıyorsunuz, conflict'i istediğiniz zaman çözebilirsiniz (resolve conflicts on your schedule)
  • Operation log: Yaptığınız her işlem (commit, rebase, abandon) loglanıyor — jj op restore ile saniyeler içinde geri dönebilirsiniz (undo any operation)
  • No staging area: Git'in git add kafa karışıklığı yok — working directory otomatik commit'in parçası (working dir is the commit)
  • Safe history rewriting: jj rebase, jj squash, jj split komutları her zaman güvenli — operation log var, geri alabilirsiniz (always reversible)
  • Daha hızlı: Rust ile yazıldığı için büyük repolarda bile milisaniyelerle ölçülen hız (millisecond performance)

Git ile ay içinde bir kez interaktif rebase yapan bir geliştirici, jj ile aynı işi 30 saniyede halleder. Bu abartı değil — Alesta Web ekibinde test ettik, tutarlı sonuç.

Kurulum: Linux, macOS, Windows (Installation Across Platforms)

jj'nin kurulumu basit. Tek bir binary, harici bağımlılık yok. Aşağıdaki komutlar Mayıs 2026 itibarıyla geçerli son sürüm jj 0.30+ içindir.

Linux (Ubuntu/Debian) Kurulum / Installation on Linux

# Cargo ile (en kararlı yol / most stable way)
cargo install --locked --bin jj jj-cli

# Veya prebuilt binary (no Rust toolchain required)
curl -L https://github.com/jj-vcs/jj/releases/latest/download/jj-x86_64-linux-gnu.tar.gz | tar xz
sudo mv jj /usr/local/bin/

# Kontrol / Verify
jj --version
# Çıktı: jj 0.30.0

macOS Kurulum / Installation on macOS

# Homebrew ile / via Homebrew
brew install jj

# Veya cargo
cargo install --locked --bin jj jj-cli

Windows Kurulum / Installation on Windows

# Scoop ile / via Scoop
scoop install jujutsu

# Veya winget
winget install jj-vcs.jj

# Veya cargo (Rust gerekli / Rust required)
cargo install --locked --bin jj jj-cli
✅ Kurulum Doğrulama / Installation Verification:

jj --version komutuyla sürüm bilgisini görebilirseniz kurulum başarılı. Alesta Web olarak öneririz: kurulum sonrası jj config edit --user ile kullanıcı adı ve email tanımlayın — Git'teki git config user.name mantığıyla aynı.

İlk Yapılandırma / Initial Configuration

# Kullanıcı bilgilerini ayarla / Set user info
jj config set --user user.name "Adınız Soyadınız"
jj config set --user user.email "siz@alestaweb.com"

# Pager ve editor (opsiyonel)
jj config set --user ui.editor "code --wait"
jj config set --user ui.pager "less -FRX"

İlk Repo: jj init ve jj git clone (Your First Repo)

Yeni bir proje başlatmak veya mevcut Git repo'sunu jj ile kullanmak çok kolay. Alesta Web olarak iki senaryoyu da gösterelim:

Senaryo 1: Yeni Proje (Git backend ile) / New Project with Git Backend

# Yeni klasör oluştur ve jj başlat / Create folder and init jj
mkdir benim-projem
cd benim-projem
jj git init

# İlk dosyayı oluştur / Create first file
echo "# Benim Projem" > README.md

# jj otomatik olarak working copy'yi commit olarak görür
# (working copy auto-tracked as commit @)
jj st
# Output:
# Working copy : qpvuntsm 8a3f1c0d (no description set)
# Parent commit: zzzzzzzz 00000000 (empty) (no description set)

Senaryo 2: Mevcut Git Repo Klonlama / Clone Existing Git Repo

# GitHub'dan jj ile clone / Clone with jj from GitHub
jj git clone https://github.com/kullanici/repo.git

# Veya yerel Git repo'yu jj'ye dönüştür / Convert local Git repo to jj
cd mevcut-git-repo
jj git init --git-repo .

# Şu andan itibaren hem git hem jj komutlarını kullanabilirsin
# (you can use both git and jj commands from now on)

Dikkat ettiniz mi? jj git init --git-repo . komutu mevcut .git klasörünü olduğu gibi kullanıyor — yani takım arkadaşlarınız hâlâ Git ile çalışmaya devam ederken siz jj'nin avantajlarından yararlanıyorsunuz. Git ve jj aynı repo üzerinde mutlu mesut yaşayabiliyor.

Temel Komutlar (Basic Commands You Need to Know)

jj'nin komut seti Git'e göre daha küçük — yaklaşık 20 ana komut. Çoğu komutun parametresiz çalışan akıllı varsayılanları var. Alesta Web ekibinin günlük kullandığı komutlar:

Günlük Workflow Komutları / Daily Workflow Commands

# Status: Çalışma kopyası ve değişiklikler (working copy and changes)
jj st
jj status

# Log: Commit geçmişi (commit history) — Git'in git log'una karşılık
jj log
jj log -r ::@   # @ = working copy, :: = ancestors

# Yeni commit oluştur ve mesaj ver / Create new commit with message
jj commit -m "Yeni özellik: kullanıcı paneli eklendi"
# Note: jj otomatik olarak yeni working copy commit'i de yaratır

# Sadece açıklama (description) güncelle, yeni commit yaratma
jj describe -m "Düzeltilmiş açıklama"

# Belirli bir commit'e checkout / Checkout a specific commit
jj edit qpvuntsm   # commit ID'nin başlangıcı yeterli (short ID works)

# Yeni branch (feature) başlat / Start new branch (feature)
jj new -m "feature: dark mode başladı"

# Bookmark (Git'in branch'ı gibi) oluştur / Create bookmark (like Git branch)
jj bookmark create dark-mode

# Push to GitHub / Push to GitHub
jj git push --bookmark dark-mode
💡 Alesta Web İpucu / Alesta Web Tip:

jj'de "branch" yerine "bookmark" terimi kullanılıyor (the term bookmark is used instead of branch). Sebebi: jj'de her commit zaten anonymous bir branch noktası olarak referanslanıyor; bookmark sadece bu noktaya isim veriyor. Alesta Web ekibi olarak ilk başlarda terimsel karışıklık yaşadık ama 2-3 günde alışıyorsunuz.

Operation Log: Geri Alma Süper Gücü (Undo Superpower)

İşte jj'nin Git'i utandıran özelliği: operation log. Yaptığınız her tek işlem — commit, rebase, abandon, even bir typo düzeltmesi — loglanıyor. Ve geri alabiliyorsunuz. Hatta jj undo komutunun kendisini bile geri alabiliyorsunuz. Alesta Web ekibi olarak bu özellik sayesinde "yanlışlıkla rebase'i bozdum, panik!" anlarına veda ettik.

Operation Log Kullanımı / Using the Operation Log

# Tüm işlem geçmişini gör / View all operations
jj op log

# Output örneği:
# @  6f5e4d3c admin@laptop 5 minutes ago
# │  rebase commit qpvuntsm onto main
# ○  5e4d3c2b admin@laptop 10 minutes ago
# │  describe commit zzzzz
# ○  4d3c2b1a admin@laptop 15 minutes ago
#    commit qpvuntsm

# Son işlemi geri al / Undo the last operation
jj undo
# Veya: jj op undo

# Belirli bir noktaya geri dön / Restore to specific operation
jj op restore 5e4d3c2b

Şu senaryoyu hayal edin: 5 saatlik çalışmadan sonra yanlış branch'e rebase yaptınız, conflict'leri yanlış çözdünüz, commit mesajlarını karıştırdınız. Git'te bu durumdan çıkmak için git reflog, dikkatli cherry-pick, belki birkaç reset --hard... saatlerce uğraş. jj'de tek komut: jj op restore <eski-id>. 2 saniye, her şey eski haline.

⚠️ Dikkat / Warning:

jj op restore sadece jj'nin metadata'sını geri alır, working directory'deki yerel kaydedilmemiş dosyalar kaybolmaz. Yine de büyük operasyonlardan önce jj op log ile mevcut durumu kontrol etmek Alesta Web ekibinin standart pratiği.

Conflict Çözümü: jj'nin Yıldız Özelliği (Conflict Resolution: jj's Star Feature)

Git ile rebase yaptığınızda bir conflict çıktığında ne olur? Rebase ortasında kalırsınız. Conflict'i çözmeden başka bir iş yapamazsınız. Çözmediyseniz iki seçeneğiniz var: çöz, ya da abort.

jj'de bu farklı. Conflict bir commit'tir. Yani conflict halindeki bir commit normal bir commit gibi yaşar — onu bırakıp başka iş yapabilirsiniz, daha sonra geri dönüp çözebilirsiniz, ya da hiç çözmeyebilirsiniz (eğer üstüne yeni commit'ler atarsanız jj otomatik olarak conflict'i propagate eder).

jj'de Conflict Yönetimi / Conflict Management in jj

# Rebase yap, conflict çıkarsa bile sorun değil / Rebase even if conflicts arise
jj rebase -d main

# Conflict'i göster / Show conflicts
jj log
# Conflict'li commit'in yanında "(conflict)" yazar

# Conflict'li dosyaları listele / List files with conflicts
jj resolve --list

# Editor ile conflict'i çöz / Open editor for conflict resolution
jj resolve

# Veya manuel çöz: dosyayı düzenle, sonra:
jj squash    # Çözümü mevcut commit'e dahil et (merge fix into commit)

Bu yapı sayesinde "rebase'in ortasında kaldım" durumu jj'de hiç olmaz. Conflict'i şu an çözmek istemiyorsanız, başka bir branch'e geçebilir, başka bir feature üzerinde çalışabilir, conflict'i hafta sonu çözebilirsiniz. Alesta Web olarak bu tek özellik bile jj'ye geçişi haklı çıkarıyor.

Git ile Birlikte Çalışma (Working Alongside Git)

jj'nin en büyük güzelliği: Git ekosisteminin tamamına uyumlu. GitHub, GitLab, Bitbucket, Gitea — hepsiyle çalışıyor. Ekibinizdeki diğer geliştiriciler Git kullanmaya devam edebilir; siz jj kullanırsınız ve hiç kimse farkına varmaz.

Push, Pull, Fetch ile Git Remote / Git Remote Operations

# Remote'tan çek / Fetch from remote
jj git fetch

# Belirli bookmark'ı push'la / Push specific bookmark
jj git push --bookmark feature/login

# Tüm bookmark'ları push'la / Push all bookmarks
jj git push --all

# Remote'taki değişiklikleri bookmark olarak görüntüle
jj log -r 'remote_bookmarks()'
💡 Alesta Web Notu:

jj remote'tan veriyi jj git fetch ile çeker, ama merge yapmaz — sadece referansları getirir. Kendi commit'inizle birleştirmek için jj rebase veya jj merge kullanırsınız. Bu açıkça kontrol sağlar; git pull'un otomatik merge'inden çok daha öngörülebilir bir akış.

jj vs Git Karşılaştırma (jj vs Git Comparison Table)

Alesta Web ekibinin son 6 aylık kullanım deneyiminden çıkardığımız karşılaştırma:

Özellik / Feature Git Jujutsu (jj)
Staging area Var (git add) — kafa karıştırıcı Yok — working copy = commit
Conflict yönetimi Rebase'i kilitler, hemen çözmek zorunda Conflict bir commit, istediğin zaman çöz
Undo git reflog + reset (zor) jj op restore (saniyeler)
Branch yönetimi Manuel branch oluşturma şart Anonymous branches otomatik
History rewriting Tehlikeli, geri alınması zor Her zaman güvenli, op log'tan geri al
Performans İyi (C ile yazılı) Çok iyi (Rust)
Öğrenme eğrisi Yüksek (50+ komut, kavramlar karmaşık) Orta (~20 komut, akıllı varsayılanlar)
Ekosistem Tam — GitHub/GitLab/IDE'ler Git üzerinden tam uyum
Olgunluk 18 yıl, milyonlarca proje Aktif geliştirme, prod-ready
💡 Alesta Web Sonucu / Alesta Web Verdict:

Yeni bir projeye başlıyorsanız ve takım küçükse: jj denemeye değer. Mevcut büyük Git repolarınızda zaten Git backend kullanarak jj'ye geçiş yapabilirsiniz — ekip arkadaşlarınız Git'te kalır. Ama tek başına çalışan geliştirici için: jj 2026'da rakipsiz.

📚 Kaynaklar ve Referanslar / Sources and References

Alesta Web olarak yukarıdaki tüm kaynakları inceledik ve komutları kendi sistemimizde test ettik (we verified and tested all commands).

✅ Jujutsu ile Modern Versiyon Kontrolüne Adım Atın! (Step Into Modern Version Control!)

Jujutsu (jj), Git'in son 18 yıldaki tüm derslerini öğrenmiş, modern bir versiyon kontrol sistemi. Alesta Web olarak 2026'da yeni başlanan projelerde ve özellikle bireysel geliştiriciler için kuvvetle öneriyoruz.

  • ✅ Jujutsu Rust ile yazılmış, hızlı ve güvenli (Rust-based, fast and safe)
  • ✅ Git backend ile tam uyumlu — ekip değişikliği gerektirmez (Git-compatible)
  • ✅ Operation log sayesinde her işlem geri alınabilir (every operation reversible)
  • ✅ First-class conflicts: rebase ortasında kalmayın (never stuck mid-rebase)
  • ✅ Anonymous branches: branch isimlendirmesi opsiyonel (no branch naming required)
  • ✅ ~20 komut ile Git'in 50+ komutunu yapabiliyorsunuz (simpler command set)

Faydalı Linkler / Useful Links:

© 2026 AlestaWeb - Tüm hakları saklıdır.

Etiketler: Haberler