gpt4 book ai didi

git - 多个相似(但不相同)部署的版本控制工作流程

转载 作者:太空狗 更新时间:2023-10-29 13:01:46 24 4
gpt4 key购买 nike

我目前受雇于一家小型非技术组织,负责为该组织的网站编写代码。虽然我很享受这项任务并从网络开发中学到了很多东西,但我遇到了一些问题,我希望有人能够帮助我,或者至少为我指明正确的方向。

一点背景:

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

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

虽然自今年年初以来我们一直只使用一个子域,但该项目相对简单明了。然而,最近工作流程变得有点复杂,因为我们的原始子域已被复制到其他子域。每个新的子域都对其样式表进行了细微的修改(例如,不同的背景图片、各处颜色略有不同等)。

问题:

目前管理所有不同的子域是“可以忍受的”,但现在压垮 Camel 的最后一根稻草是 MM 在 CEO 看到最终产品后要求的轻微逆转。我在样式表中遇到的问题是,CEO 将在一周内声明他喜欢更改“X”,然后随着 MM 和我继续修改网站(到现在的“Z”),另一周会声明他希望我们将“X”更改为“W”,但保留“Y”中所做的大部分更改。

我正在寻找的是允许:

  • 跟踪文件更改
  • 还原所做的更改(或从“e”还原为“a”但包括更改“b”和“c”)
  • 轻松将必要的文件上传到各自的 WP 主题安装

有什么办法可以解决这些问题吗?如果是,是什么?

感谢您的帮助!

PS - 我目前正在学习 Git,它似乎可以很好地执行“跟踪文件更改”。不过,还没有了解恢复更改位。也许对于我的最后一点,我正在考虑创建一个 shell 脚本来自动将文件上传到他们的文件夹。 Git 也这样做吗?


附录(alexbbrown)

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

最佳答案

Git 会让你做你想做的事。

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

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

您需要能够执行几个关键操作:

您在开发中进行了更改,该更改应适用于所有子域

将开发中的更改 pull 入核心

git checkout core
git merge develop

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

git checkout subdomainX
git rebase core

或者如果您更喜欢 merge 而不是 rebase (我发现这种情况过于困惑 - 但其他人可能不同意)

git checkout subdomainX
git merge core

如果您有很多子域分支,那么我会编写脚本。这会将名称中包含“子域”的所有本地分支重新定位到 core 上。

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

您对子域进行了更改,并希望将其引入所有其他子域

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

接下来,您只需将该更改 pull 入开发分支,然后 pull 入 core

git checkout develop
git cherry-pick THE_SHA_OF_YOUR_CHANGE
git checkout core
git merge develop

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

你在 git 中做了一些应该在任何地方撤销的更改

git checkout develop
git revert THE_BAD_SHA
git checkout core
git merge develop

然后运行脚本。

您想比较两个子域。

如果这两个分支被称为subdomainAsubdomainB 你可以这样做

git diff subdomainA subdomainB

您想查看子域 A 中有哪些更改,但 core 中没有 - 即本地更改。

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

git diff subdomainA core

实际的变更集列表

git log core..subdomainA

处理分布

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

  • 制作一个小脚本来复制每个分支的文件(我会使用 rsync 来避免复制现有文件等)。这样做的优点是速度快,并且不需要在您要部署到的服务器上安装 git。
  • 使每个子域文件成为 git 存储库的副本。然后,您的脚本将通过 ssh 连接到每个框并提取/merge 文件。这样做的一个好处是您可以在实时服务器上进行更改并将它们轻松 pull 回到您的存储库中。缺点包括您需要设置一个 bare 存储库作为所有存储库的来源,并且会占用更多空间。 (但是 IMO 在这种情况下优势大于劣势,我会使用这种方法)。

关于git - 多个相似(但不相同)部署的版本控制工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11814499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com