Claude Code ilə lokallar üçün arayış hazırlayırsınız: siyahıda axtarış hazırlanır, iş yarıdadır. Birdən məlum olur ki, səhifənin saxlanmış versiyasında başlığın altındakı qeyd yanlışdır. Düzəliş iki dəqiqəlikdir, amma onu yarımçıq axtarışdan ayrı yoxlamaq istəyirsiniz.

Gəlin baxaq, ikinci tapşırığa eyni repozitoriyada ayrıca iş qovluğu necə ayırmaq, orada Claude Code-un ayrıca sessiyasını açmaq və sonda heç nəyi qarışdırmadan nəticəni saxlamaq olar. İkinci qovluq öz-özlüyündə işi sürətləndirmir. Onun bir məqsədi var: iki tapşırığın faylları bir-birinə qarışmasın.

Bir iş qovluğu nə vaxt çatmır

locale-guide təlim layihəsi lokalların siyahısı olan brauzer səhifəsidir. Hazırda onun qovluğunda A tapşırığı üzərində işləyirsiniz: axtarış funksiyası, feature/search budağı və bir yarımçıq dəyişiklik:

git status --short
M app.js

Bu dəyişikliyi itirmək olmaz, amma onu hazır nəticə saymaq da tezdir. Elə bu vaxt B tapşırığı ortaya çıxır, axtarışla heç bir əlaqəsi yoxdur: main-də saxlanmış index.html versiyasında qeydi düzəltmək lazımdır.

İlk ağla gələn yol ikinci terminal açıb eyni qovluqda daha bir claude işə salmaqdır. Söhbətlər ayrı olacaq, fayllar isə eyni. Hər iki icraçı eyni hissələri dəyişsə, düzəlişlər qarışa bilər. Sadə nümunəmizdə qeyd və axtarış hələ ayrı fayllardadır, amma hər iki sessiya eyni yarımçıq layihəni görür. Başqa budağa keçmək üçün də əvvəlcə cari dəyişiklikləri yoluna qoymaq lazımdır.

Çıxış yolu B tapşırığına ayrıca iş yeri ayırmaqdır. Git eyni repozitoriya üçün ayrıca iş qovluğu, yəni worktree yarada bilir. Claude Code-da isə --worktree flaqı var: belə qovluğu hazırlayır və sessiyanı dərhal orada başladır. Əvvəl mexanizmi, sonra flaqı nəzərdən keçirək.

Bir repozitoriya və üç iş qovluğu, hər birində öz budağı: main, feature-a və feature-b
Bir repozitoriya, bir neçə iş qovluğu və hər qovluqda öz budağı. Şəkildəki adlar şərtidir; nümunəmizdə iki iş qovluğu və üç budaq var: main, feature/search və fix/label.

Bir məqamı əvvəldən deyək: bu üsul hər tapşırıq üçün vacib deyil. İşçi ağac təmizdirsə, düzəliş də qısadırsa, ikinci qovluq sadəcə əlavə əziyyət yaradacaq. Tapşırıqları növbə ilə eyni qovluqda görmək də tam normaldır.

Budaq, iş qovluğu və sessiya

Bu üç anlayışı qarışdırmaq asandır, çünki çox vaxt onlarla eyni anda işləyirsiniz:

NədirNə saxlayırHarada yerləşir
budaqcommit-ə və tarixçə xəttinə göstəricirepozitoriyada, bütün iş qovluqları üçün ortaqdır
iş qovluğu (worktree)hazırda işlədiyiniz fayllar və commit üçün hazırlanmış dəyişikliklərdiskdə, hər qovluğun öz faylları var
sessiyaagentlə söhbət və onun kontekstiClaude Code-da

İkinci terminal barədə sualın cavabı da buradadır: yeni sessiya söhbəti ayırır, faylları yox. Faylları ayırmaq üçün ikinci iş qovluğu lazımdır.

