【问题标题】:GitHub: Is it possible to have a repository out of repositories?GitHub:是否可以在存储库中创建存储库?
【发布时间】:2012-06-01 17:55:39
【问题描述】:

我将我的 php 项目存储在一个私人 GitHub 帐户下。

例如,现在我有不同的组件(新闻包、用户包等)和一个将所有组件一起使用的项目(例如自定义网站)。我可以以某种方式对它们进行符号链接吗?

或者我应该只使用组件存储库吗?

问候

编辑:

对于 symfony2 项目,大多数情况下都有一种简单的方法可以做到这一点。 总有一些组件在父存储库中也可用。

例如:https://github.com/symfony/OptionsResolver

symfony/OptionsResolver->syfmony/symfony->symfony/标准版

【问题讨论】:

    标签: git symfony github


    【解决方案1】:

    您可能想看看子模块。

    http://git-scm.com/book/en/Git-Tools-Submodules

    【讨论】:

    • 这是唯一的解决方案吗? symfony2 项目通常使用分层存储库。知道他们如何处理这个吗? github.com/symfony/OptionsResolver 子模块也不好处理
    【解决方案2】:

    您可以使用composer 来处理依赖关系。这不会像子模块那样将子项目锁定到特定的提交。 Symfony 使用作曲家。

    【讨论】:

    • 嗨,我自己使用作曲家(主分支)。问题是我如何像 symfony 那样在一个项目中处理不同的 git。因此,例如,我将整个项目作为存储库,将独立包作为存储库。我该怎么做才能用 git 处理这个问题?
    • 在 github 中的 symfony2 组件上方有以下通知:[只读] Symfony Twig Bundle 的子树拆分 -- 克隆到 Symfony/Bundle/TwigBundle (master at symfony/symfony)
    【解决方案3】:

    如果您只想将来自不同存储库的所有文件导入另一个存储库,并能够根据需要更新它们,我相信您可以简单地将所有其他存储库添加到主存储库作为远程存储库。

    显然,在尝试此操作之前备份所有内容,但我认为您只想使用“git remote add [其他存储库的任意名称] [其他存储库的位置]”,“git fetch [其他存储库的任意名称]”和“获取合并 [其他存储库的任意名称]/[其他存储库的分支]”。您可以使用任意数量的不同存储库来执行此操作。例如,我所有的存储库现在都是作为构建它们的框架的存储库的克隆开始的。我的项目与框架没有任何关系,只是碰巧将其用作起点,这并不重要。

    所以你想要这样的东西:

    git remote add news-bundle git://example.com/news-bundle.git
    git merge news-bundle/master
    git remote add user-bundle git://example.com/user-bundle.git
    git merge user-bundle/master
    

    然后,当您对 news-bundle 进行了更多更改时,您可以像这样更新其他存储库:

    git fetch news-bundle
    git merge news-bundle/master
    

    【讨论】:

      【解决方案4】:

      我在 Symfony 2 Git 项目中处理依赖项的方式是这样的:

      主要项目在 Git 下。外部依赖项(Bundles 和所有供应商的东西)进入 .deps 文件(或 composer.json)。然后我运行php bin/vendors installcomposer install 来安装依赖项。

      依赖项将作为 Git 存储库安装,因此,如果我愿意,我可以 cd 进入它们并在那里提交并在我有权限的情况下推送它。这使得编辑您自己的包变得更容易,无需克隆单独的包存储库就可以在那里进行更改。

      我也有这个结构:

      src\Company\SharedBundle
      src\Company\ProjectBundle
      

      其中SharedBundle被简单指定为依赖,目标安装路径在src\Company下。

      我在所有项目中都使用SharedBundle。如果我需要对其进行更改,我会在其中一个项目中进行更改,然后我cd src\Company\SharedBundle,提交并推送它,并在我需要更改时从所有使用它的项目中提取。

      使用deps,您可以进行如下定位:

      [AcmeAwesomeBundle]
          git=http://github.com/johndoe/Acme/AwesomeBundle.git
          target=../src/Acme/AwesomeBundle
      

      如果你使用 Composer,你可能想要这个:http://getcomposer.org/doc/01-basic-usage.md#autoloading

      【讨论】:

      • 嗨,这就是我要找的!但仍有一些问题: 1. 所以当我 cd 进入一个子 git 项目的根目录时,git 会自动更改存储库(用于推送等)。没有什么可做的吗? 2.你在哪里设置git依赖的目标目录(我假设bundle在主composer.json中注册并且dir在bundle的composer.json中设置,但是我如何直接设置提取目录?)
      • @user1246987 1) 是的,对于第二个答案,我已经更新了我的答案。
      • 不幸的是,我在作曲部分失败了。 composer 将私有包安装到 /src 需要哪些步骤?编辑:但是,当我手动创建 git 存储库并将其与 IDE 一起使用时,它工作得非常好。不需要作曲家..唯一可以更好的是主项目也应该查看组件。目前只有一个迹象表明子目录属于另一个仓库
      猜你喜欢
      • 1970-01-01
      • 2015-07-09
      • 2022-11-20
      • 2021-07-22
      • 2012-10-05
      • 2021-08-07
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多