2015-11-12 27 views
9

GITが今後の問題の解決策になるかどうかを知ることができます。 (機能ブランチ、修正プログラムブランチ、バグ修正ブランチを簡単に作成し、トランクをきれいにし、完了した問題(フィーチャー、修正プログラム、バグ修正など)を簡単に作成します。 。SVNからGITへの転送、SVNからGITへの共有リポジトリとのマージ

ここでは、git-flow/branchingモデルの変更版を使って、SVNを使っています:http://nvie.com/img/[email protected] git-masterは私たちのsvn-trunkです。これはうまく動作しますが、SVNではちょっと面倒です。我々は2つの共有リポジトリを使用し、特に以来。

そしてここで問題にしています。以前は、我々は見た目のように、これらの2つの共有リポジトリを使用し、すべての外部参照がlib/a/branches/developlib/b/branches/developを指摘した。これをWi仕事に面倒でしたフィーチャー/修正プログラム/バグフィックスのブランチが必要な場合は、3つのブランチを作成し、スーパープロジェクトを新しい参照で変更してから変更をコミットする必要があったためです。

慎重に微妙に微妙な変更を加えた後、ライブラリリポジトリのブランチを使用して切り替えました。 (superProject/lib/alib/a/branches/developのブランチです)、将来の更新(双方向)は、superProject/lib/aからlib/a/branches/developへのマージ、またはその逆のマージが必要です。

これで、リリースが近づくと、半完成コミットの問題は解決されませんでした。 (そして悲しいことに、私が働いている会社では1時間で必要になるかもしれません)。だから我々はもう少し考えて、Atlassianが提供するツールをもう少し使ってみることにしました。それで、Bitbucket(以前はCrucible/FishEyeを使っていました)とgitの特別な統合ワークフローを使って、作成され、プルリクエストが完了すると、リリースマネージャが次のリリースに入るものと何が入っていないものかを制御できるように、作成できます。上記のワークフローを使用してすべての問題が解決されるため、/develop/にはハーフベークされた問題はありません。

私が直面している問題は、これらの共有プロジェクト(ライブラリaとb)を組み込む方法です。私はWebを読んでいて、git-submodules、git-subtree-merging-strategy、git-subtree(スクリプト)、および手動マージ(複数のサイトがサブツリーのマージと同じですか?しかし、誰も私のgit-newbieの質問のいくつかに本当に答えません。これまではgit-subtreeに最も興味を持っていましたが、GUIのサポートは非​​常に難しいようです。 TortoiseGit、SourceTreeにはgit-subtreeのGUIサポートがありません。コマンドラインアクションが必要です。ほとんどの同僚を知っているので、コマンドラインのようなことはしたくありません。

git-subtreeが作成されたリポジトリとブランチからの情報と、リモートgitリポジトリのクローンがでないという情報が自動的に得られないということは、私には気になりません。任意のgit-subtreeに対する正しいリモートリンクを含めます。私は彼らのリモート原点からのgit-サブツリーを更新することができるように私の仲間の開発者のいずれかをwan't場合はこのように彼らは、手動でgit remote add -f libraryXXX http://repohere/lib-xxx.git(一回)を行い、その後、これがすべてのようにはるかに面倒なようだgit subtree pull --prefix locationGoesHere libraryXXX master (--squash optional)

を行う必要がありますSVNのワークフローよりも、前後に分岐をマージすることができます。何か不足していますか?私は時代遅れの情報を読んでいますか?共有リポジトリを使って作業する正しい方法を見ていませんか?

私が使用したリソースのいくつか:

答えて

3

それはdiffiですあなたが与えた詳細な説明であっても、あなたのセットアップで多くの発表をすることを嫌う。しかし、私はgitで分岐が実質的に無痛である(特にsvnと比較して)ことが分かります。ライブラリの依存関係にサブモジュールを使用することをお勧めします。彼らは完璧ではないが、彼らは働く。ブランチを作成すると、そのブランチは親と同じバージョンのライブラリを使用して開始され、.gitmodulesファイルを編集して別のブランチを使用することができます。 --recursiveフラグを使用して新しいクローンを作成する(またはクローン後にgit submodule updateを使用する)ことを覚えておく必要がありますが、これはサブツリーよりもはるかに簡単です。

+0

「サブモジュール」について少しは読んだことがありますが、私が以前に使っていた「svn:externals」と類似していて、 。単純な理由から、各 "スーパー"プロジェクトには、他の "スーパー"プロジェクトを中断することなく、変更できるライブラリのコピーを持たせたいと思っています。そうでない場合は、もう少し詳しくサブモジュールを調べます。 –

+0

その場合は、ライブラリのソースを、それらを使用するプロジェクトと同じgitリポジトリにチェックインするだけです。そうすれば、アップストリームのライブラリへの変更をより困難にすることができます。スーパープロジェクトはサブモジュールとしてライブラリのブランチを使用できます。あなたのプロジェクトのそれぞれが図書館の別の支店を指し示すようにすることができます。 – db48x

+0

"それぞれの"スーパー "プロジェクトには、他の"スーパー "プロジェクトを中断することなく変更できるライブラリのコピーを持たせたいと考えています。彼らはローカルのリポジトリです。グローバルな状態はなく、送信されるものだけが存在します。あなたはそれらの私的な支店を維持することができます、それは非常に一般的です。 – jthill

関連する問題