繁体   English   中英

Git删除合并中的文件

[英]Git deleting files in merge

我是git的新手,正在尝试执行简单的合并,但似乎无法正常工作。

我有一个可在大约5个客户端上重复使用的Web代码库。 大部分代码是相同的,但是例如有一些配置文件和一个上载文件夹,这对于每个客户端都是唯一的。

因此,我着手尝试创建一个解决方案,该解决方案使我可以打包每个站点,而不必每次都手动上传自定义文件。

这是我的工作:

git checkout master
git checkout -b site1

删除除配置文件外的所有文件并上传文件夹

git commit -a -m "Removed duplicates, remaining files are unique/custom"
git checkout master
git checkout -b temp
git merge site1

在这一点上,我被卡住了。 合并只会删除除自定义文件以外的所有文件,而我想要做的就是简单地合并到自定义文件中,而只保留从checkout复制的master文件。

谁能告诉我如何阻止这种情况的发生?

因为您执行了git commit -a -m "Removed duplicates, remaining files are unique/custom" ,所以只有自定义文件保留在该分支中。

当然,当您与之合并时,它将删除除自定义文件以外的所有内容。

Git merge不会将文件合并到一个分支中,而是合并提交。 因此,由于您与“已删除重复项,其余文件是唯一的/自定义的”提交合并,因此合并也正是这样做的。

我认为您将必须手动将自定义文件复制到新分支。 除非您在某处提交仅添加自定义文件的提交,否则在这种情况下,您可以在新分支中挑选该提交。

对于特定于部署的文件,您有两种解决方案:

1-不要将配置文件放在Git上(首选)

代替配置文件,将带有示例配置的dist文件放在git上。 例如,如果您的配置文件名为config.ini ,则将config.ini.dist放在Git上,该结构包含与配置文件相同的结构,但具有假值(您不希望服务器凭据位于版本控制系统上)。 然后,当您部署到服务器时,将dist文件复制到配置文件的真实名称,并使用适当的值对其进行编辑。

2-为每个环境创建一个分支

我想这就是您要在这里做的。 从master创建一个分支,并在该分支中使用配置文件的适当值编辑您的配置文件。 不要触摸其他文件(也不要删除它们!)。 您将永远不会将这些分支合并回master。 继续处理其他分支上的错误修正和功能,并合并到master。

完成编码并准备好部署后,将master分支合并到每个特定于env的分支。 通过检出正确的分支来更新每台服务器上的代码。 这意味着您将在每个部署中进行大量合并,并将数据库凭据存储在版本控制系统(baaaad)中。 寻求第一个解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM