2013-04-23 14 views
5

Gitの最近の変更により、サブモジュール使用時に.gitディレクトリの処理方法が変更されました。 サブモジュールごとに1つずつ.gitを持つ代わりに、すべてが現在ルートレベルの.gitディレクトリ(サブモジュールを含む作業コピーに対応するディレクトリ)にあります。サブモジュールを含むgit作業コピーの移動

次に、各サブモジュールで、.gitディレクトリの新しい場所を指すファイルが作成されます。 my project

、私は次の.gitmodulesのファイルがあります:私は現在、Gitの1.8.1.5を使用しています

$ cat cmake/.git 
gitdir: /home/moulard/profiles/default-x86_64-linux-ubuntu-12.04.1/src/unstable/roboptim/roboptim-core/.git/modules/cmake 

[submodule "tests/shared-tests"] 
     path = tests/shared-tests 
     url = git://github.com/roboptim/roboptim-shared-tests.git 
[submodule "cmake"] 
     path = cmake 
     url = git://github.com/jrl-umi3218/jrl-cmakemodules.git 

私はgit clone --recursiveを行うと、私はそれから入手し。

私の質問は以下のとおりです。

  1. この動作の変更はしなかったのはなぜ?この新しい戦略には明らかな利益は見られません。
  2. どうすれば安全に作業コピーを移動できますか?

これはで前の質問Moving the parent directory of a git repository that contains submodulesと同じではないことに注意してください(私は私の作業コピーを移動した場合、私は壊れgitdirへのパスはもうGitのリポジトリではないことを私に言って、エラーメッセージが表示されます)私がであることを確信してくださいこれは私の.gitmodulesファイルに絶対パスの存在によって関連する問題ではありません。

答えて

8

.git/module組織がバックgit1.7.8 (December 2d, 2011)からさかのぼり:

git submodule init」で新しいサブモジュールのディレクトリを移入すると、サブモジュールのための$GIT_DIRメタ情報ディレクトリは、親プロジェクトの$GIT_DIR/modules/<name>/ディレクトリ内に作成し、gitfile機構を介して参照されています。
を再クローン化せずに、ツリー内にサブモジュールを持っているスーパープロジェクトのコミットを切り替えることができます。

「gitのサブモジュールの更新」、サブサブモジュールに再帰する場合、接頭辞パスをacccumulateませんでした。しかし、最近のバグ修正が(4月22D、2013)1.8.2.11.8.3に含まれている

最新のgitリリースにアップグレードすると、この問題が解決する可能性があります。ここで


は、(最新のgit 1.8.3、2013年4月、22Dとの)一つの可能​​な解決策は、OP Thomas Moulardthe comments中で言及されています

$ git submodule deinit -f .が働いています!
それから私はgit submodule initを実行することができますし、パスが

(デ)初期化ステップ(.git/modules

は、それが記録「add」ステップの世話をしていない場合、これは面倒を固定しますファイル内のサブモジュールのURL:そのファイル内で手動で削除する必要があります。私はドンsuperproject/.git/modules/path/to/submodule/configファイル

worktree=パスを更新するsuperproject/path/to/submodule/.gitファイルにgitdir:パスを更新

  • 」:

+0

すべてが失敗した場合は、多分http://stackoverflow.com/a/15504813/6309? – VonC

+0

実際に私はGitの最後のリリースとマスターのHEADを試しましたが、gitコマンドがない限り、これまでのところ運がない限り、私は気付いていません。 –

+0

@ThomasMoulardはあなたのケースで1.8.3ですか? – VonC

1

私が正常に次の操作を行って別の場所に移動した後、私の仕事のコピーを固定なぜgitはそこに絶対パスを使用するのか知りません!

(gitの2.0.1.563でテスト)

関連する問題