Skip to content

feat: worktree の ignore ファイル引き継ぎに symlink モードを追加し既定化 - #45

Merged
takecchi merged 1 commit into
mainfrom
codiva/worktree-git-node-modules-gitignore-work
Jul 21, 2026
Merged

takecchi merged 1 commit into
mainfrom
codiva/worktree-git-node-modules-gitignore-work

Conversation

@takecchi

Copy link
Copy Markdown
Owner

概要

git worktree を切るとき、.gitignore された未追跡ファイル(node_modules/.env など)はこれまで常に 実体コピーfs.cp)でリポジトリルートから複製していました。node_modules/ が巨大だとこのコピーが重く、セッション起動が遅くなります。

引き継ぎ方法を設定 ignoredFiles で切り替えられるようにし、既定をシンボリックリンクに変更しました。

モード 挙動 メリット
symlink既定 元へシンボリックリンクを張るだけ(fs.symlink 複製コストゼロで即起動。実体は共有される
copy 実体を複製(fs.cp、従来の挙動) worktree が完全独立し作業が絶対に重複しない
none 何も引き継がない

変更点

  • src/core/worktree.ts: IgnoredFilesMode 型を追加。WorktreeOptions.copyIgnored(boolean)を ignoredFiles(3値、既定 'symlink')へ変更。
  • src/core/config.ts: 設定に ignoredFiles を追加+検証。設定→モードを解決する純関数 resolveIgnoredFilesMode() を追加。非推奨の copyIgnored は後方互換で解釈(truecopy / falsenoneignoredFiles があればそちら優先)。
  • src/utils/worktree-manager.ts: モードに応じて symlink / cp を切替。--directory が返す末尾 / を剥がしてから実体化(path.join が末尾スラッシュを保持し symlink が ENOENT になるため)。ベストエフォート(1件失敗で worktree 作成を止めない)は維持。
  • src/index.tsx: resolveIgnoredFilesMode(config) を注入。
  • README / ARCHITECTURE の設定ドキュメントを更新。

後方互換

  • ~/.codiva/config.json の既存 copyIgnored 設定はそのまま動作します(true→copy、false→none)。
  • 設定していない既存ユーザーは、次回から自動的に symlink モードになります。

テスト計画

  • resolveIgnoredFilesMode(既定・3値・copyIgnored 後方互換・優先順位)の単体テスト
  • toConfigignoredFiles 検証(有効値・不正値ドロップ・全キー統合)
  • WorktreeManager: symlink 既定(lstat でリンク確認+内容読み取り)/ copy モード(非リンク+独立性)/ none スキップ / .codiva 非リンク
  • npm run typecheck / npm run lint / npm test(677 tests pass)

git worktree 作成時、`.gitignore` された未追跡ファイル(node_modules/ や .env
など)の引き継ぎ方法を `ignoredFiles: 'symlink' | 'copy' | 'none'` で切り替え
られるようにする。既定を 'symlink' に変更。

- 'symlink'(既定): 元へリンクを張るだけで複製コストゼロ・即起動。実体共有。
- 'copy': 実体を複製し worktree 完全独立(従来の挙動)。大きいと重い。
- 'none': 引き継がない。

非推奨の `copyIgnored` は後方互換で解釈(true→copy / false→none)。
設定→モードの解決は純関数 resolveIgnoredFilesMode() に切り出し。
@takecchi
takecchi merged commit 320ff5a into main Jul 21, 2026
1 check passed
@takecchi
takecchi deleted the codiva/worktree-git-node-modules-gitignore-work branch July 21, 2026 02:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant