用于多个类似(但不完全相同)部署的版本控制工作流程

rs7*_*s77 7 git deployment version-control stylesheet reversion

我目前在一家小型非技术组织工作,并被赋予了编写组织网站的角色.虽然我很享受这项任务并且在网络开发方面学到了很多东西,但我遇到了一些问题,我希望有人可以帮助我,或者至少指出我正确的方向.

一点背景:

我工作的网站有子域,每个子域都有自己独立的WordPress安装 - 因为这是负责更新内容(等)的用户类型最简单的"后端"管理面板.

在组织内部,我在营销经理(MM)下工作,并根据他的风格指南和线框进行编码.

虽然我们从年初开始只使用一个子域,但项目相对简单明了.但是,最近工作流程变得有点复杂,因为我们的原始子域已被复制到其他子域.每个新子域都会对其样式表进行少量编辑(例如,背景的不同图片,此处和那里的颜色略有不同等).

问题:

目前管理所有不同的子域名一直是"可以忍受的",但是现在正在制造骆驼的吸管是MM现在已经看到最终产品所需要的轻微转变.我对样式表的逆转问题是,首席执行官将在一周内说他喜欢改变"X",然后作为MM和我继续修改网站(到现在的"Z"),将在另一周说明他希望我们将"X"更改为"W",但保留"Y"中的大部分更改.

我正在寻找的东西允许:

  • 跟踪文件更改
  • 恢复所做的更改(或从'e'恢复为'a',但包括更改'b'和'c')
  • 轻松上传必要的文件到他们各自的WP主题安装

那里有什么能解决这些问题吗?如果是这样,什么?

谢谢你的帮助!

PS - 我现在正在学习Git,它似乎很好地完成了"跟踪文件更改".但是,还没有了解到还原变化.也许对于我的最后一点,我正在考虑创建一个shell脚本来自动将文件上传到他们的文件夹.Git也这样做吗?


附录(alexbbrown)

我遇到了类似的问题:我运行了一个自定义版本的mediawiki,我在版本化的核心中安装了各种扩展(使用svn).每个扩展都需要confit文件中的一个部分,但confit文件还需要为每个部署进行本地配置.我本可以使用包含它来实现它,但它们不会被版本化; 每次重新分支是一件苦差事.+ g经验值得到一个很好的答案.

Mic*_*son 5

Git会让你做你需要的.

我将使用包含每个子域的单个存储库作为分支,因为根据我的经验,这将允许您以最简单的方式在子域之间移动更改.

我将假设一个结构,你有一个core分支,以及几个subdomainX分支,每个分支都有自己的本地变化来维护.我还假设您有一个develop分支,您可以在其中进行核心更改.

您需要执行以下几项关键操作:

你已经对所有子域进行了改进

将变化从发展转变为核心

git checkout core
git merge develop
Run Code Online (Sandbox Code Playgroud)

将更改应用于子域分支.对于每个子域运行

git checkout subdomainX
git rebase core
Run Code Online (Sandbox Code Playgroud)

或者如果你喜欢合并而不是rebase(我发现这个案子过于混乱 - 但其他人可能不同意)

git checkout subdomainX
git merge core
Run Code Online (Sandbox Code Playgroud)

如果你有很多子域分支,那么我会编写这个脚本.这会将名称中包含"subdomain"的所有本地分支重新绑定到core.

for i in $( git branch | cut -b 3- | grep subdomain ) ; do
   git checkout $i
   git rebase core
end
Run Code Online (Sandbox Code Playgroud)

您已在要扩展到所有其他子域的子域中进行了更改

首先,您需要要应用的更改的SHA(如果您还没有,请将其签入).

接下来,您将把这个变化拉入开发分支,然后进入 core

git checkout develop
git cherry-pick THE_SHA_OF_YOUR_CHANGE
git checkout core
git merge develop
Run Code Online (Sandbox Code Playgroud)

然后,您只需运行上面的脚本,将更改推送到所有子域分支.

你已经做了一些应该在任何地方撤消的变化

git checkout develop
git revert THE_BAD_SHA
git checkout core
git merge develop
Run Code Online (Sandbox Code Playgroud)

然后运行脚本.

您想要比较两个子域.

如果两个分支被调用subdomainA,subdomainB你可以这样做

git diff subdomainA subdomainB
Run Code Online (Sandbox Code Playgroud)

您想要查看subdomainA中的更改,但不是core- 即本地更改.

可以通过以下方式获取对文件的更改:

git diff subdomainA core
Run Code Online (Sandbox Code Playgroud)

实际的变更集列表

git log core..subdomainA
Run Code Online (Sandbox Code Playgroud)

处理分配

有两种方法可以解决这个问题:

  • 制作一个小脚本来复制每个分支的文件(我rsync用来避免复制现有文件等).这样做的好处是它很快,并且不需要在部署到的服务器上使用git.
  • 使每个子域文件成为git存储库的副本.然后,您的脚本将ssh到每个框并拉/合并文件.这样做的一个优点是您可以对实时服务器进行更改,并轻松将其重新导入存储库.缺点包括您需要将bare存储库设置为所有存储库的原点,并且它将占用更多空间.(然而,IMO在这种情况下的优势超过了缺点,我会使用这种方法).

  • @AlexBrown用什么方式?你对这种任务有什么样的界面.IMO就像你能得到的一样简单.它可以防止在版本之间手动复制错误.它允许轻松回滚,只有它没有解决的是能够推动各种wordpress安装. (2认同)