4

私は 2 つの git ID を持っています。1 つは個人用で、もう 1 つは雇用主用です。

私の作業プロジェクトはサブモジュールを使用しており、メイン リポジトリのクローンを作成することはできますが、サブモジュールを更新することはできません。次のエラーが発生することなく、サブモジュールもローカルで更新できるようにするには、何を構成する必要がありますか?

Fetching origin
From github.com:/work_domain/work_submodule
 * branch            HEAD       -> FETCH_HEAD
error: pathspec 'master' did not match any file(s) known to git.

~/.ssh ディレクトリに 2 セットの id_rsa キーがあります。

id_rsa.pub <= personal ssh key
id_rsa_work.pub <= work ssh key

~/.ssh/config ファイル:

#work acccount
Host github-work
  HostName github.com
  User git (corrected with info from answers)
  IdentityFile ~/.ssh/ida_rsa_work

#personal account
Host github-personal
  HostName github.com
  User git
  Identity ~/.ssh/ida_rsa

最初に作業レポを正常に複製したとき、調整されたホスト マッピングを使用しました。

git clone git@github-work:work_domain/repo_name.git

仕事で通常使用するものの代わりに:

git clone git@github.com:work_domain/repo_name.git

作業プロジェクト リポジトリ内で、.gitmodules ファイルにはもちろん公式のマッピングがあります。

[submodule "work_submodule"]
        path = work_submodule
        url = git@github.com:/work_domain/work_submodule.git

以下の提案に従って、.gitmodules 属性を次のように更新しました。

[submodule "work_submodule"]
        path = work_submodule
        url = git@github-work:/work_domain/work_submodule.git

ただし、サブモジュールをローカルで更新することはできません。

4

2 に答える 2

2

サブモジュールのプライベート URL を誤ってリポジトリ( に依存する) にコミットする可能性を防ぐために、.ssh/config代わりに次の URL を編集する必要があります。.git/ssh


github-work.gitmodulesを使用するようにファイル内の URL を編集することは、それを行う 1 つの方法です。ただし、これはプロジェクトのファイル部分であるため、誤ってコミットされる可能性があります。

代わりに、@Chronical がコメントで述べたように。特定のチェックアウトのローカル設定のみを変更するには、代わりに URL を変更する必要があります.git/config

url = github-work:/work_domain/work_submodule.git

ではなくそこで変更することで.gitmodules、間違った URL を誤って使用したものをクリーンアップするための余分な手順を取り除くことができます

git submodule syncで編集した URL を実行すると、編集中の URL.git/configで上書きされることに注意してください。.gitmodules

于 2015-07-01T15:41:41.487 に答える
0

まず、 ~/.ssh/config がある場合、異なる公開/秘密鍵を使用できるようになります。つまり、ssh URL は上記の構成ファイルを使用する必要があります。

 url = github-work:/work_domain/work_submodule.git
 # or
 url = github-personal:/work_domain/work_submodule.git

構成ファイルのすべてのポイントは、異なるキーを使用することとユーザー、ポート番号、サーバー名などについて言及する必要がないことです
' github-work' と ' github-personal' はその構成ファイルのエントリ キーであり、サーバー名ではありません。

次に、ファイル内の URL を変更した後、次の.gitmodulesことを忘れないでください。

  • 以前のアドレスから既にロードされている場合は、サブモジュールのコンテンツを完全に削除します。
rm -Rf work_domain/work_submodule ; git チェックアウト -- work_domain/work_submodule
  • そのサブモジュールを再度更新します。
git サブモジュールの同期
git サブモジュールの更新 work_submodule

Git 2.25 (2020 年第 1 四半期) の「Git submodule url changed」と新しいコマンドも参照してください。

git submodule set-url [--] <path> <newurl>
于 2013-06-01T21:53:16.763 に答える