10

私はこのGitにまったく慣れていないので、少し助けが必要です。

最近、GitHubで新しいリポジトリを作成し、デスクトップに複製しました。それをmyProjectと呼びましょう。myProjectにサブモジュールとして含めたGitHubアカウントにもフォークがあります。これをmyForkOfOtherProjectと呼びましょう。これは、 otherProjectのフォークです。

だから、これは現在の状況です:

レポの現在の状態のグラフ

GitHubによると

リポジトリのクローンを作成すると、元のリポジトリではなく、GitHub上のフォークを指すoriginというデフォルトのリモートがあります。元のリポジトリを追跡するには、upstreamという名前の別のリモートを追加する必要があります。

だから、私の質問は、どのようにアップストリームをサブモジュールに設定するのですか?それとも私は何かを理解していませんか?

前もって感謝します。

4

2 に答える 2

10

サブモジュール

サブモジュールをリポジトリに複製すると、独自の.git/configファイルと独自のオリジンの概念があります。サブモジュールが自分のものであると仮定すると(たとえば、リモートのアップストリームにサードパーティのリポジトリがない場合)、サブモジュールのアップストリームリモートの作成について心配する必要はありません。

サブモジュールのアップストリームリモートを作成する必要がある場合は、それで十分簡単です。cdサブモジュールのトップレベルディレクトリに移動し、メインリポジトリの場合と同じ方法でディレクトリを指定します。

cd myForkOfOtherProject
git remote add upstream git://example.com/otherProject.git

サブモジュールは実際にはスーパープロジェクトで追跡される追加のメタ情報を含む通常のgitリポジトリであるため、名前空間の競合はありません。スーパープロジェクトとサブモジュールは、 .git/configファイルを共有しません。

すべての目的と目的で、他のリポジトリの場合と同じように、サブモジュール内でオリジンアップストリームを処理します。サブモジュール内で実行するGitコマンドは、サブモジュールの現在のコミットIDの追跡に主に関心があるスーパープロジェクトから独立しています。

于 2012-06-17T08:42:57.297 に答える
2
git remote add upstream git://github.com/otherUser/otherProject.git

gitプロトコル(デフォルトではポート9478)が認証されている場合にのみ機能します。
私は仕事からそれを行うことができませんでした(そして私はsshアドレスについても言及していません:sshは「LAN外」のリモートアドレスからの仕事もブロックされています)。

git remote add upstream https://github.com/otheruser/otherProject.git

動作します(いくつかの追加設定を提供します)

注:サブモジュールリポジトリにアップストリームを作成すると(CodeGnomeで 説明されているように、賛成)、otherProjectに役立ちますupdate that submodule with the latest of

cd myForkOfOtherProject
git fetch upstream
# or fetch + merge:
git pull upstream

otherProjectにプッシュバックするために使用されることはありません(フォークした場合は、おそらくコラボレーターとしてリストされていないためです)。
で直接進化を行う場合はmyForkOfOtherProject、それをコミットしてから、親リポジトリに移動してコミットする必要があります(「サブモジュールの本質」を参照)。また、最初のメンテナがそれを考慮に入れることを希望する場合は、プルリクエストを作成します。otherProject

于 2012-06-17T10:33:03.720 に答える