Türkçe

Çalışma ağaçları

Çalışma ağaçları

Sohbetleri paralel olarak çalıştırmak için ChatGPT masaüstü uygulamasındaki Codex'te Git çalışma ağaçlarını kullanın

Çalışma ağaçları, Codex'in aynı projede birbiriyle çakışmadan birden fazla bağımsız sohbet çalıştırmasını sağlar. Depo, çalışma ağacı ve komutlar, projeyi içeren bilgisayarda veya uzak geliştirme ortamında kalır. Doğrudan ChatGPT masaüstü uygulamasında çalışabilir veya bağlı bir bilgisayardaki çalışma ağacı sohbetlerini başlatmak, yönlendirmek, onaylamak ve incelemek için ChatGPT mobil uygulamasında Remote özelliğini kullanabilirsiniz.

Git depolarında zamanlanmış görevler, devam eden çalışmalarınızla çakışmamaları için ayrılmış arka plan çalışma ağaçlarında çalışabilir. Sürüm denetimi altında olmayan projelerde zamanlanmış görevler doğrudan proje dizininde çalışır. Ayrıca çalışma ağacında elle sohbet başlatabilir ve bir sohbeti Local ile Worktree arasında taşımak için Handoff'u kullanabilirsiniz.

Çalışma ağacı nedir?

Çalışma ağaçları, altyapıda Git çalışma ağaçlarını kullandıkları için yalnızca bir Git deposunun parçası olan projelerde çalışır. Bir çalışma ağacı, deponuzun ikinci bir kopyasını ("checkout") oluşturmanıza olanak tanır. Her çalışma ağacında deponuzdaki her dosyanın ayrı bir kopyası bulunur; ancak bunların tümü commit'ler, dallar vb. hakkındaki aynı meta verileri (.git klasörü) paylaşır. Böylece birden fazla dalı paralel olarak checkout edip bunlar üzerinde çalışabilirsiniz.

Terminoloji

  • Local checkout: Oluşturduğunuz depo. ChatGPT masaüstü uygulamasında bazen yalnızca Local olarak adlandırılır.
  • Worktree: ChatGPT masaüstü uygulamasında yerel checkout'unuzdan oluşturulan bir Git çalışma ağacı.
  • Handoff: Bir sohbeti Local ile Worktree arasında taşıyan akış. Codex, çalışmanızı bunlar arasında güvenle taşımak için gereken Git işlemlerini yürütür.

Neden çalışma ağacı kullanmalısınız?

  1. Mevcut Local kurulumunuzu bozmadan Codex ile paralel çalışın.
  2. Ön plandaki işinize odaklanmayı sürdürürken arka plan çalışmalarını sıraya alın.
  3. İncelemeye, test etmeye veya daha doğrudan iş birliği yapmaya hazır olduğunuzda sohbeti daha sonra Local'a taşıyın.

Başlarken

Çalışma ağaçları bir Git deposu gerektirir. Seçtiğiniz projenin bir Git deposunda bulunduğundan emin olun.

  1. "Worktree" seçeneğini belirleyin

    Yeni sohbet görünümünde, oluşturucunun altındaki Worktree seçeneğini belirleyin. İsteğe bağlı olarak çalışma ağacının kurulum betiklerini çalıştıracak bir yerel ortam seçin.

  2. Başlangıç dalını seçin

    Oluşturucunun altında çalışma ağacının temel alacağı Git dalını seçin. Bu, main / master dalınız, bir özellik dalı veya stage edilmemiş yerel değişiklikler içeren mevcut dalınız olabilir.

  3. İsteminizi gönderin

    İsteminizi gönderdiğinizde Codex, seçtiğiniz dalı temel alan bir Git çalışma ağacı oluşturur. Codex varsayılan olarak "detached HEAD" durumunda çalışır.

  4. Çalışmaya nerede devam edeceğinizi seçin

    Hazır olduğunuzda doğrudan çalışma ağacında çalışmayı sürdürebilir veya sohbeti yerel checkout'unuza devredebilirsiniz. Local'a veya Local'dan devir işlemi, sohbetinizi ve kodunuzu taşıyarak diğer checkout'ta devam etmenizi sağlar.

