0

git サブモジュールに関連する複雑な問題/ケースがあります。私は github とサードパーティのサブモジュール (他社提供、読み取り専用) に独自のレポを持っています。サブモジュールの初期化、更新、.gitsubmodule と新しいフォルダーのマスター リポジトリへの追加などを行いました。すべて正常に動作しています。今、サブモジュールファイルにいくつかの変更を加えたり、新しいファイルをサブモジュールに追加したりしたいと思っています。私はそれを行い、サブモジュールディレクトリレベルからコミットを実行しました。フォルダーをマスター リポジトリに変更すると、git ステータスに、サブモジュール フォルダーでコミットされていないコミットが表示されます。そう... git commit -a, git push. (サブモジュール ディレクトリで git ステータスを確認すると、あなたのブランチが X コミットによって「origin/master」より進んでいるという情報が得られます。)

github からリポジトリの再帰的なクローンを作成すると、エラーが発生します (サブモジュールの変更が原因だと思います):

fatal: reference is not a tree: c19485a57b5152959b9a916409ad5d901c44741d 
Unable to checkout 'c19485a57b5152959b9a916409ad5d901c44741d' in submodule path 'apt'

だから、私の質問は次のとおりです。

  1. サブモジュールで変更を行い、それらを github にプッシュ (および追跡) できますか。
    • はいの場合、サブモジュールとその中の変更を含むすべてのレポを別のホストにプルできるようにするために何をしなければなりませんか (何らかのワークフロー?)。
    • そうでない場合は、サブモジュールの変更を回避して、github リポジトリ レベルから変更を確認し、別のホストにプルする方法を教えてください。
  2. それはまったく可能ですか?
4

2 に答える 2

0

git pushサブモジュール内から実行するのを忘れたと思います。これは、含まれているプロジェクトでコミットをプッシュする前に行う必要があります。そうしないと、更新されたサブモジュールを誰もチェックアウトできなくなります (コミットがリモートに存在しないため)。

于 2012-08-23T21:41:05.630 に答える
0

問題は、プッシュ アクセスできないサード パーティのリポジトリを変更することです。解決策は、そのリポジトリの独自のクローンを作成することです。編集を行うときは、そのサブリポジトリのコンテキストでそれらをコミットしてプッシュする必要があります。外部リポジトリはサブモジュールの状態を追跡しますが、サブモジュールのファイルへの変更を管理するべきではありません。

したがって、ワークフローの解決策は、プッシュ アクセスできるサードパーティ リポジトリの独自のクローンを作成することです。独自のバージョンのレポをサブモジュールとしてプロジェクトに追加する必要があります。この回答は、サブモジュールを使用する正しい方法に関する混乱を解消するのに役立つと思います(これは、時には少し注意が必要です)。

于 2012-08-23T23:05:18.817 に答える