Git在合并中删除文件

时间:2015-09-07 11:46:34

标签: git merge

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

我有一个可在大约5个客户端上重复使用的Web代码库。大多数代码都是相同的,但是例如有一些配置文件和一个每个客户端都有的uploads文件夹。

所以,我开始尝试创建一个解决方案,允许我打包每个站点,而不必每次都手动上传自定义文件。

以下是我的工作:

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

就在这时我才陷入困境。合并只会删除除自定义文件之外的所有文件,我希望它只需合并自定义文件并保留仅从master复制的checkout文件。

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

2 个答案:

答案 0 :(得分:1)

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

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

Git merge不会将文件组合在一个分支中,它会组合提交。因此,因为您与“删除重复项,其余文件是唯一/自定义”的提交合并,所以合并也是如此。

我认为你将不得不手动将自定义文件复制到新分支。除非你在某处只提交自定义文件,否则你可以在新分支中挑选该提交。

答案 1 :(得分:1)

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

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

而不是配置文件,在git上放置带有示例配置的 dist 文件。例如,如果您的配置文件名是 config.ini ,那么在Git上放置一个 config.ini.dist ,其中包含与配置文件相同的结构,但带有假值(您不希望您的服务器凭据在您的版本控制系统上。 然后,当您部署到服务器时,将dist文件复制到配置文件的真实名称,并使用正确的值进行编辑。

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

我认为这就是你在这里尝试做的事情。 从master创建一个分支,并使用适当的配置文件值编辑此分支中的配置文件。不要触摸任何其他文件(并且不要删除它们!!)。 您永远不会将这些分支合并回主人。 继续处理其他分支上的错误修正和功能,并合并为主。

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