2012-05-17 14 views
10

私はGithubに3つのサブモジュールを収容するプライベートレポを持っています。そのうち3つもプライベートです。サブモジュールがプライベートGithub reposのときのgitサブモジュールの問題

私はEC2サーバ上の4つのSSH鍵を生成し、GitHubのは、すべての4つのプライベートリポジトリへの鍵を配備としてそれらを適用しています。

プライマリリポジトリがSSHキーを認識したときにクローニングできます。私は「Gitのサブモジュールのアップデート」を実行すると、次のエラーでのプライベートリポジトリに失敗:

ERROR:リポジトリが見つかりません。 致命的:リモートエンドが予期せずハングアップする

これらのプライベートレポジトリを手動でチェックアウトすると機能しますが、git submoduleコマンドを使用すると機能しません。何か案が?これは完全にサポートされていませんか?

答えて

9

githubの認証が少し奇妙です。ユーザー名は使用しません。彼らはあなたが誰であるかを提示した公開鍵に基づいて推論するだけです。 4つのデプロイメントキーが生成されているので、githubに接続するときにサーバによって使用されるものは誰でも推測できます。それらのいずれかを受け入れ、登録されていないリポジトリへのアクセスを拒否します。

このようにして、最も簡単な解決策はただのリポジトリのすべてのための単一の配備キーを使用することです。

ただし、できない場合は、sshホストエイリアスを使用してこれをハックすることができます。次のようなサーバーの~/.ssh/configスタンザに追加:

Host repo-foo 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-foo 
    IdentitiesOnly yes 

Host repo-bar 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-bar 
    IdentitiesOnly yes 

その後、むしろ[email protected]:...フォームを使用するよりもrepo-bar:username/bar.gitrepo-foo:username/foo.gitであなたのサブモジュールを指します。

これは効果的に別のサーバー上に住んでいるとして各リポジトリを治療するためのgitとsshを引き起こす、と明示的なIDファイルを渡すので、使用するものをキーの上に何の混乱はありません。

+1

ええ、しかし、デプロイキーはユニークで、複数のプロジェクトに配置することはできません。私は他に何ができるかを見ていきますが、私は主にパスワードなしの配備を望みます。 –

+1

これは奇妙ではありません。それはかなり標準です!そして、標準的な解決策はあなたが提案したとおりです。 – Ashe

+0

@Len、標準であるかもしれないが、それはかなり奇妙である。 githubは、同じデプロイメントキーを複数のリポジトリで使用できるように、自分のものを修正しなければなりません:) – bdonlan

関連する問題