Jika Anda menggunakan sistem kontrol versi lain atau aplikasi desktop, ikuti instruksi untuk pengaturan Anda:
- Sistem kontrol versi lainnya: worktrees memerlukan repositori git; konfigurasikan hook untuk menggantikan logika git
- Aplikasi desktop: lihat Jalankan sesi dalam worktree-nya sendiri
Mulai Claude dalam worktree
Lewatkan--worktree atau -w dengan nama untuk membuat worktree terisolasi dan memulai Claude di dalamnya. Secara default, worktree dibuat di bawah .claude/worktrees/<name>/ di root repositori Anda, pada cabang baru bernama worktree-<name>:
bright-running-fox.
Jalankan interaktif memerlukan workspace trust: jika Anda belum menjalankan Claude di direktori sebelumnya, jalankan claude sekali di sana untuk menerima dialog kepercayaan, atau --worktree keluar dengan kesalahan yang meminta Anda untuk melakukannya. Jalankan non-interaktif dengan -p melewati pemeriksaan kepercayaan, jadi claude -p --worktree melanjutkan tanpanya.
Atur lingkungan worktree
Worktree adalah checkout segar, jadi inisialisasi lingkungan pengembangan Anda di sana: minta Claude untuk menginstal dependensi, atau jalankan setup proyek Anda sendiri di direktori worktree di bawah.claude/worktrees/. Untuk membawa file yang diabaikan git seperti .env ke setiap worktree baru secara otomatis, tambahkan file .worktreeinclude.
Minta Claude untuk membuat worktree
Anda juga dapat meminta Claude untuk “bekerja dalam worktree” selama sesi, dan itu membuat satu dengan toolEnterWorktree. Setelah berada dalam worktree, Claude dapat beralih langsung ke worktree lain di bawah .claude/worktrees/ dengan memanggil EnterWorktree dengan jalur target; worktree sebelumnya tetap berada di disk tanpa disentuh.
Saat Claude memasuki jalur di luar direktori .claude/worktrees/ repositori, Claude Code meminta persetujuan Anda terlebih dahulu. Perpindahan tersebut membawa direktori kerja sesi, akses tulis, dan konfigurasi proyek seperti CLAUDE.md dan pengaturan ke lokasi tersebut. Aturan izin EnterWorktree atau memilih “jangan tanya lagi” tidak menekan dialog izin ini; hanya mode bypassPermissions yang melewatinya.
Jalur hook tidak mengikuti worktree. Setelah Claude memasuki worktree, Claude Code menyimpan
${CLAUDE_PROJECT_DIR} dalam hooks Anda di mana itu berada dan melewatkan jalur worktree kepada mereka dengan cara berbeda:${CLAUDE_PROJECT_DIR}tetap di tempat: itu masih menunjuk ke root proyek di mana sesi dimulai, jadi perintah hook seperti${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.shmasih menjalankan skrip dalam checkout utama.cwdmengikuti Claude: fieldcwddalam input JSON hook adalah root worktree, dan itu bergerak lagi saat Claude menjalankancd. Bacanya saat hook memerlukan jalur worktree.
Claude tidak memiliki tool EnterWorktree
Jika Anda meminta Claude untuk bekerja dalam worktree dan Claude tidak memiliki tool EnterWorktree atau ExitWorktree, periksa apakah permissions.blockWritesOutsideWorkingDirectories aktif. Setelah key tersebut aktif, Claude Code menghapus kedua tool worktree atau menolak panggilan ke tool tersebut.
Anda tetap dapat bekerja dalam worktree selama key tersebut aktif:
- Sesi interaktif: mulai sesi dalam worktree dengan
claude --worktree. - Sesi latar belakang: Claude Code menolak pengeditan sesi latar belakang di checkout utama Anda hingga sesi tersebut memanggil
EnterWorktree, yang tidak dimilikinya. Salah satu dari cara berikut memungkinkan sesi untuk mengedit:- Mulai sesi dengan
claude --bg --worktree - Atur
worktree.bgIsolationke"none" - Minta Claude mengedit dalam worktree yang dibuat dengan
git worktree adddi bawah direktori tempat sesi dimulai
- Mulai sesi dengan
/status dalam sesi untuk menampilkan daftar sumber pengaturan yang dimuatnya, lalu hapus key tersebut dari setiap file yang mengaturnya. Kemudian mulai ulang Claude Code. Jika pengaturan terkelola mengatur key tersebut, tanyakan kepada administrator Anda apakah kebijakan tersebut perlu diubah.
Bersihkan worktrees
Saat Anda keluar dari sesi worktree interaktif, Claude memeriksa worktree untuk pekerjaan yang akan dihapus oleh penghapusan: file yang diubah atau tidak dilacak, pekerjaan yang tidak dikomitkan di dalam submodul yang diperiksa, dan commit baru. Aturan ini berlaku untuk worktrees yang Claude buat dengan git. Untuk worktree yang dibuat oleh hook WorktreeCreate Anda, lihat WorktreeRemove sebagai gantinya.- Worktree bersih: untuk sesi tanpa nama, Claude menghapus worktree dan cabangnya secara otomatis. Sesi bernama meminta Anda terlebih dahulu sehingga Anda dapat menyimpan worktree untuk nanti
- Worktree memiliki pekerjaan di dalamnya: Claude meminta Anda untuk menyimpan atau menghapus worktree. Menyimpan mempertahankan direktori dan cabang. Untuk kembali nanti, jalankan perintah
claude --worktree <name> --resumeyang dicetak Claude Code saat keluar. Menghapus menghapus direktori worktree dan cabangnya, bersama dengan semua pekerjaan di dalamnya - Branch lain sedang di-checkout: jika worktree berada pada branch selain branch miliknya sendiri yang memiliki commit melewati commit awal worktree, Claude meminta Anda untuk menyimpan atau menghapus worktree. Jawaban mana pun tetap menyimpan branch lain tersebut beserta commit-nya. Menghapus menghapus direktori worktree dan branch milik worktree itu sendiri, yaitu branch yang Claude buat bersamanya
- Status worktree tidak dapat diverifikasi: ketika Claude Code tidak dapat menghitung perubahan worktree atau tidak dapat memeriksa checkout submodulnya, Claude meminta Anda daripada menghapus worktree secara otomatis. Prompt tersebut menyebutkan apa yang tidak dapat diperiksa
-p tidak memiliki prompt keluar, jadi Claude tidak membersihkan worktrees mereka, dan Claude Code meninggalkan kunci yang diambilnya pada setiap satu saat pembuatan di tempat sampai sapuan kunci basi sesi nanti melepaskannya. Untuk menghapus satu, jalankan git worktree remove; jika git menolak karena worktree terkunci, jalankan git worktree unlock padanya terlebih dahulu.
Di Windows, menghapus worktree tidak menghapus file di luar itu. Jika folder di dalam worktree adalah tautan ke tempat lain, seperti junction NTFS atau symlink direktori, Claude Code hanya menghapus tautannya.
Lanjutkan sesi worktree
Saat Anda melanjutkan sesi yang berakhir di dalam worktree tanpa keluar darinya, Claude Code mengembalikan sesi ke worktree itu. Ini berlaku untuk resume interaktif, untuk--continue dan --resume dalam mode non-interaktif dengan -p, dan untuk Agent SDK. --continue memilih sesi paling baru yang tercatat di bawah direktori tempat Anda meluncurkan. Kembali di dalam worktree, Claude dapat keluar dengan tool ExitWorktree jika sesi memiliki tool tersebut.
Sebelum mengembalikan sesi ke worktree-nya, Claude Code memverifikasi bahwa worktree masih merupakan checkout terpisah dari yang utama, dan menolak untuk memasuki kembali worktree yang gagal pemeriksaan. Untuk git worktree, pemeriksaan membaca metadata git-nya. Worktree tanpa metadata git, seperti yang dibuat hook WorktreeCreate, dapat lulus pemeriksaan; kasus yang Claude Code masih tolak tercantum dengan pemulihan mereka di bawah Claude Code refuses to use a worktree. Untuk pesan dan cara memulihkan dari masing-masing, lihat The session resumes outside its worktree.
Di mana Anda meluncurkan, dan bagaimana Anda melanjutkan, mengubah apa yang Claude Code masuki kembali:
- Direktori peluncuran: lanjutkan dengan
--resumedari checkout utama atau direktori lain dari repositori. Claude Code memasuki kembali worktree yang dibuat dengan git di bawah.claude/worktrees/bahkan saat Anda meluncurkan dari dalamnya. Saat Anda meluncurkan dari dalam worktree lain, Claude Code memasuki kembali hanya jika dapat menjaminnya dari sana: worktree yang merupakan repositorinya sendiri, satu tanpa metadata git, atau peluncuran dari subdirektori worktree yang Anda buat dengangit worktree addmenolak, jadi luncurkan dari checkout utama. --fork-session: sesi yang di-fork dimulai di direktori tempat Anda meluncurkan Claude, dan Claude Code meninggalkan worktree sesi asli tanpa disentuh.- Worktree yang dihapus: jika direktori worktree tidak lagi ada, Claude Code melanjutkan sesi di direktori tempat Anda meluncurkan Claude. Itu memberi tahu Anda worktree hilang dan menghapus pengikatan worktree sesi.
Sebelum v2.1.212, resume non-interaktif tetap berada di direktori awal dan
ExitWorktree melaporkan bahwa tidak ada sesi worktree aktif untuk keluar./cd melakukannya, jadi /desktop dan --resume menemukannya di sana. Keluar memindahkannya kembali dengan cara yang sama. Worktree yang dibuat oleh hook WorktreeCreate menyimpan transkrip di direktori peluncuran.
Cara Claude Code menerapkan isolasi
Selama sebuah sesi diisolasi dalam worktree, Claude Code memblokir panggilan tool yang didefinisikan oleh pemeriksaan di bawah ini. Aturan yang sama berlaku baik Anda memulai sesi dengan--worktree, Claude memasuki worktree dengan EnterWorktree, maupun Anda melanjutkan sesi worktree.
Penerapan yang sama mencakup setiap subagent yang dibuat Claude dari sesi yang terisolasi. Penerapan ini berlaku baik sesi tersebut interaktif maupun berjalan di latar belakang. Subagent yang berjalan di worktree mereka sendiri membawa pemeriksaan yang sama. Riwayat versinya ada di bagian Menulis file subagent.
Claude Code menerapkan empat pemeriksaan:
- Pengeditan file: Claude Code memblokir
Edit,Write, atauNotebookEdityang menargetkan path di checkout utama. Untuk mengubah file di checkout utama, edit sendiri file tersebut atau mulai sesi interaktif di sana. - Direktori kerja perintah: Claude Code memblokir perintah Bash, PowerShell, atau Monitor yang direktori kerjanya di-resolve ke checkout utama, atau yang direktori kerjanya tidak dapat diverifikasi tetap berada di luarnya.
- Pengalihan Git: Claude Code memblokir perintah Bash atau Monitor yang mengalihkan git ke checkout utama. Pengalihan tersebut dapat terjadi melalui
git -C,--git-dir, variabelGIT_DIRatauGIT_WORK_TREE, ataucdke checkout utama sebelum menjalankan git. - Bentuk perintah: Claude Code memblokir perintah Bash atau Monitor ketika tidak dapat memverifikasi dari teks perintah bahwa setiap git yang dijalankan perintah tersebut tetap berada di dalam worktree. Hal ini terjadi, misalnya, ketika nama perintah dihitung saat runtime, ketika sintaksisnya tidak dapat di-parse, atau ketika ekspansi seperti
${!name}atau${ command; }dapat menjalankan perintah yang tidak tertulis secara eksplisit dalam teks. Claude Code memberi tahu Claude cara menulis ulang perintah yang ditolak, misalnya dengan memecahnya menjadi perintah-perintah sederhana yang terpisah. Anda tidak dapat mematikan pemeriksaan ini.
cp atau pengalihan shell, tidak ditolak oleh pemeriksaan tersebut. Claude Code memperlakukan perintah tersebut seperti perintah shell lainnya di bawah pengaturan izin dan sandboxing Anda.
Pemeriksaan ini berlaku untuk repositori tempat Anda meluncurkan Claude Code. Pemeriksaan ini juga mencakup checkout utama yang ditautkan dengan worktree tertaut. Untuk perintah PowerShell, Claude Code hanya menerapkan pemeriksaan direktori kerja.
Claude melihat setiap penolakan sebagai error tool yang menyebutkan nama worktree dan menjelaskan cara melanjutkan. Untuk perintah yang ditolak, lihat arti pesan penolakan dan cara mengatasinya.
Isolasi subagents dengan worktrees
Subagents dapat berjalan dalam worktrees mereka sendiri sehingga edit paralel tidak bertabrakan. Minta Claude untuk “gunakan worktrees untuk agen Anda”, atau buat isolasi permanen untuk subagent kustom dengan menambahkanisolation: worktree ke frontmatter-nya.
Subagent ini di .claude/agents/ selalu berjalan dalam worktree-nya sendiri:
--worktree, jadi mereka membuat cabang dari cabang default repositori Anda kecuali worktree.baseRef diatur ke "head".
Subagent dalam worktree-nya sendiri mengambil file instruksi yang dimuat saat mulai dari percakapan utama Anda, bukan dari worktree-nya. Saat worktree tersebut berada di lokasi default di bawah .claude/worktrees/, subagent juga tidak memuat file CLAUDE.md atau direktori .claude/rules/ di root worktree saat membaca file di sana, meskipun keduanya berbeda pada branch worktree tersebut.
Bersihkan subagent dan worktrees sesi latar belakang
Claude Code menjalankan sapuan berkala yang menghapus worktrees yang dibuat Claude untuk subagents dan sesi latar belakang setelah mereka lebih tua dari pengaturancleanupPeriodDays Anda, mengikuti aturan sapuan retensi.
Saat Anda mengirim ke latar belakang sesi --worktree, worktree-nya menjadi worktree sesi latar belakang yang dapat dihapus sapuan. Sapuan meninggalkan worktree di tempat dalam kasus ini:
- Worktree masih menyimpan pekerjaan: file yang diubah atau tidak dilacak, atau commit yang belum didorong.
- Submodul yang diperiksa dalam worktree menyimpan file yang diubah atau tidak dilacak, atau Claude Code tidak dapat memeriksa submodul worktree. Pemeriksaan ini memerlukan Claude Code v2.1.274 atau lebih baru.
- Salah satu dari empat kasus yang juga memblokir pembuatan worktree berlaku: Claude Code tidak dapat menentukan driver filter mana yang didefinisikan konfigurasi repositori, atau menemukan pengaturan di sana yang tidak dapat dimatikan.
- Worktree milik sesi
--worktreeyang belum Anda kirim ke latar belakang, apa pun usianya. - Anda membuat worktree sendiri dengan
git worktree add, bahkan jika Anda kemudian menjalankan sesi--worktree <name>di dalamnya dan mengirimnya ke latar belakang.
WorktreeCreate.
Kunci worktree dan penghapusan manual
Saat agen berjalan, Claude Code menyimpangit worktree lock pada worktree-nya sehingga pembersihan bersamaan tidak dapat menghapusnya, dan melepaskan kunci saat agen selesai. Claude Code menyimpan kunci yang sama pada worktree yang dibuat untuk sesi yang dikirim ke latar belakang saat sesi berjalan, jadi sapuan meninggalkan worktree di tempat dan git worktree remove menolak untuk menghapusnya.
Sapuan juga melepaskan kunci yang Claude Code atur untuk sesi yang prosesnya telah keluar, jadi sesi latar belakang yang terbunuh tidak meninggalkan worktree-nya terkunci secara permanen. Sapuan tidak pernah melepaskan kunci yang Anda atur sendiri dengan git worktree lock.
Untuk membersihkan worktree yang disimpan sapuan, jalankan git worktree remove, tambahkan --force jika worktree memiliki perubahan yang belum dikomit atau file yang tidak dilacak. Jika git menolak karena worktree terkunci, jalankan git worktree unlock padanya terlebih dahulu.
Menyesuaikan pembuatan worktree
Default Claude Code untuk membuat worktree sudah mencakup sebagian besar sesi: Claude Code membuatnya di bawah.claude/worktrees/, membuat branch-nya dari branch default repositori Anda, dan hanya melakukan checkout file yang dilacak. Opsi di bagian ini mengubah default tersebut.
Memilih branch dasar
Worktree baru dibuat dari branch default repositori, sehingga sebagian besar sesi tidak memerlukan pengaturan ini. Aturworktree.baseRef di pengaturan untuk membuat branch dari pekerjaan Anda saat ini. Pengaturan ini menerima dua nilai:
"fresh"(default): membuat branch dari branch default repositori di remote, biasanyamain, sehingga worktree dimulai dari tree yang bersih dan sesuai dengan remote."head": membuat branch dariHEADlokal Anda saat ini, sehingga worktree membawa commit Anda yang belum di-push dan status feature branch Anda. Gunakan ini saat mengisolasi subagent yang perlu bekerja pada pekerjaan yang sedang berlangsung. Di dalam worktree,"head"di-resolve keHEADmilik worktree tersebut, bukan milik checkout utama.
worktree.baseRef ke nama branch. Untuk memulai worktree dari branch tertentu yang sudah ada, buat worktree tersebut langsung dengan git.
Untuk basis "fresh", Claude Code menjaga origin/HEAD tetap terbaru:
- Jika repositori belum di-fetch dalam 24 jam terakhir, Claude Code melakukan fetch branch default, dibatasi lima detik, dan menggunakan ref yang di-cache secara lokal jika fetch gagal.
- Fetch tidak pernah menunggu input di terminal Anda. Fetch juga dianggap gagal jika git atau ssh akan meminta kata sandi, passphrase kunci, atau konfirmasi host SSH baru.
- Jika tidak ada remote yang dikonfigurasi, atau
origin/HEADtidak di-cache secara lokal dan tidak dapat di-fetch, worktree akan kembali menggunakanHEADlokal Anda saat ini.
Membuat branch dari pull request
Untuk membuat branch dari pull request atau merge request tertentu, berikan kepada--worktree nomornya dengan awalan #, URL pull request GitHub, atau URL merge request GitLab seperti https://gitlab.com/group/repo/-/merge_requests/123. Claude Code melakukan fetch commit head dari perubahan tersebut dari origin dan membuat worktree di .claude/worktrees/pr-<number>. Beri tanda kutip pada argumen agar shell Anda tidak memperlakukan # sebagai awal komentar:
origin repositori Anda, dan memilih jalur fetch berdasarkan host origin:
- github.com: melakukan fetch
pull/<number>/head - gitlab.com: melakukan fetch
merge-requests/<number>/head - GitHub Enterprise, GitLab yang dikelola sendiri, atau host lainnya: mencoba
pull/<number>/headterlebih dahulu, lalumerge-requests/<number>/head
Error creating worktree: Failed to fetch PR/MR #<number>. Kunci yang disimpan oleh ssh-agent tetap berfungsi, jadi muat kunci Anda di sana dan jalankan git fetch sekali secara manual untuk mencatat host baru sebelum Anda memulai.
Sebelum v2.1.233, Claude Code hanya menerima #<number> dan URL pull request bergaya GitHub untuk --worktree, dan selalu melakukan fetch pull/<number>/head.
Menyalin file yang di-gitignore ke worktree
Worktree adalah checkout baru, sehingga file yang tidak dilacak seperti.env atau .env.local dari repositori utama Anda tidak ada di dalamnya. Untuk menyalinnya secara otomatis saat Claude membuat worktree, tambahkan file .worktreeinclude ke root proyek Anda.
File ini menggunakan sintaks .gitignore. Hanya file yang cocok dengan pola dan juga di-gitignore yang disalin, sehingga file yang dilacak tidak pernah diduplikasi.
Jika Anda menulis pola yang diawali dengan **/ dan file yang Anda inginkan berada di dalam direktori yang di-gitignore secara keseluruhan, Claude Code hanya menyalinnya jika direktori itu sendiri cocok dengan pola, atau jika nama pertama setelah **/ adalah salah satu nama di jalur direktori tersebut. Misalnya, jika Anda menulis **/.claude/skills/*.md, nama pertamanya adalah .claude, sehingga Claude Code menyalin file yang cocok dari direktori .claude/ yang diabaikan. Untuk menyalin file dari direktori yang diabaikan yang tidak dijangkau oleh pola **/, sebutkan nama direktori tersebut dalam pola: tulis vendor/**/config.json alih-alih **/config.json. Sebelum v2.1.239, Claude Code menyalin file dari direktori yang diabaikan secara keseluruhan untuk pola **/ hanya jika direktori itu sendiri cocok dengan pola.
.worktreeinclude ini menyalin dua file env dan sebuah konfigurasi rahasia ke setiap worktree baru:
.worktreeinclude
--worktree, worktree subagent, dan sesi paralel di aplikasi desktop. Dengan hook WorktreeCreate, salin file-file tersebut di dalam skrip hook.
Menggunakan kembali nama worktree
Jika worktree dengan nama yang Anda berikan ke--worktree sudah ada, Claude Code membukanya alih-alih membuat yang baru. Jika Claude Code berhenti dengan error yang berisi belongs to a different repository atau is a leftover worktree, lihat Direktori worktree belongs to a different repository.
Dengan basis default "fresh", worktree yang dibuka kembali akan di-reset ke branch default repositori alih-alih melanjutkan dari ujung lamanya jika semua kondisi berikut terpenuhi:
- Worktree tidak memiliki perubahan yang belum di-commit atau file yang tidak dilacak.
- Worktree masih berada di branch yang dibuat Claude Code untuknya.
- Worktree tidak memiliki commit sendiri, atau pull request atau merge request-nya sudah di-merge dan branch remote-nya sudah dihapus.
- Worktree tidak memenuhi salah satu kondisi tersebut.
- Claude Code tidak dapat memverifikasi status worktree.
worktree.baseRefbernilai"head".- Nama tersebut merupakan referensi pull request atau merge request.
Mengganti pembuatan worktree dengan hook
Konfigurasikan hookWorktreeCreate untuk sepenuhnya mengganti logika git worktree default, termasuk menempatkan worktree di lokasi selain .claude/worktrees/. Untuk contoh lengkap, lihat Kontrol versi non-git.
Apa yang dibagikan worktrees dengan checkout utama
Worktree mendapatkan file dan cabang sendiri, tetapi berbagi hal-hal berikut dengan checkout utama:-
Direktori
.gitrepositori: perintah git dalam worktree menulis ke direktori.gitbersama milik repositori utama. Dengan sandbox diaktifkan, perintah sepertigit commitbekerja dalam sesi di root worktree, yaitu tempat--worktreememulai sesi. Secara default, perintah tersebut gagal dengan errorindex.lockjika Anda menjalankanclaudedi subdirektori worktree. - Plugins: plugin yang diinstal pada cakupan proyek dari checkout utama juga dimuat dalam worktrees dari repositori yang sama, jadi Anda tidak perlu menginstal ulang per worktree.
-
Persetujuan izin: memilih “Yes, and don’t ask again” untuk perintah Bash dalam sesi worktree menyimpan aturan ke
.claude/settings.local.jsoncheckout utama. Aturan tersebut berlaku dalam checkout utama dan di setiap worktree lain dari repositori, dan tetap bertahan setelah worktree dihapus. Di Windows dan dalam kasus lain di mana Claude Code tidak menggunakan root repositori, aturan tetap dengan worktree itu. Lihat di mana persetujuan disimpan. -
Skills, agents, dan commands yang tidak dilacak: ketika checkout worktree tidak memiliki direktori
.claude/skillsdi akarnya, misalnya karena.claude/skillsAnda diabaikan oleh git, Claude Code memuat project skills checkout utama dalam sesi worktree. Dalam worktree dengan direktori.claude/skillssendiri, hanya salinan itu yang dimuat. Pembacaan yang sama mencakup.claude/agentsdan.claude/commands. Untuk skills, pembacaan memerlukan Claude Code v2.1.277 atau lebih baru.
--worktree maupun dengan git worktree add.
Dalam sesi worktree yang Anda mulai dari aplikasi desktop, Claude Code membaca konfigurasi proyek seperti pengaturan, hook, skill, agent, perintah, dan server .mcp.json dari root checkout utama. Perintah hook dijalankan di root tersebut, dan ${CLAUDE_PROJECT_DIR} menunjuk ke sana. Untuk menjangkau file yang sedang dikerjakan Claude, baca path worktree dari kolom input cwd milik hook. File CLAUDE.md dan .claude/rules/ tetap dimuat dari worktree.
Kelola worktrees secara manual
Buat worktrees dengan Git secara langsung saat Anda perlu checkout cabang yang ada tertentu atau menempatkan worktree di luar repositori. Buat worktree pada cabang baru:fix-issue-456 dengan cabang yang sudah ada dalam repositori Anda:
Non-git version control
Isolasi worktree menggunakan git secara default. Untuk SVN, Perforce, Mercurial, atau sistem lainnya, konfigurasikan hookWorktreeCreate dan WorktreeRemove untuk menyediakan logika pembuatan dan pembersihan kustom. Karena hook menggantikan perilaku git default, .worktreeinclude tidak diproses saat Anda menggunakan --worktree. Salin file konfigurasi lokal apa pun di dalam skrip hook Anda.
Hook WorktreeCreate ini membaca nama worktree dari JSON pada stdin dengan jq, checkout salinan kerja SVN segar, dan mencetak jalur direktori sehingga Claude Code dapat menggunakannya sebagai direktori kerja sesi. Tambahkan konfigurasi ke settings.json Anda:
WorktreeRemove untuk membersihkan saat sesi berakhir. Lihat referensi hooks untuk skema input dan contoh penghapusan.
Hook WorktreeCreate juga memungkinkan Anda menjalankan /batch di luar repositori git. Setiap subagent /batch kemudian menerbitkan perubahannya dengan perintah kontrol versi proyek Anda dan, ketika tidak dapat membuka pull request, melaporkan apa yang diterbitkannya. Menjalankan /batch di luar repositori git memerlukan Claude Code v2.1.281 atau lebih baru.
Pemecahan masalah
Claude Code melaporkan error di bawah ini saat membuat worktree, masuk ke worktree saat startup, atau mengembalikan sesi yang dilanjutkan ke worktree.Claude Code tidak dapat masuk ke worktree saat startup
Ketika Claude Code tidak dapat masuk ke direktori worktree saat startup, Claude Code mencetak error yang menyebutkan path tersebut dan keluar dengan kode 1. Hal ini dapat terjadi ketika hookWorktreeCreate mencetak sesuatu selain direktori yang dibuatnya, atau ketika direktori tersebut dihapus setelah disiapkan.
Pembuatan worktree gagal pada path symlink
Claude Code menolak membuat worktree ketika.claude, .claude/worktrees, atau direktori worktree itu sendiri adalah symlink, dan error tersebut menyebutkan path symlink tersebut. Hapus symlink tersebut dan coba ulang. Sebelum v2.1.212, jika repositori sudah berisi symlink yang di-commit pada salah satu path tersebut, pembuatan worktree mengikutinya dan dapat membuat file di luar repositori.
Worktree yang dibuat Claude Code berisi konten asli dari objek yang diganti
Jika repositori Anda menggunakangit replace, file di dalam worktree yang dibuat Claude Code berisi konten objek asli, bukan pengganti yang disebutkan oleh entri refs/replace/ Anda. Claude Code menjalankan perintah git yang melakukan checkout file worktree dengan GIT_NO_REPLACE_OBJECTS=1, mengabaikan nilai apa pun yang Anda ekspor untuk variabel tersebut.
Untuk mendapatkan konten pengganti, buat worktree sendiri dengan git worktree add dan jalankan Claude Code di dalamnya.
File Git LFS berupa file pointer di worktree yang dibuat Claude Code
Jika Anda menyiapkan Git LFS dengangit lfs install --local, worktree yang dibuat Claude Code berisi file pointer LFS, bukan file yang sebenarnya. Flag --local menulis filter LFS ke dalam .git/config milik repositori itu sendiri, bukan ke konfigurasi git global Anda. Perintah git lfs install biasa menulis ke konfigurasi global Anda dan tidak terpengaruh. Hal yang sama berlaku untuk filter driver lain yang didefinisikan dalam konfigurasi milik repositori itu sendiri.
Claude Code melewati filter driver milik repositori itu sendiri saat membuat worktree karena filter driver adalah perintah shell, dan apa pun yang dapat menulis ke repositori, termasuk Claude, bisa saja menaruhnya di sana. Sebelum v2.1.247, Claude Code menjalankan driver tersebut selama pembuatan worktree.
Untuk mendapatkan file yang sebenarnya, jalankan git lfs pull di dalam worktree.
Dalam empat kasus yang jarang terjadi, Claude Code sama sekali tidak membuat worktree: Claude Code tidak dapat menentukan filter driver mana yang didefinisikan oleh konfigurasi repositori, atau Claude Code menemukan pengaturan di sana yang tidak dapat dinonaktifkannya. Cocokkan error dengan perbaikannya:
Could not read the repository git config to neutralize filter drivers: Claude Code tidak dapat membaca.git/configmilik repositori, misalnya karena permission-nya. Perbaiki hal tersebut dan coba ulang.The repository git config defines a filter driver whose name cannot be neutralized (contains "=" or a newline): ganti nama atau hapus filter driver tersebut di.git/configdan coba ulang.The repository git config has a conditional include (includeIf): pindahkan pengaturan yang dimuat olehincludeIfdi.git/configlangsung ke dalam file tersebut, hapusincludeIf, dan coba ulang.includeIfdi konfigurasi git global Anda tidak memicu hal ini.Git was not run: the repository's own git config sets <key>: pesan tersebut menyebutkan key yang mengarahkan Git LFS ke program yang akan dijalankan, sepertilfs.customtransfer.<name>.pathataulfs.standalonetransferagent. Jika pengaturan tersebut milik Anda, pindahkan ke konfigurasi git global Anda. Jika Anda tidak mengenalinya, hapus dari konfigurasi git repositori, karena tool atau checkout yang tidak Anda percayai mungkin telah menulisnya. Coba ulang setelah key tersebut hilang dari konfigurasi repositori.
Pembuatan worktree gagal pada partial clone
Error yang berisiThis repository is a partial clone berarti Claude Code tidak dapat mengambil setiap objek git yang dibutuhkan commit awal worktree. Lakukan langkah dalam kalimat pesan yang diakhiri dengan try again. Kemudian coba ulang dari shell tempat Anda melakukannya: jalankan claude --worktree, atau jalankan claude di sana dan minta lagi.
Can only use --worktree in a git repository
Error ini berarti Anda memberikan --worktree di direktori yang bukan checkout git, dan tidak ada hook WorktreeCreate yang aktif.
- Di folder tanpa version control, jalankan
git initdi sana, buat commit pertama, lalu coba ulang. - Di checkout dari sistem version control lain, siapkan hook yang disarankan pesan tersebut.
- Untuk bekerja langsung di direktori tersebut, jalankan Claude tanpa
--worktree.
Direktori worktree belongs to a different repository
Error belongs to a different repository dan is a leftover worktree keduanya berarti git mengaitkan direktori untuk nama worktree yang Anda berikan dengan lokasi lain. Hal ini dapat terjadi setelah Anda menyalin atau memindahkan proyek.
Berikan nama worktree yang berbeda. Jika direktori tersebut tidak berisi pekerjaan yang perlu disimpan dan Anda tidak menyalin atau memindahkan proyek, Anda dapat menghapusnya dan mencoba ulang dengan nama yang sama. Setelah menyalin atau memindahkan proyek, percobaan ulang tersebut dapat gagal dengan is already checked out elsewhere in this repository, jadi gunakan nama yang berbeda.
Claude Code menolak menggunakan worktree
Error yang diawali denganRefusing to use <path> as an isolation worktree berarti Claude Code memeriksa identitas git direktori tersebut sebelum mengadopsinya sebagai checkout terisolasi untuk sesi atau subagent, lalu menolaknya. Pemeriksaan ini berjalan baik saat Claude Code membuat worktree, masuk ke worktree yang sudah ada, maupun menggunakan kembali worktree dari eksekusi sebelumnya.
Dalam sebagian besar kasus, sisa pesan menyatakan bahwa metadata git direktori tersebut di-resolve ke checkout utama: misalnya, file .git-nya menunjuk ke direktori .git milik repositori utama, atau git me-resolve working tree-nya ke checkout utama melalui pengalihan core.worktree. Dari direktori seperti itu, perintah git biasa seperti git reset --hard akan bekerja pada checkout utama, bukan pada worktree. Claude Code juga menolak ketika direktori memiliki entri .git yang tidak dapat dibacanya, alih-alih berasumsi bahwa worktree tersebut aman.
Direktori yang sama sekali tidak memiliki metadata git, seperti direktori yang dibuat oleh hook WorktreeCreate Anda, lolos pemeriksaan hanya jika tidak ada repositori git yang memuatnya. Jika hook membuat direktori di dalam repositori, git me-resolve direktori tersebut ke checkout repositori itu dan Claude Code menolaknya dengan pesan git resolves its working tree to, jadi buat hook membuat direktorinya di luar repositori mana pun.
Claude Code membiarkan direktori yang ditolak tetap di tempatnya, karena mungkin berisi pekerjaan. Cocokkan pesan dengan pemulihannya, baik pesan tersebut muncul setelah Refusing to use <path> maupun dalam pesan resume; beberapa akhiran hanya muncul dalam pesan resume:
-
Menyebutkan
launch from the parent checkoutatauRun the resume from the project checkout: Anda menjalankan Claude Code dari dalam worktree. Jalankan dari checkout utama sebagai gantinya; worktree tidak perlu dibuat ulang. -
Menyebutkan
it cannot be resumed or re-entered: tidak ada apa pun dalam sesi ini yang menjamin worktree dari lokasi tempat Anda menjalankannya. Buat ulang worktree tersebut; direktori dan pekerjaannya tetap ada di disk untuk pemulihan manual, dan ketika worktree memiliki checkout induk, melanjutkan dari sana juga berhasil. -
Menyebutkan
it contains the protected checkout: direktori yang ditolak adalah induk dari checkout utama Anda, seperti direktori home Anda. Jangan menghapusnya. Ubah path worktree, seperti path yang dikembalikan hookWorktreeCreateAnda atau targetEnterWorktree, sehingga worktree tidak memuat checkout tersebut. -
Menyebutkan
the protected checkout <path> has a .git entry that could not be examinedatauhas git metadata that could not be resolved: masalahnya ada pada metadata git checkout utama, bukan milik worktree. Jangan menghapus worktree, dan abaikan saran di akhir pesan untuk membuatnya ulang, yang tidak berlaku untuk kedua akhiran ini. Perbaiki checkout utama, misalnya masalah permission atau penolakan gitdubious ownershippada.git-nya, lalu coba ulang. Sebelum v2.1.302, dengan git 2.56 atau lebih baru, akhirancould not be resolvedjuga muncul ketika<path>setelahthe protected checkoutberisi file.gityang tersesat. Tersesat di sini berarti path pada barisgitdir:file tersebut tidak mengarah ke repositori git yang valid. Untuk memulihkan, perbarui Claude Code dan coba ulang. Ketika pathgitdir:tersebut sudah tidak ada, Anda juga dapat menghapus file.gittersebut dan mencoba ulang. -
Menyebutkan
its recorded path has a network spelling: Claude Code tidak pernah melanjutkan ke worktree pada path jaringan. Buat ulang worktree di path lokal. -
Akhiran lainnya: pesan tersebut menyebutkan masalah dan perbaikannya, seperti menghapus pengalihan
core.worktreeatau membuat ulang worktree; ikuti petunjuk tersebut. Sebelum menghapus direktori yang pesannya menyatakan identitas git-nya tidak dapat diverifikasi, atasi terlebih dahulu penyebab yang disebutkan, misalnya symlink di path worktree atau git sendiri yang gagal berjalan, karena direktori tersebut mungkin dalam kondisi baik. Ketika Anda membuat ulang, selamatkan terlebih dahulu perubahan apa pun yang Anda perlukan dari direktori lama; direktori tersebut tetap ada di disk.
Sesi dilanjutkan di luar worktree-nya
Ketika Anda melanjutkan sesi secara interaktif dan Claude Code tidak dapat mengembalikannya ke worktree-nya, Claude Code memberi tahu hal tersebut dengan salah satu pesan di bawah ini. Ketika Claude Code menghapus pengikatan worktree, Claude Code mencatat penghapusan tersebut dalam transkrip sesi. Jika Anda menonaktifkan penulisan transkrip, pesan tersebut sebaliknya menyatakan bahwa pengikatan tidak dapat dihapus dan bahwa Claude Code akan memeriksa ulang worktree pada resume berikutnya.
Dalam mode non-interaktif dengan
-p, dan pada resume yang dijalankan oleh Agent SDK, Claude Code menghentikan resume dengan error stderr untuk setiap penolakan kecuali worktree yang sudah hilang, alih-alih melanjutkan tanpa isolasi.
Dengan --output-format stream-json, penolakan tersebut juga dikirim ke stdout sebagai pesan result dengan subtipe error_during_execution yang array errors-nya berisi teks yang sama, sehingga aplikasi Agent SDK menerima alasannya, bukan hanya exit non-zero. Sebelum v2.1.260, penolakan resume worktree tidak menghasilkan pesan result.
Pesan-pesan tersebut memiliki bentuk yang berbeda dari pesan interaktif dalam tabel:
-
Error: cannot resume into worktree <path>: ...This session was not started.untuk penolakan yang ditampilkan tabel sebagaiDid not re-enter. Claude Code menghapus pengikatan worktree sebelum keluar, dan error tersebut menyatakannya; saat berikutnya Anda melanjutkan percakapan, sesi berlanjut di direktori saat ini tanpa isolasi worktree. Sebelum v2.1.260, Claude Code tidak menulis pengikatan yang telah dihapus, sehingga setiap percobaan ulang resume yang sama gagal dengan error yang sama. Jika Anda menonaktifkan penulisan transkrip, penghapusan tersebut tidak dapat disimpan. Error tersebut kemudian menyatakan bahwa perintah yang sama akan ditolak lagi, dan menyebutkan--fork-sessionserta memulai percakapan baru sebagai cara untuk melanjutkan tanpa worktree. -
Error: could not verify worktree <path> for this resume, so the resume was aborted...untukCould not verify -
Error: ...The worktree binding is kept.untukCould not re-enter -
Notice: the worktree <path> for this session no longer exists...untuk worktree yang sudah hilang; Claude Code mencetaknya dan melanjutkan sesi, seperti halnya resume interaktif
startup_failure_reason bernilai worktree_unverified untuk error could not verify worktree dan worktree_resume_refused untuk error cannot resume into worktree dan The worktree binding is kept. Aplikasi dapat membuat percabangan berdasarkan nilai tersebut alih-alih mencocokkan teks error. Sebelum v2.1.274, hasil tersebut tidak memuat field startup_failure_reason.
Lihat juga
Worktrees menangani isolasi file. Halaman terkait di bawah mencakup pendelegasian pekerjaan ke checkout terisolasi itu, melewatkan temuan di antara mereka, dan beralih antar sesi yang Anda buat:- Subagents: delegasikan pekerjaan ke agen terisolasi dalam sesi
- Cross-session messaging: biarkan sesi dalam worktrees Anda melewatkan temuan satu sama lain
- Agent teams: koordinasikan beberapa sesi Claude secara otomatis
- Manage sessions: beri nama, lanjutkan, dan beralih antar percakapan
- Jalankan sesi Desktop di worktree-nya sendiri: sesi yang didukung worktree dalam aplikasi desktop