2012-05-19 14 views
9

私は現在MATLAB/SPM8で動作する自分のNeuroimagingツールボックスに取り組んでおり、リポジトリのほとんどのプログラムファイルはMATLAB *.mファイルです。私は異なる機能ブランチと1つのanalysisブランチを持っており、現在のバージョンを使用して継続的な分析に使用しています。同時に、私はmasterのコードを開発しており、そのブランチは常にmasterブランチにマージされています。複数の異なるバージョンのファイルを同時にgitで動かすには?

今の問題は、私はanalysisブランチで実行している分析は(何日も)多くの時間を取るか、そしてその時に私はgit checkout masterまたはgit checkout new-featureにできないんだけど、ということです。これは私の生産性を真剣に制限します。

複数のブランチを同時に開くことができないので、 analysisブランチを開発リポジトリから独自のリポジトリに移動することを考えています。問題は、もし私が今analysisブランチをベースにした新しいリポジトリgit initなら、何とか新しい方法で開発したコードを使うことができるように、現在はmasterブランチ(現在はmasterブランチ)からgit mergeへ新しい分析リポジトリのリポジトリ?

+3

、あなた* *同時に同時に開いて、いくつかの枝を維持することができます:[gitのは、同時に2つの枝に取り組ん](http://stackoverflow.com/questions/2048470/git-working - 同時に2つのブランチを同時に) – sleske

答えて

8

新しいリポジトリに既存のリポジトリgit cloneをお持ちの場合は、変更した参照(ブランチ)と一致するようにgit pushまたはgit fetchを1つずつ並べることができます。マージは必要ありません。リポジトリの内容は自動的にハードリンクされ、ディスク領域を節約します。

あなたはgit clonegit push--mirrorオプションを使用する場合は、リモート追跡ブランチを持つ省略し、単によりシンプルかつ対称が、gitの従来の使用の少ない両方で同じ枝を、持っています。 「チュートリアルに従う」というシンプルさを最大限引き出すために、作業リポジトリの両方がクローンである3つ目の「中央」リポジトリ(作成する必要があります--bare)を配置してください。

同じブランチで作業しているため、マージ(実際にはマージではなく、古いブランチヘッドをより新しい子孫に置き換える)は不要です。あなたはちょうどそれらの2つのコピーを持っています。分析が完了し、分析ブランチを更新できるときはgit merge --ff-only masteranalysisの間はちょうどgit merge --ff-only masterです。便利なリポジトリでこれを行うことができますが、変更内容をgit push other-repositoryに同期させるのを忘れないでください。


(Gitのバージョン2.5以降)別のオプションは、独立して、など、あなたがgit checkoutを可能な複数の独立した作業ツリーを可能にgit worktreeコマンドです。これと前述のクローン作成オプションとの違いは、ブランチのセットが1つだけであることです。です。

しかし、これはまだ実験的な機能と考えられていますが、私は個人的にその信頼性と有用性についてコメントするために使用していません。

+0

これは良い考えであるようです。 Dropboxをプライベートリモートトラッキングリポジトリとして使用するので、私がリポジトリを '' git clone'( '--mirror'なしで)した場合、[例えばここでは] http://michael.otacoo.com/linux-2/ set-a-git-server-with-dropbox /))、新しいブランチを作成して同期することはできますか?新しいフィーチャーブランチを作成した場合、私のオリジナルのリポジトリと新しい 'analysis'リポジトリの両方に同じ名前で作成する必要がありますか?あるいは、 '元の'リポジトリの 'master'ブランチのみを常に新しい'分析 'リポジトリにマージすれば'オリジナル 'リポジトリで作成するだけで十分ですか? – nrz

+1

'analysis'ブランチに行ったことは' master'から 'analysis'へマージしてyesにすると、そのブランチは分析リポジトリ以外のどこにも存在する必要はありません。実際、それは考慮された別個のブランチである必要はありません。それは上流に 'origin/master'を持つ、そのリポジトリ内の唯一のブランチです。あなたがそれにするすべてのマージは早送りでなければなりません。 –

+0

ありがとう、これは私の多くを助けます。 – nrz

2

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

レポをクローンする利点は、手動での同期/マージの必要がないことです。 workdir Aでコミットした瞬間、コミットはworkdir Bに表示されます(例:git log)。

注意:リポジトリを変更すると(コミット、リベース、ブランチのリセットなど)、別のworkdirで同じブランチをチェックアウトしないでください。そうしないとgitはちょっと混乱します(git-new-workdir: Commit in working tree A causes bogus changes in tree B参照)。

参照:実はgit working on two branches simultaneously

関連する問題