Ulaşım
- Adres: 2342 Sk, İpekyol, İpek Ap 49A, 63250 Haliliye/Şanlıurfa
- Telefon:
0505 532 36 38 - eMail: admin@alestaweb.com
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 — 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.
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.
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 op restore ile saniyeler içinde geri dönebilirsiniz (undo any operation)git add kafa karışıklığı yok — working directory otomatik commit'in parçası (working dir is the commit)jj rebase, jj squash, jj split komutları her zaman güvenli — operation log var, geri alabilirsiniz (always reversible)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ç.
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.
# 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
# Homebrew ile / via Homebrew brew install jj # Veya cargo cargo install --locked --bin jj jj-cli
# 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
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ı.
# 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"
Yeni bir proje başlatmak veya mevcut Git repo'sunu jj ile kullanmak çok kolay. Alesta Web olarak iki senaryoyu da gösterelim:
# 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)
# 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.
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:
# 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
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.
İş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.
# 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.
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.
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).
# 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.
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.
# 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()'
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ış.
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 |
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.
Alesta Web olarak yukarıdaki tüm kaynakları inceledik ve komutları kendi sistemimizde test ettik (we verified and tested all commands).
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.
Faydalı Linkler / Useful Links:
© 2026 AlestaWeb - Tüm hakları saklıdır.