サーチ…
構文
- git worktree add [-f] [--detach] [--checkout] [-b <new-branch>] <path> [<branch>]
- git worktree prune [-n] [-v] [--expire <expire>]
- git worktree list [--porcelain]
パラメーター
パラメータ | 詳細 |
---|---|
-f --force | デフォルトでは、 <branch> が別の作業ツリーによってすでにチェックアウトされているときに、新しい作業ツリーを作成することを拒否します。このオプションは、そのセーフガードを無効にします。 |
-b <new-branch> -B <new-branch> | アドオンでは、という名前の新しいブランチを作成<new-branch> から始まる<branch> 、およびチェックアウト<new-branch> 新しい作業ツリーに。 <branch> が省略された場合、デフォルトはHEAD ます。既定では、 -b 、すでに存在する場合は新しいブランチの作成を拒否します。 -B このセーフガードを無効にし、 <new-branch> を<branch> にリセットします。 |
--detach | 追加すると、新しい作業ツリーにHEAD をデタッチします。 |
- [no-]チェックアウト | デフォルトでは、 <branch> add <branch> は<branch> チェックアウトしますが、 --no-checkout を使用してチェックアウトを抑制して、スパースチェックアウトの設定などのカスタマイズを行うことができます。 |
-n --dry-run | プルーンでは、何も除去しないでください。それが削除するものだけを報告してください。 |
- 磁器 | リストを使用すると、スクリプトの解析が容易な形式で出力されます。このフォーマットは、Gitバージョン間で、ユーザーの設定に関係なく安定しています。 |
-v --verbose | 剪定で、すべての除去を報告してください。 |
--expire <time> | プルーンでは、 <time> より古い未使用の作業ツリーを期限切れにします。 |
備考
詳細については、公式ドキュメントを参照してください: https : //git-scm.com/docs/git-worktree 。
ワークツリーの使用
あなたは新しい機能の作業の真っ只中です。あなたの上司はすぐに何かを修正するよう要求しています。通常は、 git stash
を使用して変更を一時的に保存することができます。しかし、現時点では、作業ツリーは混乱している(新しいファイル、移動されたファイル、削除されたファイル、その他のビットとピースが混在している)ので、進捗を妨げたくはありません。
ワークツリーを追加することによって、一時的にリンクされた作業ツリーを作成して緊急修正を行い、完了したら削除して以前のコーディングセッションを再開します。
$ git worktree add -b emergency-fix ../temp master
$ pushd ../temp
# ... work work work ...
$ git commit -a -m 'emergency fix for boss'
$ popd
$ rm -rf ../temp
$ git worktree prune
注:この例では、修正プログラムはまだ緊急修正ブランチにあります。この時点で、 git merge
またはgit format-patch
を実行した後、緊急修正ブランチを削除することをお勧めします。
ワークツリーの移動
現在(バージョン2.11.0以降)、既存のワークツリーを移動するための組み込み機能はありません。これは公式のバグとして記載されています ( https://git-scm.com/docs/git-worktree#_bugsを参照) 。
この制限を回避するために、 .git
参照ファイルで直接手動操作を実行することは可能です。
この例では、repoのメインコピーは/home/user/project-main
あり、セカンダリワークツリーは/home/user/project-1
あり、 /home/user/project-2
。
これらのステップの間でgitコマンドを実行しないと、ガベージコレクタが起動され、セカンダリツリーへの参照が失われる可能性があります。中断することなく、最初から最後まで次の手順を実行します。
ワークツリーの
.git
ファイルを変更して、メインツリー内の新しい場所を指すようにします。/home/user/project-1/.git
ファイルに次の内容が含まれているはずです:gitdir: /home/user/project-main/.git/worktrees/project-2
メインワークブックの
.git
ディレクトリ内にあるワークツリーの名前を変更します。$ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
/home/user/project-main/.git/worktrees/project-2/gitdir
内の参照を新しい場所を指すように変更します。この例では、ファイルの内容は次のようになります。/home/user/project-2/.git
最後に、作業領域を新しい場所に移動します。
$ mv /home/user/project-1 /home/user/project-2
すべてを正しく行った場合は、既存のワークツリーをリストすると、新しい場所を参照する必要があります。
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
git worktree prune
を実行するのも安全です。