Git,分支和合并。什么是正确的工作流程?

时间:2014-09-02 14:17:45

标签: git workflow git-branch

我知道这个话题已经接近很多次,但我仍然无法理解我必须做的正确的事情,请原谅我的重复。

情况如下:

我将在几天内推出一个网站,因此我希望能够在不影响在线版本的情况下处理代码。所以我正在使用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,但我不确定是否可能。所以我回到了我对常规工作流程的误解。

感谢您的澄清......

2 个答案:

答案 0 :(得分:0)

从版本控制中排除这些文件,因为您不会经常更改这些文件。你必须分开维护它们。使用gitignore或Git: Ignoring Version-Controlled Files

好的答案就在这里: Is it possible to exclude specific commits when doing a git merge?

答案 1 :(得分:0)

这是一个应该有效的策略:

更改.htaccess文件时,请确保单独提交此更改(即仅包含此文件的提交)。

合并这样的提交时,总是从local分支执行此操作(以确保错误永远不会破坏您的服务器)。所以工作流程就像这样:

  1. 结帐master
  2. 合并所有内容local - >没有master提交的.htaccess分支(即在之前合并所有提交)。
  3. 切换到local
  4. 使用合并策略ours将单个提交从主服务器合并到本地。这基本上告诉Git:" local现在与master"合并无需修改任何文件。
  5. 结帐master
  6. 合并其余的
  7. 另一种方法是拥有.htaccess个文件(名称不同),并将正确的文件复制到服务器启动脚本中的.htaccess

    另一个好主意是在服务器的启动脚本中的某处添加一个测试,用于检查" local" .htaccess中的模式,以确保您在错误文件处于活动状态时快速注意到。