Composer - 使用本地存储库

2024-03-11

我是一名 Composer 初学者,我试图使一个项目依赖于另一个项目,而这两个项目仅存在于我的本地计算机上。

我的库项目(ProjectA)中的composer.json是:

{
    "name" : "project/util",
    "type" : "library"
}

我在这个项目的基本文件夹中初始化了 git。

我的composer.json在项目中取决于第一个(ProjectB):

{
    "repositories": [
        {
            "name" : "util", 
            "type" : "git",
            "url" : "/d/workspaces/util"
        }   
    ],

    "require": {
        "project/util" : "*"
    },
}

当我跑步时composer install从 ProjectB 中,我收到以下错误:

[RuntimeException]
Failed to clone , could not read packages from it
fatal: repository '' does not exist

我认为存储库的 url 有问题,但我不确定还可以在那里写什么。


使用composer自动加载本地包(无需每次更改时都去packagist)。

有很多方法可以做到这一点,我将介绍其中的 2 种:

在所有情况下,我们都有两个主要参与方:
- the 本地包(我们不想在 packagist 上发布代码以便能够在我们的项目编辑器中自动加载它)。
- the 主要项目(需要使用本地包代码的代码库可以是另一个包和/或任何项目)。


方法一:(直接命名空间)

打开主项目composer.json文件并使用任何方法(PSR-4、PSR-0、...)自动加载本地包命名空间。

example:

如果在本地包的composer.json中我们有:

  "autoload": {
    "psr-4": {
      “Local\\Pack\\": "library"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Local\\Pack\\Tests\\": "tests"
    }
  },

然后在主项目的composer.json中我们应该有:

  "autoload": {
    "psr-4": {
      "Mahmoudz\\Project\\": "src",
      "Local\\Pack\\": "../path/to/local/pack/library”                   << referencing the other local package
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Mahmoudz\\Project\\Tests\\": "tests"
    }
  },

优点:
- 您不触摸供应商目录(错误地运行作曲家更新不会覆盖您的本地更改)
- 您不需要将包放在 packagist 上即可使用它
- 您在一个地方(本地包)工作,所做的更改会自动加载到主项目中
缺点:
- 您无法在生产中发布composer.json(需要在发布之前进行编辑以需要真正的包)

方法二:(本地仓库)

从本地存储库下载本地包。

本地包:
1. 初始化包中的git(即使你不想使用它 - 无需提交任何内容)
2.添加composer.json文件。在文件中确保您具有以下内容:

"name": "vendor-name/package-name",  

