1

私はこの質問が打ちのめされたことを知っています。しかし、サブモジュールがスーパープロジェクトのコミットを参照しようとしている理由をまだ明確に理解していません。私はいくつかのサブモジュールを持つプロジェクトを持っています。そのいくつかは、私が貢献したい github リポジトリを参照しています。モジュールを更新した後、モジュールの変更をプルします。

[ashinn@puppet1 puppet]$ cd modules/ganglia
[ashinn@puppet1 ganglia]$ git ブランチ
* (分岐なし)
  主人
[ashinn@puppet1 ganglia]$ git pull オリジンマスター
リモート: オブジェクトのカウント: 8、完了。
リモート: オブジェクトの圧縮: 100% (4/4)、完了。
リモート: 合計 6 (デルタ 4)、再利用 4 (デルタ 2)
オブジェクトの開梱: 100% (6/6)、完了。
https://github.com/andyshinn/puppet-ganglia から
 * ブランチ マスター -> FETCH_HEAD
再帰によるマージ。
 README | 1 +
 1 ファイル変更、1 挿入 (+)、0 削除 (-)

ここで、スーパープロジェクト内のモジュールへの参照を更新します。

[ashinn@puppet1 ganglia]$ cd ../..
[ashinn@puppet1 puppet]$ git add modules/ganglia
[ashinn@puppet1 puppet]$ git commit -m '更新された神経節モジュール'
[ganglia c172591] ganglia モジュールを更新
 1 ファイル変更、1 挿入 (+)、1 削除 (-)

私は現在、ganglia ブランチで作業しているので、オリジンにプッシュします (これは 2 つの異なる URL です)。

[ashinn@puppet1 puppet]$ git push 元の神経節
オブジェクトのカウント: 8、完了。
最大 2 つのスレッドを使用したデルタ圧縮。
オブジェクトの圧縮: 100% (6/6)、完了。
オブジェクトの書き込み: 100% (6/6)、616 バイト、完了。
合計 6 (デルタ 4)、再利用 0 (デルタ 0)
git@github.com:andyshinn/puppet.git へ
   1876698..c172591 神経節 -> 神経節
オブジェクトのカウント: 5、完了。
最大 2 つのスレッドを使用したデルタ圧縮。
オブジェクトの圧縮: 100% (3/3)、完了。
オブジェクトの書き込み: 100% (3/3)、323 バイト、完了。
合計 3 (デルタ 2)、再利用 0 (デルタ 0)
リモート: /var/lib/puppet/repo から
リモート: dcd1fcc..c172591 神経節 -> 起源/神経節
リモート: https://github.com/andyshinn/puppet-ganglia から
リモート: a0c4e21..975c92f マスター -> オリジン/マスター
リモート: 致命的: 参照はツリーではありません: c5defdeae006c7b87058cc5c79aef60087b63a6b
リモート: サブモジュール パス 'modules/ganglia' で 'c5defdeae006c7b87058cc5c79aef60087b63a6b' をチェックアウトできません
remote: 既存の環境の ganglia を更新しています
puppet@puppet.mydomain.com:repo へ
   dcd1fcc..c172591 神経節 -> 神経節

リモートには、異なるフォルダー内のブランチをチェックアウトしgit submodule update --init、それぞれに対して実行する受信後スクリプトがあります。元のリポジトリに手動で接続すると、問題を確認できます。

-bash-4.1$ git プル
すでに最新です。
-bash-4.1$ git サブモジュールの更新 --init
致命的: 参照はツリーではありません: c5defdeae006c7b87058cc5c79aef60087b63a6b
サブモジュール パス 'modules/ganglia' で 'c5defdeae006c7b87058cc5c79aef60087b63a6b' をチェックアウトできません

ここで何が間違っていますか?

4

1 に答える 1

0

プルを行ったとき、あなたは枝にいませんでした。HEAD は、必要な場所を指している必要があります。サブモジュールを更新する適切な方法は、

git checkout master
git push origin master

現在のコミットは、希望する場所を指しています。これを行うと、サブモジュールの変更をスーパー プロジェクトに追加し、追加、コミット、およびプッシュできます。

もう 1 つの方法は、サブモジュール内の現在の HEAD がある場所のブランチまたはタグを作成し、それをプッシュすることです。

git tag interesting HEAD
git push origin interesting
cd ../..
git add submodule/path
git commit -m "updated my submodule"
git push 
于 2012-09-27T23:28:33.637 に答える