gitは2つのブランチを同時に処理します


168

多くのブランチを持つプロジェクトがあります。

で切り替えずに、同時に複数のブランチで作業したいと思いgit checkoutます。

リポジトリ全体を別の場所にコピーする以外に、これを行う方法はありますか?



1
Git 2.5+(2015年第2四半期)は、新しいコマンドでこれを正式にサポートしgit checkout --to=<path>ます。以下の私の答えを参照しください。
VonC、2015年

2
実際、コマンドはgit worktree add <path> [<branch>](Git 2.5 rc2)
VonC

回答:


156

Git 2.5+(2015年第2四半期)はこの機能をサポートしています!

git repoがある場合はcool-app、cdしてroot(cd cool-app)に移動し、を実行しgit worktree add ../cool-app-feature-A feature/Aます。これにより、feature/A独自の新しい専用ディレクトリ内のブランチがチェックアウトされcool-app-feature-Aます。

これにより、古いスクリプトが置き換えられ、contrib/workdir/git-new-workdir「リンクされた」作業ツリーが実際にメインリポジトリの新しい$GIT_DIR/worktreesフォルダーに記録される(Windowsを含むすべてのOSで動作する)より堅牢なメカニズムが提供されます。

繰り返しになりますが、リポジトリを(のようなフォルダーに/path/to/myrepo)複製したら、メインツリーのリポジトリ履歴にリンクされた作業ツリーを保持しながら、異なる独立したパス(/path/to/br1/path/to/br2)の異なるブランチにワークツリーを追加できます(--git-dirオプションを使用する必要はありません)

詳細については、「Gitを使用した複数の作業ディレクトリ」を参照してください。

また、ワークツリーを作成したら、それを移動または削除できます(Git 2.17以降、2018年第2四半期を使用)。


2
これは、2.5.XがWindowsでも推奨されるバージョンであるため、新しい承認済みの回答になるはずです 。i.imgur.com
oQvUhVl.png

40

見てみましょう$ GIT_SRC_DIRに/ contrib / WORKDIR /のgit-新WORKDIRを

シンボリックリンクを使用して既存のリポジトリを指す作業ディレクトリを作成する簡単なスクリプト。これにより、異なる作業ディレクトリに異なるブランチを持つことができますが、すべて同じリポジトリからのものです。


そして、類似した:stackoverflow.com/questions/655202/...
東武

2
これは古いことですが、説明をお願いします。
dav_i 2013年


@StefanNäweああ、私は混乱しました-早すぎる...リンクで回答を更新しました。
dav_i 2013年



0

Gitは同時に複数のワークツリーをサポートします。詳細については、以下を参照してください。

IDを使用して複数のワークツリーをサポートすることは非常に困難です。たとえば、これはワークツリーをサポートするためのJGet(Eclipse ID)の拡張要求です。

そのため、多くの問題を抱えて手動で(コマンドラインで)プロジェクトを管理するか、IDEで単一のワークツリーを操作する必要があります。


今のところ、この答えは正しくありません。回答を更新してください。
narendra-choudhary

-2

実際のところ、Gitは、リポジトリー・ディレクトリー内にリポジトリー・データの作業コピーを1つだけ持つことをサポートしているためです。

2つの異なる作業コピーを使用して同じリポジトリにcommit / pullする場合は、ベアリポジトリを作成し、2つの作業コピーに複製できます。

何かを終えたら、単に「メイン」のベアリポジトリにプッシュするだけです。

いくつかのヒント:

man git-clone

git clone --bare


3
「Gitはリポジトリデータの作業用コピーを1つだけ持つことをサポートします」 -1正しくありませんgit-new-workdir。に関する回答を参照してください。
sleske

それはいい考えです。2回複製するだけです。
セルジヴィノグラドフ2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.