Bir repozitoriya, iki iş qovluğu, hər birində öz budağı və öz Claude Code sessiyasıBir repozitoriyalocale-guidebudaqfeature/searchClaude Code sessiyasıA tapşırığı, axtarışbudaqfix/labelClaude Code sessiyasıB tapşırığı, qeydİş qovluğulocale-guideİş qovluğulocale-guide-labelCommit edilməmiş dəyişikliklər öz qovluğunda qalır
Tarixçə və budaqların siyahısı ortaqdır, fayllar və sessiyalar ayrıdır

Tarixçə və budaqlar ortaqdır: hər iki qovluq eyni repozitoriyaya bağlıdır. Git tənzimləmələri də standart olaraq ortaqdır, baxmayaraq ki Git worktree üçün ayrıca tənzimləmələri dəstəkləyir. İşçi fayllar və commit üçün hazırlanmış dəyişikliklər isə hər qovluqda ayrıdır. Birinci qovluqdakı commit edilməmiş axtarış ikinciyə öz-özünə keçməyəcək.

Eyni budağı adətən iki qovluqda birdən açmaq olmur. Git imtina edəcək və budağı artıq tutan qovluğu göstərəcək:

fatal: 'fix/label' is already used by worktree at '/projects/locale-guide-label'

Başlanğıc vəziyyətini seçin

Təlim nümunəsində repozitoriya artıq yaradılıb, ən azı bir commit, lokal main budağı və feature/search budağı var. Hələlik hər ikisi eyni commit-i göstərir, axtarış isə yalnız commit edilməmiş dəyişiklik kimi var. Əsas qovluqda başlanğıc vəziyyətinə üç əmrlə baxaq:

git status --short        # hazırda saxlanmamış dəyişikliklər
git branch --show-current # əsas qovluq hansı budaqdadır
git log -1 --oneline main # main-də son commit
 M app.js
feature/search
d5ec405 add locale guide page

Qeydi müstəqil düzəltmək üçün main budağını götürürük: B tapşırığına axtarışın hazırkı vəziyyəti yox, səhifənin saxlanmış versiyası lazımdır. Nəzərə alın, bu, kompüterinizdəki lokal main-dir. O, şəbəkədəki eyniadlı budaqla üst-üstə düşməyə bilər və bu əmr şəbəkədən heç nə çəkmir.

İkinci tapşırığa birincinin nəticəsi lazımdırsa, əvvəlcə onun üçün hansı saxlanmış commit-in lazım olduğunu müəyyənləşdirin və qovluğu həmin commit-dən yaradın. Adi git worktree add commit edilməmiş dəyişiklikləri avtomatik köçürmür. Faylları ayrıca köçürmək və ya mühiti hazırlayan əlavə vasitələr isə başqa əməliyyatlardır.

İkinci iş qovluğu yaradın

locale-guide qovluğundan:

git worktree add -b fix/label ../locale-guide-label main

Əmr soldan sağa belə oxunur: yeni fix/label budağı yaratmaq, iş qovluğunu yanındakı ../locale-guide-label yolunda yerləşdirmək və başlanğıc kimi main-i götürmək. Son arqument baza seçimini aydın göstərir. O olmasa, Git bu əmrdə feature/search budağının cari HEAD commit-ini götürər, amma commit edilməmiş dəyişiklikləri yox. Nümunəmizdə budaqlar hələ eyni commit-dədir, buna görə fayllar eyni olardı; axtarış üzrə commit-lərdən sonra baza seçimi nəticəyə təsir edəcək. Git təxminən belə cavab verir:

Preparing worktree (new branch 'fix/label')
HEAD is now at d5ec405 add locale guide page

İndi nəticəni yoxlayaq. -C flaqı Git-ə qovluğa keçmədən əmri həmin qovluqda icra etməyi bildirir:

git worktree list
git -C ../locale-guide-label branch --show-current
git -C ../locale-guide-label status --short

Nümunə üçün təlim çıxışı və şərti yollar; sizdə yollar fərqli olacaq:

/projects/locale-guide        d5ec405 [feature/search]
/projects/locale-guide-label  d5ec405 [fix/label]

fix/label

Siyahıda hər iki qovluq və hər birinin budağı görünür. Əsas qovluq yarımçıq axtarışla feature/search-də qalıb, yenisi isə fix/label budağındadır. İkinci qovluqdakı status heç nə göstərmədi: qovluq təmizdir, məqsədimiz də elə bu idi.

