SVNチェックアウトとSVNエクスポートの正確な違いは何ですか?
私の知る限り、エクスポートにはメタデータを含む.svnディレクトリが含まれておらず、チェックアウトにはその.svnディレクトリが含まれていました。しかし、私の同僚は、チェックアウトでありSVNリポジトリからエクスポートされたソースからコンパイルされたものに対して異なる動作があるという最近の問題を抱えていました。両方とも正しくコンパイルされましたが、svn export
からコンパイルされたものは機能しますが、チェックアウトされたものはまったく機能しません。
PS:コンパイルされているのは、組み込みデバイスで使用されているLinux 2.4カーネルです。イメージは正しくコンパイルおよびロードされますが、チェックアウトされたイメージは機能しません。これは、insmod中にカーネルパニックを引き起こします。なぜこれが起こるのでしょうか?
PPS:チェックサムおよび差分ツールを試して、SVNからエクスポートおよびチェックアウトされた2つのディレクトリの違いを確認しました。 .svnディレクトリを除き、両方とも同じです。
svn export
は、リビジョンからすべてのファイルを抽出するだけで、リビジョン管理を許可しません。また、各ディレクトリに.svnディレクトリが散在することもありません。
svn checkout
を使用すると、作成したディレクトリでバージョン管理を使用できます。 svn update
やsvn commit
などの標準コマンド。
あなたが述べたように、チェックアウトには.svnディレクトリが含まれます。したがって、それは作業コピーであり、コミットを戻すための適切な情報を持っています(許可がある場合)。エクスポートを行う場合、リポジトリの現在の状態のコピーを取得するだけであり、変更をコミットする方法はありません。
チェックアウトを再実行していますか、既存のディレクトリにエクスポートしていますか?
あなたがいる場合、チェックアウトは作業コピーを更新します。これにはファイルの削除も含まれます。
ただし、エクスポートはすべてのファイルをリポジトリから宛先に単に転送します。宛先が同じディレクトリである場合、リポジトリで削除されたファイルは削除されません。
リポジトリで削除されたファイルに依存しているため、コピーをエクスポートするだけで機能しますか?
ビルドプロセスがサブディレクトリを調べて、そうすべきでないものを含めている可能性はありますか?ところで、法的チェックアウトを実行してから、.svnとそれに含まれるすべてを削除できます。これにより、エクスポートと同じ結果が得られます。メタデータを削除する前後に、それをコンパイルしてみてください。
(ジェラルドの答えを補完するために...)さらに微妙な違いは、コマンドが:
svn checkout ...repos_location/my_dir .
my_dir
内のファイルを現在のディレクトリに(.svn
フォルダーとともに)配置します
svnの特定のバージョンでは、コマンド:
svn export ...repos_location/my_dir .
my_dir
というフォルダーを現在のディレクトリに作成し、エクスポートしたファイルをその中に配置します。
プロジェクトをアップロード(または誰かに提供)する場合は、エクスポートを使用します。プロジェクトで作業している場合は、チェックアウトを使用します。
追加の黙想。あなたはinsmodがクラッシュすると言いました。 Insmodはモジュールをロードします。モジュールは、カーネルの構築とは別のコンパイル操作で構築されます。カーネルとモジュールは、同じヘッダーなどから構築する必要があります。すべてのモジュールはカーネルのビルド中にビルドされますか、それとも「既存」ですか?
もう1つのアイデア、および私がほとんど知らないものはsvn externalsです。これは(使用する場合)プロジェクトにチェックアウトされるものに影響を与える可能性があります。エクスポート時にこれが異なるかどうかを確認します。
非常に単純な違いです。プロジェクトの構造だけを表示したい場合は、エクスポートに進みます。
また、ファイルを操作する場合は、作業コピーを作成するメタデータを含む.svnフォルダーが含まれているため、チェックアウトする必要があります。そうしないと、エクスポート時にエラーが発生します。
もしあなたがそうするなら svn export
そして、いくつかのファイルを編集してからコミットすると、エラーが発生します。
../../xxxは作業コピーではありません。