13

svn externals を git submodules のように見せるためのハックな方法を提案する Web ページがたくさんあります。私は違いが何であるかについていくつかの説明を読みましたが、これはあまり基本的ではないようです:

Git サブモジュールは別のプロジェクトのリポジトリ内の特定のコミットにリンクしますが、svn:externals は常に最新のリビジョンを取得します。

なぜこの違いが根本的に互換性を持たないのでしょうか? ほとんどの svn:externals が移動しないタグを指すなど、想定できる合理的なデフォルトはありませんか?

4

2 に答える 2

10

基本的な違いは合成規則です。

真のコンポーネントベースのアプローチでは、構成を定義します。つまり
、プロジェクトが「機能する」ために必要なラベル (Git の SHA1 コミットのリスト) (つまり、「開発」、「コンパイル」、「デプロイ」、 ...)。

構成で参照される各コミットは、すべてのツリーの正確なバージョンを取得するのに役立ちます。例外はありません。そのツリーの各ファイルは、定義した構成によって指定された正確なバージョンです。


git1.8.2 に関する注意

「git サブモジュール」は、(スーパープロジェクトの gitlink に記録されたコミットとの統合ではなく) リモート ブランチの先端と統合するための新しいモードの学習を開始しました。

すぐに (2013 年 3 月)、サブモジュールは、修正された SHA1 だけでなく、上流の HEAD を参照できるようになりました。


(1.8.2 より前) モジュールごとに 1 つのラベル/SHA1 しか存在できません。1 つの共通の親リポジトリから、モジュール内でモジュールを定義することはできません。
(ただし、外部 Git リポジトリへの単なる参照であるモジュールは、独自のサブモジュール定義を持つことができます。親リポジトリは、第 1 レベルのサブモジュールのみを参照し、それ自体でコミットされたサブモジュールを参照します)


SVN externalではそうではありません: ディレクトリ externals とファイル external を、明示的なリビジョンの有無にかかわらず定義できます。さまざまな外部プロパティを構成
できます。例えば:

$ svn propget svn:externals calc
third-party/sounds             http://svn.example.com/repos/sounds
third-party/skins -r148        http://svn.example.com/skinproj
third-party/skins/toolkit -r21 http://svn.example.com/skin-maker

結果は構成 (' ' の 1 つの参照) ではなく、ディレクトリ ' 'calcで必要な正確な「パッチワーク」を定義する選択規則の構成です。calc


要するに、'​​ ' サブモジュールの 1 つの SHA1 を「計算」することはできません。これは、' ' SVN ディレクトリの一連のプロパティとcalcまったく同じです。svn:externalcalc

于 2010-06-28T12:13:35.120 に答える
3

svn:externalls を使用して SVN リポジトリを操作するためにSmartGitを使用する場合、実際の違いに気付くことはありません。

実際、唯一の本当の違い (少なくとも唯一の技術的な違い) は、SVN が外部で HEAD リビジョン (固定値ではない) を指すことを許可することですが、Git サブモジュールはそうではありません。私の意見では、他のすべての違いは重要ではないため、この質問をするのは正しいことです。

于 2012-05-12T22:51:05.770 に答える