codeigniter 仅将特定代码推送到不同的存储库

omjgkv6w  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(95)

我有一个Codeigniter项目,需要两个不同的存储库:一个用于我的团队的本地开发(bitbucket),一个用于我的客户端的部署(gitlab)。我正在寻找简化从一个repo到另一个repo的更改的方法。
我的问题:对于本地开发,我需要一些不想推送到客户端服务器的文件(composer,package.json,...),反之亦然(deploy.php,来自gitlab-ci的yml文件),但是大多数文件都是相同的,只由我和我的团队修改。
根据我所读到的,简单地添加第二个git-remote是行不通的,因为我不能有两个gitignore文件。我从来没有使用过git子模块,但据我所知,它需要子文件夹,并且不同repos的文件需要在根目录下。我理解的对吗?
是否有办法在特定方向/远程存储库中仅推送特定文件?

sdnqo3pr

sdnqo3pr1#

是否有办法在特定方向/远程存储库中仅推送特定文件?
不。但你的假设是错误的:实际上,Git根本不存储 files。相反,Git存储的是 commits。每次提交:

  • 是编号的,具有唯一的散列ID;
  • 包含两项内容:* 每个 * 文件的完整快照和一些元数据。

因此,每次提交都存储文件,但使用git push传输的不是单个文件,而是整个提交。
一个 * 存储库 * 的核心就是两个数据库:

  • 第一个也是最大的数据库包含提交和其他支持对象。通常你选择一个特定的提交-使用它的哈希ID,但看到下一个点-然后用git checkout“ checkout ”它,或者用git switch“切换”到它。这会从那个特定的提交中提取 * 所有 * 文件,现在 * 你就有了文件。但是在你完成这一步之前,你所拥有的只有提交。嗯,提交,支持对象,还有......
  • 第二个数据库包含 names: 分支名称、标记名称和各种其他名称。特别是分支名称总是持有 commit hash ID(一些名称可以并且有时确实持有支持对象的hash ID,然后导致可用的提交)。

如果你有两个存储库,那么你就有两个这样的数据库对。如果你想建立一个区域,把从两个不同存储库中的两个不同提交中提取出来的文件放在一个混合区域中,你可以这样做。但这并不是 Git 所擅长的。2 Git“喜欢”工作区包含 * 一次提交的文件在一个仓库中 *。这样,您所做的任何更改都可以存储到一个 * 新 * 提交中,(一个)存储库,其中包含一个简单的git addgit commit。不要使用Git本身将两组文件混合在一起。相反,建立两个独立的Git存储库,分别使用它们,并使用你获得或编写的一些附加软件,读取两个独立的Git工作区(或者直接从两个仓库中提交),然后用你喜欢的规则将它们混合在一起。
例如,考虑当左边的快照L包含文件ABC/D,而右边的快照R包含文件BFC/D时,您将需要决定做什么,并且,如果 fileC要出现在混合在一起的位置中,你很可能不能同时拥有一个包含D文件的 folderC(这种复杂性也是Git不这么做的原因之一)。

相关问题