背景:我们使用GIT作为PHP部署系统(除SCM功能外)。一旦我们拥有稳定的源代码版本,我们就会启动一个在生产服务器中执行的脚本,以与最新版本同步。此生产服务器有两个分支:
注意:主存储库有更多分支,程序员有更多分支,但生产中使用的唯一分支是 master ,另一个被忽略且不同步。< / p>
问题:在不同服务器中有大约100个源代码副本,配置不同,并且有一个独特的脚本可以启动所有“本地”脚本。到目前为止,本地脚本从未失败,因为它的简单性,不仅仅是:
git checkout master
git pull
git checkout pro
git rebase master
(我删除了所有非GIT命令和错误检查)
但现在所有脚本都失败了,因为我们在主存储库中进行的更改与每个本地 pro 分支所做的更改之间存在冲突(请记住 pro branch不是共享的,只是本地存储一些配置。)
具体地说,当我们在这个名为' config.php '的文件中更改了几行时出现了问题:
$db_user = 'user';
$db_password = 'password';
到此:
$db_user = 'other-user';
$db_password = 'other-password';
当脚本执行' rebase '时, pro 分支中会出现冲突,因为生产服务器对这些变量具有不同的值:
$db_user = 'pro-user';
$db_password = 'pro-password';
当然,冲突很容易“手动”避免忽略来自存储库的“新配置”( pro 配置不应该更改)。
问题是:我怎样才能避免这种冲突?因为每当我们发现这种冲突时,我们不想手动解决每个ŝerver上的冲突。如果有必要,临时或永久解决问题,我们可以毫无问题地更改脚本。
答案 0 :(得分:2)
如果您希望通过自动选择pro
的提交内容来覆盖冲突,请在结帐pro
后运行以下参数:git rebase -X theirs master
。
请注意,side在merge和rebase之间切换,因此当重新定位 - ours
变为master
时,theirs
是您当前分支中不在{master
内的提交1}}。这有点违反直觉。
答案 1 :(得分:1)
如果您不特别关注这些用户名和密码的安全性,可以选择在每台计算机上使用相关的用户/密码设置环境变量。例如,在你的.bashrc文件或每台机器的等效文件中,输入
export SERVER_USER="usernamehere"
export SERVER_PASS="passwordhere"
然后在您的PHP代码中,使用getenv()
调用环境变量:
$db_user = getenv('SERVER_USER');
$db_password = getenv('SERVER_PASS');
答案 2 :(得分:1)
您是否真的需要在为每个环境分支的同一文件中进行此配置?我认为每个配置都有一个文件,让它们按设计分歧。这或多或少要求您可以隔离特定于配置的参数,以便应该影响所有配置的更改不需要更改数百个文件。
分支文件并将其分成两个或多个副本在概念上非常接近(并且某些版本控制系统不区分这两种情况)。在您的情况下,分支是正确的选择并不明显。