4

gitの「新しい」機能を調べていたのはworktree、私が通常直面している問題、つまり複数のブランチで同時に作業する必要性にうまく適合しているように見えるからです(それらのいくつかは短命ですが、他のものは本当に長命です)。

私は通常、 で数時間作業してから、release_a branch何かを修正してからrelease_x branch少し修正する必要がありrelease_h branchます。私は怠け者なので、Intellij を使用して git リポジトリの複数のコピーをセットアップすることになるので、あちこちでブランチを頻繁に切り替える必要はありません。

git のコマンドについて聞いたとき、worktreeまさに私が探していたものだと思いました。単一のレポに複数の作業ディレクトリを持たせる方法です。そして、大きなプラスとして、別のブランチにプルさせるためだけにブランチで何かを変更するたびに、実際にプッシュする必要がなくなることを意味します (たとえば、ホットフィックスの場合)。私はそれらをローカルにマージすることができました。

worktreegitの正しい理解はありますか?

私はそれで遊んでいますが、それが私の目的のためにどのように機能するかを実際に理解することはできません. デフォルトでは、ルートフォルダーにワークツリーが作成されるようですが、git add .同じフォルダーを作成するとコミットに含まれます。

これは、既存のブランチのワークツリーを作成する方法ですmy_branch(現在 @ であると仮定しますmaster)。

git worktree add my_branch my_branch

だから私の質問は2つあります:

  1. 長時間のブランチに複数のワークツリーを適用することは可能ですか/正しいですか、それとも一時的に意味のあることですか?
  2. 不要なワークツリーを適切に削除するにはどうすればよいですか?
  3. これらのワークツリーは、メインの git リポジトリの内部または外部に存在する必要がありますか?

ありがとう

4

1 に答える 1

2

そして、大きなプラスとして、別のブランチにプルさせるためだけにブランチで何かを変更するたびに、実際にプッシュする必要がなくなることを意味します (たとえば、ホットフィックスの場合)。私はそれらをローカルにマージすることができました。

すでにブランチをローカルでマージできます。最初に目的のブランチをチェックアウトするだけです。
同じレポの複数のローカル チェックアウト フォルダーがある場合、はい、それらの間でプッシュ/プルする必要があります。

を使用git worktreeすると、宛先ブランチのチェックアウト (マージを行うため) の代わりに、または同じリポジトリの別のチェックアウトされたフォルダーにプッシュする代わりに、 (既にチェックアウトされてcd /path/to/destination/branchいる場所で)する必要があります。

アイデアは次のとおりです。

  • /path/to/your/repo( master のようなブランチが 1 つチェックアウトされている場合)
  • /path/to/your/Branch1(レポのgit worktreeですが、テキストシンボリックリンクメカニズムを介してレポにリンクされています)
  • /path/to/your/Branch2、 ...等々。

次に、ドキュメントは明確です:

リンクされた作業ツリーが完成したら、単純に削除できます

リポジトリ内の作業ツリーの管理ファイル (以下の「詳細」を参照) は、最終的に自動的に削除されます (を参照gc.worktreePruneExpire) git-config。または、メインまたはリンクされた作業ツリーで
実行して、古い管理ファイルをクリーンアップすることもできます。git worktree prune

于 2016-01-11T07:02:11.147 に答える