REHBER · GIT WORKTREE

Ajanlara ayrı klasör ver. Birleştirmeyi ayrıca düşün.

Git worktree, aynı deponun farklı branch’lerini ayrı klasörlerde açmanı sağlar. Dosya yazımlarını ayırır; iki değişikliğin mantıksal olarak uyumlu olacağını garanti etmez.

Arenor · Güncellendi

Worktree ne zaman işe yarar?

İki bağımsız özellik üzerinde çalışırken aynı branch’te dosya yazımını paylaşmak istemeyebilirsin. Ayrı worktree’ler bu dosya alanlarını ayırır. Paket önbelleği, aynı portta çalışan servis veya dış veritabanı gibi ortak kaynaklar yine çakışabilir.

Bu rehberde önce manuel Git yöntemini gösteriyoruz. Son bölüm Arenor’un farklı davranışını açıklar: Arenor izolasyonu ajan başına değil, çalışma başınadır.

1. Yeni bir deneme deposu oluştur

Komutları yalnız yeni bir örnek klasörde çalıştır. Python 3 ve Git gerekir. Mevcut projenin üzerinde denemek yerine iki dosyalı bu örneği kullan. Demo kimliği yalnız bu yerel depoya yazılır.

mkdir arenor-worktree-demo
cd arenor-worktree-demo
git init -b main
git config user.name "Arenor Demo"
git config user.email "demo@example.invalid"
printf "label=Save\n" > button.txt
cat > check.py <<'PYTEST'
from pathlib import Path
label = Path("button.txt").read_text().strip()
assert label in {"label=Save", "label=Save changes"}, label
print("PASS: button label accepted")
PYTEST
git add button.txt check.py
git -c commit.gpgsign=false commit -m "Create demo"
git worktree add -b agent-ui ../agent-ui
git worktree add -b agent-review ../agent-review
git worktree list
İki worktree aynı ilk commit’ten başlar. Yeni klasör adları mevcut bir klasörle çakışırsa yeni ad seç. Demo commit’lerinde imza yalnız bu komut için kapalıdır.

2. Bir klasörde değiştir, diğerini kontrol et

Bu aşamada inceleme worktree’si değişikliği görmez. Ajanlara yalnız aynı dosya adını söylemek yeterli değildir; hangi klasörü kullanacaklarını açık belirt.

printf "label=Save changes\n" > ../agent-ui/button.txt
(cd ../agent-ui && python3 check.py)
git -C ../agent-ui diff -- button.txt
cat button.txt
cat ../agent-review/button.txt
Kontrol PASS verir. Ana klasör ve review klasörü hâlâ label=Save içerir.

3. İnceleme klasörünü güncelle

Gerçek projede yalnız ilgili dosyaları stage et; git diff, testler ve izlenmeyen dosyaları incele. --ff-only, review dalının ayrıştığı durumda otomatik bir merge commit oluşturmadan durur. Bu hata yeniden inceleme ihtiyacını gösterir.

git -C ../agent-ui add button.txt
git -C ../agent-ui -c commit.gpgsign=false commit -m "Clarify button label"
git -C ../agent-review merge --ff-only agent-ui
(cd ../agent-review && python3 check.py)
Bu örnekte review dalı ayrışmadığı için fast-forward başarılıdır. Ana klasörün main dalı değişmez. Demo commit’lerinde imza yalnız bu komut için kapalıdır.

4. Çakışmanın hâlâ mümkün olduğunu gör

İki branch aynı satırı farklı değiştirdi. Worktree bu çatışmayı önlemedi; yalnız çalışmalar sırasında dosyaları ayrı tuttu. Bu taze demoda merge öncesi her şey commit edildiği için aşağıdaki komutla merge denemesinden çıkabilirsin. Gerçek depoda önce yerel değişikliklerini koru.

printf "label=Save draft\n" > ../agent-review/button.txt
git -C ../agent-review add button.txt
git -C ../agent-review -c commit.gpgsign=false commit -m "Demonstrate conflicting label"
printf "label=Save now\n" > ../agent-ui/button.txt
git -C ../agent-ui add button.txt
git -C ../agent-ui -c commit.gpgsign=false commit -m "Alternative label for conflict demo"
git -C ../agent-ui merge agent-review
git -C ../agent-ui status --short
Merge komutunun başarısız olması burada beklenen sonuçtur. button.txt için UU ve conflict işaretleri görünür. Demo commit’lerinde imza yalnız bu komut için kapalıdır.

5. Deneme birleştirmesinden çık

İş bitince temiz çalışma klasörlerini git worktree remove ile kaldırabilirsin. Commit edilmemiş değişiklik varsa önce neyi koruyacağını belirle; bu rehber zorla kaldırma veya reset komutu kullanmaz.

git -C ../agent-ui merge --abort
cat ../agent-ui/button.txt
git worktree list
UI klasörü merge öncesindeki label=Save now durumuna döner. Worktree’ler incelemen için yerinde kalır.

Arenor’da aynı kavramın sınırları

  • Git izolasyonu açıksa Arenor her çalışma için tek worktree oluşturur; o çalışmanın üyeleri bu klasörü paylaşır.
  • Başlangıç HEAD’dir. Ana klasördeki commit edilmemiş dosyalar çalışma kopyasına taşınmaz.
  • Oluşturma hatasında uyarıyla ana klasörde devam edilebilir; izolasyon durumunu kontrol et.
  • “Ana kopyaya uygula” dosyaların başlangıç, çalışma ve güncel ana kopya durumlarını karşılaştırır; burada gösterilen Git merge komutu değildir.
  • İnceleme sonrasında commit/push ayrı kullanıcı kararıdır. Worktree, ağ veya izin sandbox’ı değildir.

Doğrulama kaydı

2 Ekim 2026, Git 2.54.0 ve Python 3 ile yeni bir geçici depoda izolasyon, test, fast-forward inceleme, kasıtlı satır çakışması ve merge --abort akışı kontrol edildi. Model çağrısı veya gerçek kullanıcı projesi kullanılmadı. İş akışının doğrulanması, herhangi bir ajanın yazdığı kodun doğru olduğu anlamına gelmez.

Sorular

Worktree bütün çakışmaları önler mi?

Hayır. Çalışma klasörlerini ayırır; aynı dosyaların veya davranışların farklı değiştirilmesi birleştirme sırasında hâlâ inceleme gerektirir.

Arenor her ajan için ayrı worktree açıyor mu?

Hayır. İsteğe bağlı izolasyon çalışma başınadır. Aynı çalışmadaki üyelerin dosya kapsamı ve bağımlılıkları ayrıca planlanmalıdır.

Arenor plan onayı ekranında iki örnek görev ve kabul ölçütleri
Anonim örnek verilerle gerçek Arenor ekranı.

Kaynaklar