"autoload": { …   // use whichever method you prefer, but make sure it’s being loaded correctly

"minimum-stability": "dev"  
  1. composer dump-autoload

主要项目:
1. 编辑您的composer.json以包含以下内容:

  "repositories": [
    {
      "type": "vcs",
      "url": "/full/path/to/the/local/package/package-name"
    }
  ],
  "require": {
    "vendor-name/package-name": "dev-master"
  },
  1. 作曲家更新供应商名称/包名称
  2. 现在检查您的供应商目录,您应该看到供应商名称/包名称

注意:每当您在本地包(而不是供应商)中进行更改时,您都需要 git commit 然后您可以编写器更新主项目,它将获得存储库的最新副本到主项目供应商目录。

优势:
- 你不接触供应商目录(错误地运行composer update不会覆盖你的本地更改) - 你不需要你的包在packagist上就可以使用它
坏处:
- 您必须继续提交更改(在本地包中),然后在主项目中运行composer update
- 您无法在生产中发布composer.json(需要在发布之前进行编辑以需要真正的包)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Composer - 使用本地存储库 的相关文章

  • Visual Studio 2013删除已删除的git分支

    我遇到这个问题 在 VS2013 中 当我从源创建一个新分支时 源分支的下拉列表列出了曾经创建的所有分支 这包括长期从本地存储库和远程 源存储库中删除的分支 如何删除已删除的分支 Visual Studio 将它们保存在本地缓存中 您可以从
  • 忽略提交之间 git-diff 的*所有*空白更改

    我正在检查代码库并修复空白奇怪之处并通常纠正缩进等事情 并且我想确保我没有无意中进行任何其他更改 所以我正在做git diff w显示所有已更改文件中的差异 同时忽略空白差异 问题是这实际上并没有忽略all空白差异 至少是什么I认为仅仅是空
  • 我可以将 Azure Dev Ops 构建定义同时用于发布管理管道和拉取请求,但后者不会触发管道吗

    简而言之 我们希望使用构建定义来生成用于发布管理的工件并检查拉取请求 但不允许后者触发新版本 我们在 Git Repo 上有 CI 构建定义 将工件输入到发布管理管道中 与许多团队一样 我们也设置了 Pull 请求来保护我们的 git ma
  • 获取签出修订版的 git 标签?

    我正在做 git tag current tag example to test task git checkout tag example to test task HEAD is now at 75fdde3 commit commen
  • 如何在 git 中删除 subversion 远程?

    我有一个最初使用 git svn 创建的 git 存储库 现在我有一个推送到的 git 服务器 但 svn 存储库已丢失 我可以删除 svn 远程吗 如何 您可以编辑 git config文件并删除与要删除的遥控器关联的部分 您要删除的行可
  • Git 子模块在 Windows 上更新缓慢

    Git 子模块在 Windows 上似乎非常慢 为了测试性能 我创建了 3 个裸存储库并向它们提交了 3 条独立消息 未存储文件 然后 我将每个裸存储库作为子模块添加到新的 git 存储库中 并执行子模块更新 花费了 5 秒多的时间 当使用
  • git push origin 分支名总是推送到 master

    我搜索了一下 但似乎找不到答案 在我可以访问的两个盒子上 当我执行 git push dry run origin mytestbranch 时 我得到以下结果 To email protected cdn cgi l email prot
  • emacs 临时文件的 .gitignore 正则表达式

    我正在尝试 gitignore emacs 临时 自动保存文件 我在用着 在我的 gitignore 中 But git add A在子文件夹中运行仍然给我 new file make collections py new file nor
  • Yii2 Composer 管理 Bower 和 Bower-vendor 中的包

    我已经使用 yii2 一段时间了 但我不知道如何管理我的包 在这方面我有两个问题 当我将包添加到 yii2 时 它会在vendor bower bower assets 中下载 当 yii2 发布包时 它会在vendor bower下查找资
  • git 提交消息的 vim 语法高亮显示 - 自定义 commentchar

    如上所述在这个答案中 https stackoverflow com a 14931661 835945 从 Git 1 8 2 开始你可以使用core commentchar配置值将提交消息注释更改为默认值以外的其他内容 哈希标记或哈希符
  • 从分离的头进行 Git 推送

    我以超然的态度做出了一些改变 我想用 Git 将这些更改推送到这个独立的头 我不希望我的更改进入开发分支 当然也不想进入主分支 我正在与另一个人一起处理一个文件 分支示例 develop master HEAD detached at or
  • git-svn --忽略路径

    我现在在 git svn 的 ignore paths 选项上挣扎了几个小时 试图从大型存储库中仅获取某些标签 我想在 dev 处开始获取 看起来像 gt svn ls http 192 168 0 2 svn repo corporati
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • 是否存在比 SVN 更快的集中版本控制?

    我已经使用 SVN 很长时间了 现在我们正在尝试使用 Git 我在这里谈论的不是中心化 去中心化的争论 我唯一关心的是速度 后一个工具要快得多 但有时 我需要使用一种集中式方法 这种方法比分散式方法更简单 更简单 学习曲线非常快 这节省了大
  • 如何预览 Git 中的隐藏内容?

    我想检查一个存储 并找出如果我将其应用于当前状态的工作树 它会发生什么变化 我知道我可以对存储进行 git diff 但这向我展示了工作树和存储之间的所有差异 而我只是想知道存储应用将改变什么 git stash show将向您显示最近存储
  • 安全性:我应该将供应商目录和composer.json移到文档根目录之外吗?

    刚刚开始与作曲家合作 用作曲家将一些东西安装到我的
  • 如何查看上次提交和现在之间发生了什么变化(进行一些更改后)

    与此类似question https stackoverflow com questions 1552340 how to list the file names only that changed between two commits但
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • Windows 版 GitKraken 中的文件名太长

    正如建议的Q22575737 https stackoverflow com a 22575737 6623589 我已经更新了我的注册表并设置了git config system core longpaths true在处理长路径时 问题
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有

随机推荐