Local ve Worktree arasında çalışma

Çalışma ağaçlarının görünümü ve kullanımı yerel checkout'unuza çok benzer. Aralarındaki fark, iş akışınızdaki yerleridir. Local'ı ön plan, Worktree'yi ise arka plan olarak düşünebilirsiniz. Handoff, bir sohbeti bunlar arasında taşımanızı sağlar.

Handoff, altyapıda çalışmayı iki checkout arasında güvenle taşımak için gereken Git işlemlerini yürütür. Bu önemlidir; çünkü Git bir dalın aynı anda yalnızca tek bir yerde checkout edilmesine izin verir. Bir dalı çalışma ağacında checkout ederseniz aynı anda yerel checkout'unuzda checkout edemezsiniz; bunun tersi de geçerlidir.

Uygulamada yaygın olarak kullanılan iki yol vardır:

  1. Yalnızca çalışma ağacında çalışın. Bu yol, örneğin bağımlılıkları ve araçları bir yerel ortam kurulum betiği kullanarak yüklediğiniz için değişiklikleri doğrudan çalışma ağacında doğrulayabildiğiniz durumlarda en iyi sonucu verir.
  2. Sohbeti Local'a devredin. Sohbeti ön plana getirmek istediğinizde, örneğin değişiklikleri her zamanki IDE'nizde incelemek veya uygulamanızın yalnızca tek bir örneğini çalıştırabilmek için bunu kullanın.

Seçenek 1: Çalışma ağacında çalışma

Değişikliklerinizle yalnızca çalışma ağacında kalmak istiyorsanız sohbet başlığındaki Create branch here düğmesini kullanarak çalışma ağacınızı bir dala dönüştürün.

Bundan sonra değişikliklerinizi commit edebilir, dalınızı uzak deponuza gönderebilir ve GitHub'da bir pull request açabilirsiniz.

Üst bilgideki "Open" düğmesini kullanarak IDE'nizi çalışma ağacında açabilir, tümleşik terminali veya çalışma ağacı dizininden ihtiyaç duyduğunuz başka herhangi bir aracı kullanabilirsiniz.

Dal denetimlerini ve çalışma ağacı ayrıntılarını gösteren çalışma ağacı sohbet görünümü (açık mod)
Bir çalışma ağacında dal oluşturursanız bu dalı yerel çalışma kopyanız dâhil başka hiçbir çalışma ağacında kullanıma alamayacağınızı unutmayın.

Seçenek 2: Bir sohbeti Local'a devretme

Bir sohbeti ön plana getirmek istiyorsanız sohbet başlığında Hand off seçeneğini belirleyin ve sohbeti Local konumuna taşıyın.

Bu yol; değişiklikleri her zamanki IDE pencerenizde okumak, mevcut geliştirme sunucunuzu çalıştırmak veya çalışmayı her gün kullandığınız ortamda doğrulamak istediğinizde iyi sonuç verir.

Codex, sohbeti çalışma ağacı ile yerel checkout'unuz arasında güvenle taşımak için gereken Git adımlarını yürütür.

Her sohbet, zaman içinde aynı ilişkili çalışma ağacını korur. Sohbeti daha sonra yeniden bir çalışma ağacına aktarırsanız Codex, kaldığınız yerden devam edebilmeniz için sohbeti aynı arka plan ortamına döndürür.

Bir sohbeti çalışma ağacından Local'a taşıyan Handoff iletişim kutusu (açık mod)
Ters yönde de ilerleyebilirsiniz. Zaten Local'da çalışıyorsanız ve ön plandaki alanı boşaltmak istiyorsanız sohbeti bir çalışma ağacına taşımak için **Hand off** özelliğini kullanın. Siz dikkatinizi yerelde başka bir işe yönlendirirken Codex'in arka planda çalışmaya devam etmesini istediğinizde bu özellik yararlıdır.

Handoff Git işlemlerini kullandığından .gitignore dosyanızın parçası olan dosyalar, Codex bunları .worktreeinclude ile yerel olarak yönetilen bir çalışma ağacına kopyalamadığı sürece sohbetle birlikte taşınmaz.

İleri düzey ayrıntılar

Codex tarafından yönetilen ve kalıcı çalışma ağaçları

Sohbetler varsayılan olarak Codex tarafından yönetilen bir çalışma ağacı kullanır. Bunlar hafif ve gözden çıkarılabilir olacak şekilde tasarlanmıştır. Codex tarafından yönetilen bir çalışma ağacı genellikle tek bir sohbete ayrılır ve daha sonra sohbeti yeniden oraya devrederseniz Codex bu sohbeti aynı çalışma ağacına döndürür.

Uzun ömürlü bir ortam istiyorsanız kenar çubuğundaki bir projenin üç noktalı menüsünden kalıcı bir çalışma ağacı oluşturun. Bu işlem, kendi başına bir proje olan yeni bir kalıcı çalışma ağacı oluşturur. Kalıcı çalışma ağaçları otomatik olarak silinmez ve aynı çalışma ağacında birden fazla sohbet başlatabilirsiniz.

Codex çalışma ağaçlarını sizin için nasıl yönetir?

Codex, çalışma ağaçlarını $CODEX_HOME/worktrees içinde oluşturur. Başlangıç kaydı, sohbetinizi başlatırken seçilen dalın HEAD kaydıdır. Yerel değişiklikler içeren bir dal seçtiyseniz Codex, kaydedilmemiş değişiklikleri de çalışma ağacına uygular. Çalışma ağacı bir dal olarak kullanıma alınmaz. detached HEAD durumundadır. Bu sayede Codex, dallarınızı gereksiz öğelerle doldurmadan birden fazla çalışma ağacı oluşturabilir.

Yok sayılan yerel dosyaları yönetilen çalışma ağaçlarına kopyalama

Yerel ve Codex tarafından yönetilen çalışma ağaçları bir Git checkout'undan başlar; dolayısıyla izlenen dosyalar zaten mevcuttur. Deponuz yeni bir çalışma ağacının ihtiyaç duyduğu yerel kurulum dosyalarını yok sayıyorsa depo köküne bir .worktreeinclude dosyası ekleyin ve Codex yönetilen bir çalışma ağacı oluşturduğunda kopyalanacak yok sayılan yolları veya .gitignore biçimindeki kalıpları listeleyin.

Bunu Git'in kasıtlı olarak yok saydığı .env, .env.local veya config/secrets.json gibi dosyalar için kullanın. Codex yalnızca .worktreeinclude ile eşleşen yok sayılmış dosyaları kopyalar; Git'in izlemediği diğer yerel dosyaları kopyalamaz. İzlenen dosyaları listelemeyin.

Codex, yok sayılmış bir AGENTS.override.md dosyasını yerel ve yönetilen çalışma ağaçlarına otomatik olarak kopyalar; bu nedenle onu .worktreeinclude içinde listelemeniz gerekmez.

# .worktreeinclude
.env
.env.local
config/secrets.json

Codex kaynak sembolik bağlantılarını atlar ve yeni checkout'ta zaten bulunan dosyaların üzerine yazmaz. Bu davranış, komut satırından kendi oluşturduğunuz uzak çalışma ağaçları veya Git çalışma ağaçları için değil, ChatGPT masaüstü uygulamasında yerel olarak yönetilen çalışma ağaçları için geçerlidir.

Dal sınırlamaları

Codex'in bir çalışma ağacındaki bazı işleri tamamladığını ve Create branch here seçeneğini kullanarak burada bir feature/a dalı oluşturduğunuzu varsayalım. Şimdi bunu yerel checkout'unuzda denemek istiyorsunuz. Dalı checkout etmeye çalışırsanız aşağıdaki hatayı alırsınız:

fatal: 'feature/a' is already used by worktree at '<WORKTREE_PATH>'

Bunu çözmek için çalışma ağacında feature/a yerine başka bir dalı checkout etmeniz gerekir.

Dalı yerel olarak checkout etmeyi planlıyorsanız aynı dalı iki yerde birden checkout edilmiş durumda tutmaya çalışmak yerine sohbeti Local'a taşımak için Handoff'u kullanın.

