我知道这个话题已经接近很多次,但我仍然无法理解我必须做的正确的事情,请原谅我的重复。
情况如下:
我将在几天内推出一个网站,因此我希望能够在不影响在线版本的情况下处理代码。所以我正在使用git。
我在bitbucket上做了一个名为MySite的回购。
这个回购作为两个分支。
我将代码推送到服务器的主人。 这个主分支具有.htaccess,sql访问,缩小JS等的特定值......
一个本地,我也有特定的.htaccess,sql,可以从我的本地主机上运行。
我会专注于.htaccess更容易理解。我当地的.htaccess与我的主人完全不同。
这意味着,我绝不能将Local与Master合并,因为如果本地.htaccess在prod上运行它会在服务器上运行,如果prod .htaccess在本地运行,我将无法访问localhost。
我会举一个例子。假设我想处理myScript.js。
我在Local分支上签出以访问未经授权的版本。
我创建了一个新的分支我的Script_mods然后我在这个分支上结帐。
我在myScript.js上工作,我提交文件来分支Script_mods。
(在这一步,我应该将Script_mods分支推送到Bitbucket吗?)
然后我签出分支本地并与Script_mods合并。这是为了能够保留提交的轨迹,并且在完成后可以删除Script_mods分支。
此时一切都很好。
然后我想更改prod代码,以便我签出Master并合并Script_mods。
出现此问题是因为我与.htaccess文件存在冲突。我不明白为什么,但我得到两种错误。
.htaccess不是推动但是我得到一些未合并的错误。 要么修改.htaccess,我需要重写它以使我的服务器再次运行。
这么长的故事简短,我想我完全错过了应该使用的工作流程,但看不出哪一步......
我希望能够创建一个仅包含我想要处理的特定文件的分支,然后将此分支合并到Local和Master,但我不确定是否可能。所以我回到了我对常规工作流程的误解。
感谢您的澄清......
答案 0 :(得分:0)
从版本控制中排除这些文件,因为您不会经常更改这些文件。你必须分开维护它们。使用gitignore或Git: Ignoring Version-Controlled Files
好的答案就在这里: Is it possible to exclude specific commits when doing a git merge?
答案 1 :(得分:0)
这是一个应该有效的策略:
更改.htaccess
文件时,请确保单独提交此更改(即仅包含此文件的提交)。
合并这样的提交时,总是从local
分支执行此操作(以确保错误永远不会破坏您的服务器)。所以工作流程就像这样:
master
local
- >没有master
提交的.htaccess
分支(即在之前合并所有提交)。local
ours
将单个提交从主服务器合并到本地。这基本上告诉Git:" local
现在与master
"合并无需修改任何文件。master
另一种方法是拥有.htaccess
个文件(名称不同),并将正确的文件复制到服务器启动脚本中的.htaccess
。
另一个好主意是在服务器的启动脚本中的某处添加一个测试,用于检查" local" .htaccess
中的模式,以确保您在错误文件处于活动状态时快速注意到。