如何将私有github存储库添加为Composer依赖项

时间:2016-11-15 20:46:51

标签: php git laravel github composer-php

我在Laravel 5.1项目composer.json中有以下内容,将公共github存储库添加为依赖项。

...    
"repositories": [
  {
    "type": "package",
    "package": {
      "name": "myVendorName/my_private_repo",
      "version": "1.2.3",
      "source": {
        "type" : "git",
        "url" : "git://github.com/myVendorName/my_private_repo.git",
        "reference" : "master"
      },
      "dist": {
        "url": "https://github.com/myVendorName/my_private_repo/archive/master.zip",
        "type": "zip"
      }
    }
  }
],
"require": {
     ....
    "myVendorName/my_private_repo": "*",
},
...

只要存储库是公共的,这就可以工作。现在我将此存储库设置为私有。我用来拉/推到'my_private_repo'的git凭证是该项目的合作者之一。当我运行 composer update composer install 时,如何从该私有存储库中获取该作曲家?

4 个答案:

答案 0 :(得分:27)

在GitHub和BitBucket上使用私有存储库:

<强> JSON

{
    "require": {
        "vendor/my-private-repo": "dev-master"
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "git@bitbucket.org:vendor/my-private-repo.git"
        }
    ]
}

唯一的要求是为git客户端安装SSH密钥。

Docs

答案 1 :(得分:12)

我希望我的回答不会太晚,因为我刚刚学会了这一点。还进入了我的博客:https://keevitaja.com/posts/using-github-private-repositories-as-composer-dependencies

生成ssh密钥

您可以使用ssh-keygen命令生成n + 1个ssh密钥。确保在服务器中执行此操作!

➜  ~ cd ~/.ssh
➜  .ssh ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): repo1
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in repo1.
Your public key has been saved in repo1.pub.
The key fingerprint is:
SHA256:EPc79FoaidfN0/PAsjSAZdomex2J1b/4zUR6Oj7IV2o user@laptop
The key's randomart image is:
+---[RSA 2048]----+
|      . . o ..   |
|       o B o ..  |
|      . + B o  . |
|       . * B = .o|
|        S B O B+o|
|         o B =.+*|
|          o....Bo|
|            o E.o|
|             +.o |
+----[SHA256]-----+

使用ssh-keygen命令后,系统将提示您输入文件名和密码。您需要为每个将用作作曲家依赖关系的私有存储库的密钥。在此示例中,repo1是文件名。

  

确保将密码短语留空。

配置ssh以获取正确的密钥

在服务器〜/ .ssh / config文件中,您可以为每个GitHub存储库分配别名。否则,composer会尝试使用默认的id_rsa。

Host repo1
HostName github.com
User git
IdentityFile ~/.ssh/repo1
IdentitiesOnly yes

Host repo2
HostName github.com
User git
IdentityFile ~/.ssh/repo2
IdentitiesOnly yes

配置Composer

在项目composer.json文件中,您需要添加所需的存储库作为依赖项:

"repositories": [
    {
        "type": "vcs",
        "url": "repo1:YourAccount/repo1.git"
    },
    {
        "type": "vcs",
        "url": "repo2:YourAccount/repo2.git"
    }
],

repo1和repo2是您在〜/ ssh / config文件中创建的别名。 repo1的完整GitHub ssh url将是:

git@github.com:YourAccount / repo1.git

现在你应该做好。您现在可以要求您的依赖项:

composer require youraccount/repo1 -n

composer require youraccount/repo2 -n

  

NB!当使用GitHub存储库作为编辑器依赖项时,您总是需要为每个编写器命令添加-n。

答案 2 :(得分:0)

1。指向Git存储库

更新composer.json并添加一个存储库:

    "repositories":[
      {
        "type": "vcs",
        "url": "git@github.com:vendor/secret.git"
      }
    ]

2。创建SSH密钥

在要安装该软件包的计算机上创建一个SSH密钥。

如果在开发计算机上工作,则可能要将SSH密钥添加到GitHub / BitBucket / GitLab帐户。这样就可以访问您帐户有权访问的所有私有存储库。

  

有关如何添加Github,Bitbucket或Gitlab SSH密钥的更多信息,请参见此excellent article

如果要配置部署服务器,最好配置访问密钥或部署密钥。访问密钥仅提供对单个存储库的访问,因此可以进行更具体的访问管理。

3。运行作曲家

现在,仅作曲家就可以像平常一样要求或composer install包裹。

答案 3 :(得分:0)

在命令行中,可以使用以下命令配置存储库,让composer确保在composer.json文件中保留有效的json:

composer config repositories.my_alias \
    '{"type": "vcs", \
      "url": "git@git.example.com:my_repo.git", \
      "ssh2": { "username": "git", \
                "privkey_file": "/var/lib/jenkins/.ssh/id_rsa", \
                "pubkey_file": "/var/lib/jenkins/.ssh/id_rsa.pub" \
              } \
    }'

注意::我尚未使用引号属性内的''''行连续标记进行测试。我成功的测试包括在一条线上运行所有这些。但是我发现这种格式对于人类来说更容易理解。

更多说明:此命令将继续引发错误,直到您的ssh-keygen密钥对到位并且在回购中配置了公共密钥为止,如对此其他答案所述问题。

运行此命令的结果是我的composer.json文件中的以下条目:

    "repositories": {
        "drupal": {
            "type": "composer",
            "url": "https://packages.drupal.org/8"
        },
        "my_alias": {
            "type": "vcs",
            "url": "git@git.example.com:my_repo.git",
            "ssh2": {
                "username": "git",
                "privkey_file": "/var/lib/jenkins/.ssh/id_rsa",
                "pubkey_file": "/var/lib/jenkins/.ssh/id_rsa.pub"
            }
        }
    },

此用法记录在这里: https://getcomposer.org/doc/03-cli.md#config