我有一个Codeigniter项目,需要两个不同的存储库:一个用于我的团队的本地开发(bitbucket),一个用于我的客户端的部署(gitlab)。我正在寻找简化从一个repo到另一个repo的更改的方法。
我的问题:对于本地开发,我需要一些不想推送到客户端服务器的文件(composer,package.json,...),反之亦然(deploy.php,来自gitlab-ci的yml文件),但是大多数文件都是相同的,只由我和我的团队修改。
根据我所读到的,简单地添加第二个git-remote是行不通的,因为我不能有两个gitignore文件。我从来没有使用过git子模块,但据我所知,它需要子文件夹,并且不同repos的文件需要在根目录下。我理解的对吗?
是否有办法在特定方向/远程存储库中仅推送特定文件?
1条答案
按热度按时间sdnqo3pr1#
是否有办法在特定方向/远程存储库中仅推送特定文件?
不。但你的假设是错误的:实际上,Git根本不存储 files。相反,Git存储的是 commits。每次提交:
因此,每次提交都存储文件,但使用
git push
传输的不是单个文件,而是整个提交。一个 * 存储库 * 的核心就是两个数据库:
git checkout
“ checkout ”它,或者用git switch
“切换”到它。这会从那个特定的提交中提取 * 所有 * 文件,现在 * 你就有了文件。但是在你完成这一步之前,你所拥有的只有提交。嗯,提交,支持对象,还有......如果你有两个存储库,那么你就有两个这样的数据库对。如果你想建立一个区域,把从两个不同存储库中的两个不同提交中提取出来的文件放在一个混合区域中,你可以这样做。但这并不是 Git 所擅长的。2 Git“喜欢”工作区包含 * 一次提交的文件在一个仓库中 *。这样,您所做的任何更改都可以存储到一个 * 新 * 提交中,(一个)存储库,其中包含一个简单的
git add
和git commit
。不要使用Git本身将两组文件混合在一起。相反,建立两个独立的Git存储库,分别使用它们,并使用你获得或编写的一些附加软件,读取两个独立的Git工作区(或者直接从两个仓库中提交),然后用你喜欢的规则将它们混合在一起。例如,考虑当左边的快照L包含文件
A
、B
和C/D
,而右边的快照R包含文件B
、F
和C/D
时,您将需要决定做什么,并且,如果 fileC
要出现在混合在一起的位置中,你很可能不能同时拥有一个包含D
文件的 folderC
(这种复杂性也是Git不这么做的原因之一)。