Yoldan və ya budaq adından istifadə etmək mümkün deyilsə, Git imtina edib səbəbi izah edəcək, məsələn already exists və ya is already used by worktree. Worktree siyahısını, budaqları və göstərilən qovluğun məzmununu yoxlayın. Bu, əvvəlki işə salmanız və ya başqa tapşırıq ola bilər. --force flaqını kor-koranə əlavə etməyin: əvvəlcə nəyin mövcud olduğunu və lazım olub-olmadığını aydınlaşdırın.

Claude Code-da ikinci tapşırığı açın

locale-guide-label qovluğunu IDE-də ayrıca pəncərədə açın və ya yeni terminalda ora keçib claude başladın. Yeni sessiya A tapşırığı barədə heç nə bilmir. Bu normaldır, ona yalnız öz tapşırığının konteksti lazımdır:

Gözlənilən qovluq: locale-guide-label, budaq: fix/label.
Əvvəlcə faktiki qovluğu və budağı yoxla. Fərqlidirsə, dayan.
index.html faylını oxu.
Başlığın altındakı qeydi "Lokalların siyahısı: kod, dil və ölkə" ilə əvəz et.
Faylda başqa heç nəyi dəyişmə və mənə dəyişikliyi göstər.
İlk düzəlişdən əvvəl qovluğu yoxlayın

Claude Code-dan fayllara toxunmazdan əvvəl iş qovluğunu və cari budağı adlandırmasını istəyin, sonra cavabı planınızla tutuşdurun. Yanlış qovluqda başladılmış agent də düzgün qovluqdakı qədər inamla işləyir.

Düzəlişdən sonra hər iki terminalda git status və git diff əmrlərini yoxlayın: ikinci qovluqda yalnız index.html-dəki qeyd dəyişib, birincidə isə əvvəlki app.js dəyişikliyi qalır. Təkcə status fayl adlarını göstərir, amma onların məzmununun qorunduğunu sübut etmir. Dəqiq müqayisə üçün yoxlama vaxtı axtarış işini dayandırın. Əsas qovluğu onun terminalından yoxlayın, təcrid olunmuş sessiyadakı agentə ora keçməyi tapşırmayın. Səhifəni məhz ikinci qovluqdan açın, yoxsa əvvəlki qeydi görəcəksiniz.

Daha qısa yol da var. claude --worktree label-fix əmri iş qovluğunu özü yaradır və sessiyanı orada başladır. Cari sənədlərə görə qovluq repozitoriyanın içində, .claude/worktrees/label-fix/ yolunda yaranır, budaq worktree-label-fix adını alır, başlanğıc nöqtəsi isə sizin cari commit yox, uzaq repozitoriyadakı defolt budaq olur (adətən main). Uzaq repozitoriya tənzimlənməyibsə, başlanğıc nöqtəsi cari lokal commit olacaq. Deməli, bu, yuxarıdakı əmrdə açıq göstərilən main ilə eyni şey deyil, baxmayaraq ki sadə layihədə nəticə çox vaxt üst-üstə düşür. Defoltu tənzimləmə ilə dəyişmək olar; detalları öz versiyanızın sənədlərində yoxlayın.

Bu flaq baza sizə uyğun olanda və tapşırıq üçün tez ayrıca yer ayırmaq lazım olanda əlverişlidir. Onu artıq yaradılmış qovluğun içində işlətməyin: daha bir qovluq yaranacaq. Həmçinin .claude/worktrees/ yolunu .gitignore-a əlavə edin, yoxsa yeni qovluqların məzmunu əsas qovluqda izlənməyən fayllar kimi görünəcək.

Nələr ortaq qalır

Ayrıca qovluq ilk baxışda göründüyündən az şeyi ayırır:

AyrıdırOrtaqdırHeç ayrılmır
işçi fayllar, commit üçün hazırlıq, qovluğun cari budağıtarixçə, bütün budaqlar, repozitoriyanın tənzimləmələri, uzaq repozitoriyanın ünvanılokal server portları, xarici verilənlər bazası, bulud xidmətləri, prosesin diskin qalan hissəsinə çıxışı

Üçüncü sütun ən vacibidir və elə onu da tez-tez unudurlar. Worktree Git fayllarını ayırır, kompüteri isə təcrid etmir. Eyni portda iki lokal server yola getməz, xarici baza tənzimləmələrdə göstərilibsə, hər iki qovluğun sorğuları da eyni bazaya gedəcək. Claude Code-un ayrıca qovluqda işləyərkən apardığı yoxlamalar da onu bütün sistem üçün sandbox-a çevirmir.

İkinci qovluq seçilmiş commit-in fayllarını alır. Asılılıqlar və lokal tənzimləmələr Git-də saxlanmırsa, mühiti adətən ayrıca hazırlamaq lazımdır; əlavə vasitələr bu prosesi avtomatlaşdıra bilər. .env faylını düşünmədən köçürməyin: eyni giriş məlumatları hər iki işə salmanı bir xidmətə yönəldə bilər. Bizim statik arayışımıza nə server, nə də məxfi məlumatlar lazımdır, səhifə fayl kimi açılır.

Nəticəni saxlayın və köçürün

B qovluğunda qeydi brauzerdə yoxlayın, git diff-ə baxın və yalnız lazım olan faylı commit edin:

git add index.html
git diff --cached
git commit -m "fix: correct locale list label"

Commit-dən əvvəl yalnız lazım olan dəyişikliyin hazırlandığına əmin olun. git diff --cached başqa dəyişikliklər göstərirsə, əvvəlcə onları aydınlaşdırın.

Commit ortaq repozitoriyaya düşüb və əsas qovluqdan da görünür. Amma o, öz-özünə nə main-ə, nə də feature/search-ə keçib: öz budağındadır və onu birləşdirmək qərarınızı gözləyir.

Nəticəni yalnız A tapşırığı bitəndə və ya heç olmasa saxlananda, əsas qovluq da təmiz olanda köçürün. Axtarış yarımçıqkən main-ə keçməyin, əvvəlcə onu yoluna qoyun. Əsas qovluq təmiz olanda:

git checkout main
git merge fix/label
Fast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Bu çıxış main-in fix/label yaradıldıqdan sonra dəyişmədiyi vəziyyətə uyğundur. Git konflikt barədə məlumat versə, dayanın və onu birləşdirmə qaydalarına uyğun həll edin. Bu ayrıca mövzudur və "Git-də budaqlar və birləşdirmə" məqaləsində izah olunur. Birləşdirmədən sonra səhifəni yenidən açın: qeyd yenilənməli, lokalların siyahısı isə əvvəlki kimi qalmalıdır. feature/search budağı bundan yenilənməyib: axtarışa davam etməzdən əvvəl main-dəki düzəlişi ora köçürməyin lazım olub-olmadığına qərar verin.

Lazımsız qovluğu silin

Əvvəlcə ikinci qovluqdakı sessiyanı və başladığınız bütün prosesləri bağlayın. Sonra orada lazım olan nəyinsə qalıb-qalmadığını yoxlayın:

git -C ../locale-guide-label status --short --ignored

Dəyişdirilmiş və yeni fayllar dərhal görünür, ignore edilənləri isə --ignored flaqı göstərir. Lokal tənzimləmələr və qeydlər çox vaxt məhz onların arasında olur. Nəticənin lazımi budaqda saxlandığına əmin oldunuzsa, qovluğu əsas qovluqdan silin:

git worktree remove ../locale-guide-label
git worktree list

İzlənən dəyişdirilmiş və ya ignore edilməyən yeni fayllar varsa, Git adətən qovluğu silməkdən imtina edir:

fatal: '../locale-guide-label' contains modified or untracked files, use --force to delete it

Mesajdakı tövsiyəni ilk addım kimi yerinə yetirməyin. Faylları yoxlayın və lazım olanları saxlayın. Silinmədən sonra commit edilməmiş məlumatları Git vasitələri ilə bərpa etmək mümkün olmaya bilər. Git-in imtinasına tam qoruma kimi güvənməyin: ignore edilən fayllar --force olmadan da silinə bilər, ona görə onları ayrıca yoxladıq.

