サーチ…


構文

  • 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コマンドを実行しないと、ガベージコレクタが起動され、セカンダリツリーへの参照が失われる可能性があります。中断することなく、最初から最後まで次の手順を実行します。

  1. ワークツリーの.gitファイルを変更して、メインツリー内の新しい場所を指すようにします。 /home/user/project-1/.gitファイルに次の内容が含まれているはずです:

    gitdir: /home/user/project-main/.git/worktrees/project-2
    
  2. メインワークブックの.gitディレクトリ内にあるワークツリーの名前を変更します。

    $ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
    
  3. /home/user/project-main/.git/worktrees/project-2/gitdir内の参照を新しい場所を指すように変更します。この例では、ファイルの内容は次のようになります。

    /home/user/project-2/.git
    
  4. 最後に、作業領域を新しい場所に移動します。

    $ 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を実行するのも安全です。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow