2013-03-28 43 views
34

gitサブモジュールを更新できません。ガットエラー:githubサブモジュールアクセス権(Travis CI)

$ git submodule init 
Submodule 'build/html' ([email protected]:quadroid/clonejs.git) registered for path 'build/html' 
... 
$ git submodule update 
Cloning into 'build/html'... 
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts. 
Permission denied (publickey). 
fatal: Could not read from remote repository. 

完全なログ: https://travis-ci.org/quadroid/clonejs/jobs/5855553

しかし、私はローカルで同じタスクを実行するとき、すべてがOKです。

+0

://github.com/quadroid/clonejs.git しかし、今、私はローカルにこのモジュールをプッシュすることはできません... – Quadroid

+0

は、[キーを展開]を使用(httpsを:/ /help.github.com/categories/30/articles)、またはスクリプトがあなたのローカルではなく、travisでのみURLを変更するようにしてください –

答えて

20

httpsスキームをサブモジュールに使用することをお勧めします。これは、Travisをプルしてローカルにプッシュできるようにするためです:https://github.com/quadroid/clonejs.git

62

サブモジュールを初期化する前に、SSH URLがパブリックURLに置き換えられるように、これはTravisでオンザフライで.gitmodulesファイルを変更することで(ありがたいことに)解決できます。これを実現するために、.travis.ymlするには、次のように追加します。私はこのソリューションを得、そこから彼のgistマイケルIedemaへ

# Handle git submodules yourself 
git: 
    submodules: false 
# Use sed to replace the SSH URL with the public URL, then initialize submodules 
before_install: 
    - sed -i 's/[email protected]:/https:\/\/github.com\//' .gitmodules 
    - git submodule update --init --recursive 

感謝を。あなたのサブモジュールがプライベートリポジトリであれば、それがhttpsのURLで資格情報を含めるように動作するはずです、私はこの目的のためにアクセスが制限されたGitHub access tokenを行うことをお勧めします

# Replace <user> and <token> with your GitHub username and access token respectively 
- sed -i 's/[email protected]:/https:\/\/<user>:<token>@github.com\//' .gitmodules 
+3

これまでのところ、この問題に対する最良の解決策です! –

+0

@StefanDragnevありがとう、私はしたいと思います;) – aknuds1

+1

これはプライベートレポジトリでは動作しません。これらのプライベートレポジトリはすべて同じgithubアカウントの下にあり、travisのためにオンになっています。誰でも手掛かりがありますか?ありがとう。 – inder

11

トラヴィス今のsshを使用してアクセスするサブモジュールをサポートし、どのはるかに簡単な解決策です。 documentation for private dependenciesで説明されているように、構築しているGithubプロジェクトにsshキー(または専用CIユーザーのsshキー)を関連付けるだけで済みます。

$ travis sshkey --upload ~/.ssh/id_rsa -r myorg/main

トラヴィスは、あなたがあなた自身のSSHキーを使用する必要がないように、専用のユーザーを作成お勧めします。

+1

この説明をさらに完全にするには。 Travisが構築しているリポジトリとサブモジュールのリポジトリの両方にアクセスできるユーザを見つけ(Travisはこのために特定のCIユーザを作成することを推奨します)、ビルド*を行うリポジトリに対してこのコマンドを実行します。 – thoutbeckers

+1

これはtravis.orgでは利用できません(無料ではなく、travis.comのみ) – Toilal

+0

これはセキュリティを向上させるものではありません... githubキーを広げて.. – matanster

5

サブモジュールをssh-urlsで指定したため、このエラーが発生します。 travis-ci環境からのsshアクセスの場合は、configure a keyが必要です。

また、gitサブモジュールの相対URLを使用することもできます。サブモジュールはGithubですべて利用できるからです。

GitはORIGINに対して相対URLを解決します。言う - - 原点が設定されているHTTPS経由でクローニングする場合次に

[submodule "lib/es5-shim"] 
     path = lib/es5-shim 
     url = ../../kriskowal/es5-shim.git 
[submodule "build/html"] 
     path = build/html 
     url = ../clonejs.git 

:相対URLで置き換え

[submodule "lib/es5-shim"] 
     path = lib/es5-shim 
     url = [email protected]:kriskowal/es5-shim.git 
[submodule "build/html"] 
     path = build/html 
     url = [email protected]:quadroid/clonejs.git 

:あなたの.gitmodulesから最初の2つのエントリを使用して

例このように:

$ git clone https://github.com/quadroid/clonejs.git 
$ cd clonejs 
$ git remote -v 
origin https://github.com/quadroid/clonejs.git (fetch) 
origin https://github.com/quadroid/clonejs.git (push) 

ssh経由でクローンを作成する場合:相対URLで

$ git clone [email protected]:quadroid/clonejs.git 
$ cd clonejs 
$ git remote -v         
origin [email protected]:quadroid/clonejs.git (fetch) 
origin [email protected]:quadroid/clonejs.git (push) 

、通常のサブモジュールのシーケンスが起源とは独立して動作します:

$ git submodule init 
$ git submodule update 
+0

私の場合、相対URLの作業は非常にうまくいっています。これはおそらくパブリックreposの最も洗練されたソリューションです。このテクニックを考えてくれてありがとう! – matanster

+0

しかしながら、それはgithubのgithubページへのgithubの自動ハイパーリンクを解除するようです。 – matanster

+0

これはプライベートサブモジュールでは機能しません。 travisは、プライベートトークンを使ってリポジトリにアクセスしているという事実を隠しているようですが、サブモジュールをクローンするときにはそうしません。 –

0

あなたはまた、単に直接git経由で.gitmodulesファイルを操作することができます。 (Inspired by this answer)。

のgitにサブモジュールのURLを変更することにより、固定
git config --file=.gitmodules submodule.SUBMODULE_PATH.url https://github.com/ORG/REPO.git