10

私は現在、MATLAB / SPM8 で実行される独自のニューロ イメージング ツールボックスに取り組んでおり、リポジトリ内のほとんどのプログラム ファイルは MATLAB*.mファイルです。analysis現在のバージョンを使用して進行中の分析に使用する、さまざまな機能ブランチと 1 つのブランチがあります。同時に、私はmasterブランチとフィーチャー ブランチでコードを開発しており、それらは常にmasterブランチにマージされます。

問題は、私がanalysisブランチで実行している分析には多くの時間がかかり (数日もかかる)、その間はgit checkout masterまたはgit checkout new-feature. これは私の生産性を著しく制限します。

そのため、複数のブランチを同時に開いておくことはできないため、analysisブランチを開発リポジトリから独自のリポジトリに移動することを考えています。問題は、私が現在のブランチにgit init基づく新しいリポジトリである場合、(開発リポジトリの)現在のブランチから、新しい開発リポジトリの新しく開発されたコードを使用できるようにする方法があるかどうかです。分析リポジトリ?analysisgit mergemaster

4

2 に答える 2

9

git clone既存のリポジトリを新しいリポジトリに変更した場合、変更した参照 (ブランチ) を一致させるために、git pushまたは一方から他方へと変更できます。git fetchマージは含まれません。ディスク容量を節約するために、リポジトリのコンテンツは自動的にハードリンクされます。

--mirrorと のオプションを使用するgit clonegit push、リモート追跡ブランチを持つことを省略し、両方に同じブランチを持つだけになります。これは、より単純でより対称的ですが、git の従来の使用法ではありません。「チュートリアルに従う」シンプルさを最大限にするために、代わりに、--bare両方の作業リポジトリのクローンである 3 番目の「中央」リポジトリ (作成する必要があります) を配置します。

同じブランチで作業しているため、マージは必要ありません (実際にはマージではなく、古いブランチ ヘッドをその新しい子孫に置き換える「早送りマージ」を除く)。それらのコピーが 2 つあるだけです。分析が完了し、分析ブランチを更新できるようになったらgit merge --ff-only masteranalysis; 便利なリポジトリでこれを行うことができますが、git push other-repository.


もう 1 つのオプション (Git バージョン 2.5 以降) は、git worktree複数の独立した作業ツリーを許可するコマンドですgit checkout。これとクローンを作成する上記のオプションの違いは、ここではブランチのセットが 1 つしかないことです。

ただし、(バージョン 2.8 の時点で) これはまだ「実験的」機能と見なされており、その信頼性と有用性についてコメントするために個人的に使用したことはありません。

于 2012-05-19T14:08:55.837 に答える
2

Kevin Reid が説明したようにレポを複製する代わりに、レポgit-new-workdirの 2 つ目の作業コピーを作成するために使用することもできます。そうすれば、1 つの git リポジトリを共有するため、両方の作業コピーが常に自動的に同じブランチを認識します。

リポジトリのクローンを作成するよりも優れている点は、手動で同期/マージする必要がないことです。作業ディレクトリ A でコミットすると、そのコミットは作業ディレクトリ B (例: git log) に表示されます。

唯一の注意点: リポジトリを変更する場合 (コミット、リベース、ブランチのリセットなど)、同じブランチを他の作業ディレクトリにチェックアウトしないでください。そうしないと、git が少し混乱します ( git-new-workdir: Commitを参照)。作業ツリー A では、ツリー B で偽の変更が発生します )。

参照: 2 つのブランチで同時に作業する git

于 2012-06-29T10:42:51.527 に答える