【问题标题】:Push Submodule to GitHub将子模块推送到 GitHub
【发布时间】:2017-06-07 08:41:36
【问题描述】:

我在使用 composer 安装组件后将所有代码推送到 GitHub 时遇到问题。这是当前的设置:

  1. GitHub 存储库已创建。
  2. 在本地和项目文件上克隆了存储库。
  3. 有一个遥控器叫做“origin”。
  4. 使用“composer require”添加的组件。组件已成功安装到项目子文件夹。
  5. Composer 创建了一个带有两个遥控器的 git 子模块(在此子文件夹中)。 (a) 指向组件作者 github url 的“origin”。 (b) "composer" 指向同一个 url 并且没有推送 url。
  6. 项目已成功推送到 GitHub,但未推送包含组件文件的 git 子模块。
  7. 如果我尝试将组件推送到项目“原点”,我会收到错误消息“更新被拒绝,因为远程包含您在本地没有的工作”。

如何将这个 git 子模块组件代码放入我的 GitHub 存储库? GitHub中的文件夹是空的。

【问题讨论】:

  • 我很困惑。为什么你想让composer require'd 组件出现在 Github 上?除了composer.json 中的一行和composer.lock 中的几行之外,它不应成为您项目的一部分。
  • 该组件需要在github中部署到服务器。但是,可以将部署任务更新为运行“composer install”,而不是将 /vendor 文件添加到存储库。
  • 是的,你应该这样做。 vendor 不应签入。
  • 开发社区似乎对供应商文件夹是否应该在存储库中存在分歧。赞成和反对都有合理的论据。
  • 我从来没有遇到过任何主要的 PHP 开发社区支持签入vendor。默认情况下,.gitignoreSymfonyLaravelCodeIgniterSlimKohana 等中将其明确排除在版本控制之外。

标签: git github


【解决方案1】:

确保您已将文件正确添加到舞台区域并提交。然后你可以尝试再次推送:

git add . #to add all files to stage
git commit -m "Your commit message here"
git push origin master #if master is your branch

一旦您说 GitHub 中的存储库是空的,您可以尝试强制推送

git push --force origin master

此外,有时在推送和文件在 GitHub 中可用之间存在微小延迟。

此外,您可以通过检查分支之间的差异来验证更改是否正确发送到 GitHub:

git diff --name-status master..origin/master

【讨论】:

    【解决方案2】:

    深入挖掘,我发现该组件已将自身安装为 git 子模块。我已经更新了问题以反映这一点。标准的 git push 没有将它部署到 github。我可能需要做一个“git push --recurse-submodules=on-demand”(或类似的)。

    但为了简单起见,我决定删除子模块。必须运行以下命令来删除子模块引用。

    git rm --cached [path to submodule]
    

    此外,installation.json 显示“安装源”= 源。其他模块有值 dist。所以我删除了所有组件文件并运行以下命令强制composer安装组件dist。

    composer require [component] --prefer-dist
    composer install --prefer-dist
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2016-09-03
      • 2021-03-18
      • 2017-10-05
      • 2021-07-25
      • 1970-01-01
      • 2021-01-31
      相关资源
      最近更新 更多