Burada asanlıqla səhv salına bilən daha bir detal var. Git əmri iş qovluğunu silir, amma budağı yox: fix/label ondan sonra da git branch siyahısında qalacaq. Bu, rahatdır: nəticə heç yerə itməyib. Budaq həqiqətən lazım olmayanda və içindəki lazım olan hər şey birləşdiriləndə onu ayrıca addımla silin.

Claude Code dialoqu başqa üsuldur

--worktree ilə başladılmış sessiyadan çıxanda Claude Code qovluğu yoxlayır. Qovluqda dəyişiklik və yeni commit yoxdursa, sessiyanın da adı yoxdursa, heç nə soruşmadan qovluğu və budağı özü silir. İş varsa, qovluğu saxlamaq, yoxsa silmək istədiyinizi soruşacaq. Bu dialoqda silmək həm qovluğu, həm də onun yaratdığı budağı içindəkilərlə birlikdə aradan qaldırır. Bu, yuxarıdakı Git əmrindən fərqlənir. Nəticə lazımdırsa, "saxla" seçin və özünüz köçürün.

Qovluğu Git-dən yan keçib fayl meneceri ilə silməyin: repozitoriya onu mövcud hesab etməyə davam edəcək və worktree siyahısında artıq olmayan qovluq barədə qeyd qalacaq.

Claude Code-da ikinci tapşırığı necə aparmalı

Bütün ardıcıllıq altı addımdan ibarətdir:

  1. ikinci tapşırığı birincidən ayrıca adlandırın və onun hansı saxlanmış vəziyyətdən başlayacağına qərar verin;
  2. açıq baza göstərərək iş qovluğu yaradın və ya defolt sizə uyğundursa claude --worktree başladın;
  3. nəyisə dəyişməzdən əvvəl yeni qovluqdakı yolu və budağı yoxlayın;
  4. sessiyaya yalnız bu tapşırığın kontekstini verin, qonşu tapşırığın tarixçəsini yox;
  5. düzəlişi elə oradaca yoxlayın və nəticəni commit edin;
  6. birləşdirmə barədə qərar verin və yalnız bundan sonra qovluğu silin.

Ayrıca qovluq kodu sizin əvəzinizə yoxlamır və işi qəbul etmir. O, sadəcə hər tapşırığa öz işçi fayllarını verir. Nümunəmizdə faydası aydındır: qeyd ayrıca düzəldilib yoxlanıb, yarımçıq axtarış isə birinci qovluqda qalıb.

Özünüzü yoxlayın

İkinci qovluqda commit edilməmiş axtarış yoxdur. Nəsə düz getməyib?
Xeyr, bu belə nəzərdə tutulub. Qovluq A tapşırığının cari fayllarından yox, main-dəki commit-dən yaradılıb. Commit edilməmiş dəyişikliklər öz qovluğunda qalır.

İki sessiya eyni qovluqda açıqdır. Tapşırıqlar ayrıdır?
Söhbətlər ayrıdır, fayllar isə ortaqdır. Tapşırıqlar eyni hissələrə toxunsa, dəyişikliklər qarışa bilər.

B budağında commit var, amma main-də qeyd görünmür.
Belə də olmalıdır: commit öz budağındadır. Başqa budaqları dəyişmir, bunun üçün birləşdirmə lazımdır.

İkinci lokal server eyni portda başlamır.
Ayrı qovluq portları ayırmır. Serveri başqa portda başladın.

Git iş qovluğunu silməkdən imtina etdi.
İmtinanın səbəbini oxuyun: saxlanmamış fayllardan başqa, qovluq kilidlənmiş və ya əsas iş qovluğu ola bilər. Lazım olanları saxlayın və vəziyyəti aydınlaşdırın. --force flaqını kor-koranə əlavə etməyin.

Əllə məşq etmək istəyirsinizsə, bir-iki commit-li ayrıca təlim repozitoriyası götürün: iki qovluq yaradın, yalnız ikincidəki mətni dəyişin, hər ikisini yoxlayın və artıq lazım olmayanı silin. Bunun üçün heç bir xidmət və hesab lazım deyil.