Bu sınırlama neden var? Bir dal, anlamı bir çalışma ağacının “kullanıma alınmış mevcut durumu” olan tek bir değiştirilebilir referansı (`refs/heads/`) temsil ettiğinden Git, aynı dalın aynı anda birden fazla çalışma ağacında kullanıma alınmasını engeller.

Bir dal checkout edildiğinde Git, dalın HEAD'inin o çalışma ağacına ait olduğunu varsayar ve commit, reset, rebase ve merge gibi işlemlerin bu referansı iyi tanımlanmış, sıralı bir şekilde ilerletmesini bekler. Birden fazla çalışma ağacının aynı dalı eş zamanlı olarak checkout etmesine izin verilmesi, hangi çalışma ağacındaki işlemlerin dal referansını güncelleyeceği konusunda belirsizlik ve yarış durumları oluşturur; bu da commit'lerin kaybolmasına, tutarsız indekslere veya anlaşılmaz çakışma çözümlerine yol açabilir.

Git, çalışma ağacı başına tek dal kuralını uygulayarak her dalın tek bir yetkili çalışma kopyasına sahip olmasını garanti ederken diğer çalışma ağaçlarının aynı commit'lere detached HEAD veya ayrı dallar üzerinden güvenle başvurmasına da olanak tanır.

Çalışma ağacını temizleme

Çalışma ağaçları diskte çok yer kaplayabilir. Her birinin kendi depo dosyaları, bağımlılıkları, derleme önbellekleri vb. vardır. Bu nedenle ChatGPT masaüstü uygulaması, çalışma ağacı sayısını makul bir sınırda tutmaya çalışır.

Codex varsayılan olarak en son kullanılan ve Codex tarafından yönetilen 15 çalışma ağacını tutar. Disk kullanımını kendiniz yönetmeyi tercih ediyorsanız ayarlardan bu sınırı değiştirebilir veya otomatik silmeyi kapatabilirsiniz.

Codex hâlâ önemli olan çalışma ağaçlarını silmekten kaçınır. Codex tarafından yönetilen çalışma ağaçları şu durumlarda otomatik olarak silinmez:

  • Sabitlenmiş bir sohbet bu çalışma ağacına bağlıysa
  • Sohbet hâlâ sürüyorsa
  • Çalışma ağacı kalıcıysa

Codex tarafından yönetilen çalışma ağaçları şu durumlarda otomatik olarak silinir:

  • İlişkili sohbeti arşivlediğinizde
  • Codex, yapılandırdığınız sınırı aşmamak için eski çalışma ağaçlarını silmek zorunda kaldığında

Codex, yönettiği bir çalışma ağacını silmeden önce içindeki çalışmanın anlık görüntüsünü kaydeder. Çalışma ağacı silindikten sonra bir sohbeti açarsanız çalışma ağacını geri yükleme seçeneğini görürsünüz.

Sık sorulan sorular

Çalışma ağaçlarının nerede oluşturulacağını denetleyebilir miyim? Evet. Codex, yönetilen çalışma ağaçlarını varsayılan olarak `$CODEX_HOME/worktrees` altında oluşturur. Başka bir konum seçmek için **Settings > Worktrees** bölümünü açıp **Worktree root** ayarını değiştirin.

Bir sohbeti Local ile Worktree arasında taşıyabilir miyim? Evet. Bir sohbeti yerel çalışma kopyanız ile bir çalışma ağacı arasında taşımak için sohbet üst bilgisindeki **Hand off** özelliğini kullanın. Codex, sohbeti ortamlar arasında güvenle taşımak için gereken Git işlemlerini gerçekleştirir. Bir sohbeti daha sonra yeniden çalışma ağacına aktarırsanız Codex onu ilişkili olduğu aynı çalışma ağacına döndürür.

Bir çalışma ağacı silinirse sohbetlere ne olur? Alttaki çalışma ağacı dizini silinse bile sohbetler geçmişinizde kalabilir. Codex tarafından yönetilen çalışma ağaçlarında Codex, çalışma ağacını silmeden önce bir anlık görüntü kaydeder ve ilişkili sohbeti yeniden açarsanız bunu geri yüklemeyi önerir. Kalıcı çalışma ağaçları, sohbetlerini arşivlediğinizde otomatik olarak silinmez.