2

ネイティブMacOSクライアントと仮想マシンで実行されている「ゲスト」Linuxクライアント間で共有したい巨大なgitリポジトリがあります。両方(1.7.12.2)で構築された最新バージョンのgitを使用しており、MacOSからリポジトリのクローンを作成しています。問題は、Linuxではサブモジュールが認識されないことです。

$ git status
fatal: Not a git repository: /blah/android-wmon/.git/modules/core/modules/galaxynexus-cm10-kernel
fatal: 'git status --porcelain' failed in submodule core

これら2つのオペレーティングシステム間でgitリポジトリを共有することはできませんか?これが問題になるとは想像もしていなかったでしょう。

4

1 に答える 1

1

Mac側で「git submodule init」と「git submodule update」を実行した場合、Linux側でも実行する必要があるのはなぜですか。

これらの2つのサブモジュールコマンドは、ローカルリポジトリ(クローンを作成したばかりのリポジトリ)用です。

  • git submodule initローカル構成ファイルを初期化し、
  • git submodule updateそのプロジェクトからすべてのデータをフェッチし、親リポジトリにリストされている適切なコミットをチェックアウトします。

1つのローカルリポジトリでこれを実行しても、他のクローンリポジトリ(Linuxのリポジトリ、Macのリポジトリから複製されたリポジトリなど)には副作用はありません。
すべてのデータを取得するには、2番目のローカルリポジトリ(Linuxサーバーに対してローカル)に対してこれらのコマンドを再度実行する必要があります。

注:を実行したのgit cloneはなく、git clone --reference単純なを実行したことを確認してください。

また、サブモジュールがフルパスで参照されていないことを確認してください(gitバージョンによって異なります):このスレッドを参照してください:

「最終更新」とは何ですか?v1.7.8では、サブモジュール用に個別のgit dirが導入され、絶対パスが使用されていました。

この絶対パスは、v1.7.10-rc1に存在するこのパッチセットの相対パスに変更されました。

最近から、名前の<name>付いたサブモジュールのgitディレクトリはスーパープロジェクトの.git/modules/<name>ディレクトリにあり、作業ツリーにはそこを指すgitfileが含まれています。
サブモジュールのgitディレクトリがcloneコマンドに見つからないためにクローンを作成する必要がある場合.git/modules/<name>、絶対パスがgitfileに書き込まれます。クローンが必要ない場合、gitディレクトリはgit-submodule.sh、相対パスをに書き込むことにより、スクリプトによって再アクティブ化されgitfileます。

動作は以前にに複製されたサブモジュールに依存するため、これは一貫性がありません.git/modules of the superproject
gitfileを無効にすることなくスーパープロジェクトを移動できるため、ここでは相対パスを使用することをお勧めします。
これを行うには、常に相対パスをに書き込みますgitfile。これにより、cloneコマンドがそこに書き込んだ可能性のある絶対パスが上書きされます。

于 2012-10-03T20:39:36.733 に答える