使用作曲家作为我自己最新代码的存储库,但是.git阻止提交代码

时间:2019-06-21 13:36:49

标签: git composer-php gitignore

我有自己的代码库,希望将其提供给开发环境。这个想法是,在任何开发项目中,我都可以随意升级或降级我的库。

Composer似乎是实现此目的的理想工具,但是我发现我必须与该工具抗衡才能实现我想要的功能。

我想完成的事情:

  1. 保持我的库独立于每个应用程序。
  2. 将我的库插入应用程序,可以随意选择版本
  3. 使用git flow(develop / feature / hotfix / master)跟踪应用程序的版本
  4. 将应用程序的master分支推送到生产环境(使用钩子检出master)

最后一点很重要:主机中所做的任何事情都是官方生产代码。当我将其推送到生产服务器时,生产代码恰好是在主服务器中提交的代码。

Composer显然不同意这种想法,因为他们坚持认为您不应在/ vendor中进行任何操作。这意味着您显然也必须在生产服务器上运行composer。 由于公司的限制,现在对我来说这不是一个选择

所以我遇到的问题是,作曲家会自动在我的库中克隆一个.git文件夹。这样可以防止我的应用程序的git看到该文件夹​​。

作曲者的文档说明:

  

如果您确实必须执行此操作,则可以选择以下几种方式:

     
      
  1. 仅限于安装带标签的发行版(无开发版本),这样您只能进行压缩安装,并避免git“ submodules”出现问题。
  2.   
  3. 在配置中使用--prefer-dist或将preferred-install设置为dist。
  4.   
  5. 安装后删除每个依赖项的.git目录,然后可以将它们添加到git存储库中。您可以使用ZSH中的rm -rf vendor/**/.git或Bash中的find vendor/ -type d -name ".git" -exec rm -rf {} \;来做到这一点。但这意味着您必须在运行composer更新之前从磁盘上删除这些依赖项。
  6.   
  7. 添加.gitignore规则(/vendor/**/.git)以忽略所有供应商.git文件夹。这种方法不需要在运行作曲家更新之前先从磁盘上删除依赖项。
  8.   

到目前为止,对我唯一有用的是选项3,手动删除.git文件夹。没关系,除非我担心某天的2:00有点困,否则如果我删除了错误的.git ... kes!


我尝试过的事情:

.gitignore,已提交(最后两个条目只是出于绝望)

/vendor/**/.git
/vendor/**/.git/**
vendor/**/.git

composer.json

{
    "name": "crud-package/project-name",
    "description": "Loading just CRUD package",
    "require": {
      "crud/core":"^1.3.1"
    },
    "repositories": [
      {
        "type":"vcs",
        "url":"//path/to/composer_projects/crud"
      }

    ],

    "autoload": {
        "classmap": [
          "vendor/crud/core"
        ]
    },
    "config": {
        "preferred-install": "dist"
    }

}

然后使用

安装
$ cmd //c composer update --prefer-dist
Loading composer repositorUpdating dependencies (including require-dev)         Package operations: 1 install, 0 updates, 0 removals
  - Installing crud/core (v1.3.2): Cloning b734c2dfb6 from cache
Writing lock file
Generating autoload files

我是否缺少明显的东西,为什么唯一起作用的是#3?还有什么我可以尝试的吗?如果我无法让作曲家不要将.git文件夹放在那里,怎么办?

我希望的解决方案是让git忽略.git文件夹以及我真正不需要的所有composer自动加载内容。

0 个答案:

没有答案