2012-03-02 19 views
9

Visual Studio 2010(C#版)で開発し、もう少し前にSVNからGITに移行しました。今では、リポジトリ(かなり大きい - 〜30.000個のファイル)を複数のgitリポジトリに分割しようとしています。 このソリューションはいくつかのプロジェクトを共有しています。ほとんどの場合、社内で開発し、すべてのソリューションから追加するライブラリです。異なるレイアウトのVisual StudioソリューションでGitサブモジュールを処理するにはどうすればいいですか?

新しいリポジトリのレイアウトはフラットです。各プロジェクトの1つのサブディレクトリ(共有プロジェクトはサブモジュールです)。 大きな古いレポでは、プロジェクトはツリー構造になっています。

問題は、サブモジュールの外部参照で発生します。新しいリポジトリでは、参照されたプロジェクトへのパスは "...... libs \ someproject"になりますが、新しいレイアウトでは正しいパスは ".. \ someproject"になります。

私たちはすでにこれに関するいくつかの編集戦争をしており、もっと熱心ではありません。私は考えることができ

半焼きたてのソリューション:

  • 中... csproj.user

    使用「参照パス」とバージョン管理からこのファイルを除外する(各開発者のために、それぞれの後にやり直す必要がありますreopsitoryクリーンアップ)

  • 使用のそれぞれの状況についての支店及び(サブモジュールは、すでに最も単純な概念ではない「本物」のコミットは行くべきと「環境の変化」は、コミットが行くべき場所をみんなに教えしよう...)

  • はサブモジュールの代わりにバイナリを埋め込んでいます(しかし、サブモジュールへの変更をどうやって開発するのでしょうか?どのような異なるlog4netのバージョンは?)

誰もがまともな解決策を知っていますか?

答えて

5

あなたは正気の解決策を求めているので、私が正しくあなたを理解していれば、私はそう

http://nuget.codeplex.com/

+1

私は、あなたが合理的な依存関係管理を使ってソースインクルージョンからDLLインクルードへ移行することを暗示していると思います。そうであれば、それは魅力的なように聞こえますが、今私たちは包括的なソリューションの一部として共有ライブラリを開発しています。問題を解決するためにかなり重い方法と思われる。 – plaugg

+0

私が理解したように、彼らは別々のVSプロジェクトですが、それは実現可能性の点で問題を引き起こすべきではありませんが、実際にはあなたが探しているかもしれない速いハックではありません...もしあなたがデバッグを心配しているなら、デバッグの経験を維持するためにシンボルソースサーバーにリンクしていますが、メインプロジェクトとサポートプロジェクトの間に多くの行き来がある場合、これは問題になる可能性があります。私は少し躊躇しています。 gitサブモジュールの優雅さの欠如と私はあなたがリストしなかった代替案を提案したいと思っていました(バージョン管理もサポートしています)。 – Dirk

+0

私はまだチームとして.NETで作業していたときに、このオプションが利用できないことを少し悲しんでいます。依存関係については、Visual Studioは愚かであることが知られています。このアプローチには多くの利点があります。しかし、私にとって最も重要なのは、開発者の視点から見れば、プロジェクトのセットアップ、コンパイル、プログラムの迅速化です。私が新しいプロジェクトをチェックアウトするときには、必要なすべてのライブラリを取得するだけで、プロジェクトライブラリをコンパイルして実行するだけです。それだけでなく、プロジェクトをもっと理解しやすくするために、これらのサブプロジェクトの混乱があります。 – SpoBo

1

1つのサブモジュールを使用して、すべての「共通ライブラリ」を格納します。ちょうど1つのレベル。しかし、よく定義された契約を持つサービスとして共通ライブラリを移動する必要があります。これにより、ダウンタイムなしで新しいバージョンを段階的に展開することができます。この方法では、契約を保持するサブモジュールだけがあります。これらは、インタフェースまたはメッセージである可能性があります。

+0

多分私はあなたの答えを理解していません。ソリューションのレイアウトを提案しているようです。私の質問は、ソリューションのレイアウトではなく、さまざまなソリューションでサブモジュールのさまざまな環境を扱う方法についてです。 – plaugg

+0

これはtoレベルのreposで処理する必要があります。サブモジュールプロジェクトはそれを継承する必要があります。 nhibernateのために、いくつかの共通の機能があります。これをWindowsサービスのapとWeb apで使いたいと思っています。スレッドの上部を設定する必要があります。他の設定と同じです。 –

1

(インスピレーションを得るためにhttp://www.MyGet.orgを見て)あなた自身のNuGetサービスの設定を検討することをアドバイスすることができ、問題はVisual StudioでGitではないのですか?その場合は、Visual Studioで動作する古いツリー構造を使用してください。あなたのサブモジュール構造もツリー構造にしましょう。したがって、ツリーの上部は、ツリーの葉まで降りるまで、サブモジュール(ブランチ)がサブモジュールを持つ1つのスーパーレポになります。最初はセットアップに苦労するでしょうが、うまくいくはずです。

2

IFあなたはパッケージ管理のルートを辿りますが、OpenWrapを検討してください。しかし、パッケージ管理の成果物をソースコードに埋め込むことは悪い考えです。このようなツールを使用して、実際にサブモジュールに格納されているものを更新できますが、ビルド時に依存することはありません。バイナリがビルドスクリプトの観点から存在することを期待してください。

1

私はVS 2013を使用して同様の問題があります。

SVNの代わりにgit-svnを使いたいです。 SVNには巨大なディレクトリがあります。すべての私たちのトランクフォルダを含む単一のgitリポジトリを作成できませんでした。 Gitは常にエラーで終了し、リポジトリは破損していました。私は次のように行うことで問題を回避働い:

  1. のgit-svnのは、私は、フォルダごとに1のgitリポジトリを作成することによって、必要なSVN /トランクオフフォルダのサブセットをクローン化された使用します。
  2. 私のgit-svn-clonedフォルダをすべて含むローカルの親gitリポジトリを作成しました。
  3. それぞれのgitリポジトリは、サブモジュールとして親gitリポジトリに追加されました。

Visual Studioの問題は、ソリューションを開いたメインプロジェクト外の複数のプロジェクトを認識しないことです。このソリューションは、Visual Studioでgit-source制御下にあると認識された唯一のファイルを含むフォルダにあります。

git-repostitoryの場所として上位レベルの親ディレクトリを使用するようにgit-preferencesを設定しようとしましたが、差異はありません。

+0

気にしないでください。私はVisual Studioがgit-submodulesをサポートしていないことを知りました。 https://connect.microsoft.com/VisualStudio/feedback/details/790028/visual-studio-tools-for-git-cant-see-submodule-changes – Catriel

関連する問題