我目前在一家小型非技术组织工作,并被赋予了编写组织网站的角色。虽然我很享受这项任务,并且已经在网络开发方面学到了很多东西,但我遇到了一些问题,我希望有人可以帮助我,或者至少指出我正确的方向。
我工作的网站有子域,每个子域都有自己独立的WordPress安装 - 因为这是负责更新内容(等)的用户类型最简单的“后端”管理面板。
在组织内部,我在营销经理(MM)下工作,并根据他的风格指南和线框进行编码。
虽然我们从年初开始只使用一个子域,但项目相对简单明了。但是,最近工作流程变得有点复杂,因为我们的原始子域已被复制到其他子域。每个新子域都会对其样式表进行少量编辑(例如,背景图片不同,此处和那里颜色略有不同等)。
目前管理所有不同的子域名一直是“可以忍受的”,但是现在制造骆驼的那根稻草已经是MM现在已经看到最终产品所需要的轻微转变。我对样式表的逆转问题是,首席执行官将在一周内说他喜欢改变“X”,然后作为MM和我继续修改网站(到现在的“Z”),将在另一周说明他希望我们将“X”更改为“W”,但保留“Y”中的大部分更改。
我正在寻找的东西允许:
那里有什么能解决这些问题吗?如果是这样,是什么?
感谢您的帮助!
PS - 我现在正在学习Git,它似乎很好地完成了“跟踪文件更改”。但是,还没有了解到还原变化。也许对于我的最后一点,我正在考虑创建一个shell脚本来自动将文件上传到他们的文件夹。 Git也这样做吗?
附录(alexbbrown)
我遇到了类似的问题:我运行了一个自定义版本的mediawiki,我在版本化的核心中安装了各种扩展(使用svn)。每个扩展都需要confit文件中的一个部分,但confit文件还需要为多个部署中的每个部署进行本地配置。我本可以使用包含它来实现它,但它们不会被版本化;每次重新分支是一件苦差事。在git中获得+50的经验值达到+50。
答案 0 :(得分:5)
Git会让你做你需要的。
我将使用包含每个子域的单个存储库作为分支,因为根据我的经验,这将允许您以最简单的方式在子域之间移动更改。
我将假设一个结构,其中有一个core
分支,以及几个subdomainX
个分支,每个分支都有自己的本地更改来维护。我还假设您有一个develop
分支,您可以在其中进行核心更改。
您需要执行以下几项关键操作:
将更改从开发转移到核心
git checkout core
git merge develop
将更改应用于子域分支。对于每个子域运行
git checkout subdomainX
git rebase core
或者如果你更喜欢合并而不是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(如果您还没有,请将其签入)。
接下来,您将把这个更改拉入开发分支,然后进入core
git checkout develop
git cherry-pick THE_SHA_OF_YOUR_CHANGE
git checkout core
git merge develop
然后,您只需运行上面的脚本,将更改推送到所有子域分支。
git checkout develop
git revert THE_BAD_SHA
git checkout core
git merge develop
然后运行脚本。
如果两个分支被称为subdomainA
和subdomainB
,则可以执行
git diff subdomainA subdomainB
core
- 即本地更改。可以通过以下方式获取对文件的更改:
git diff subdomainA core
的实际变更集列表
git log core..subdomainA
有两种方法可以解决这个问题:
rsync
来避免复制现有文件等)。这样做的好处是它很快,并且在您部署的服务器上不需要git。bare
存储库作为所有存储库的原点,并且它将占用更多空间。 (然而IMO在这种情况下的优势超过了缺点,我会使用这种方法)。答案 1 :(得分:1)
Michael的答案很好,但我认为应该提到另一种观点:Branch by Abstraction(BBA)而不是传统的“源代码控制分支”。我认为您应该重新组织您的源代码,以便共享代码应该作为显式共享代码而不是通过魔术合并/ rebase共享。
也许值得介绍一些构建脚本,它将重新排列代码并运行一些测试来检查正确性。
答案 2 :(得分:0)
实施git的好主意!它绝对是开发过程中不可或缺的工具。正如您所提到的,git肯定会解决您的“跟踪文件更改”问题,并且还可以解决其他问题,这只是一个学习曲线。关于git有很多很好的资源,但是如果你想更好地了解git是什么(以及它是什么)以及它是如何工作的,我建议你阅读Git from the bottom up。
使用git可以非常轻松地恢复更改。首先,您可能需要查看提交历史记录以找到您想要恢复的提交历史记录。这可以通过使用git log
命令来完成(确保您在git跟踪的目录中)。有关here的更多信息。一旦您知道要恢复的提交,您需要做的就是利用与该特定提交关联的哈希并运行git reset --hard 6e3e02050a
,其中6e3e02050a
是您的提交的唯一哈希。更多信息,包括您可以使用的一些很酷的事情,here。这将立即将所有跟踪文件还原为特定提交(您也可以还原单个文件)。
信不信由你,git还可以帮助您在需要时自动将代码推送到服务器。这是一个更高级的,并利用post-receive hook
。这有助于从开发到生产站点的部署。正如我所指出的那样,这是更高级的,所以我不会在这里详细说明,但有一个很棒的教程,包括你想要的wp.tutsplus.com(具体步骤4)。
现在所有这些事情对于单个安装来说都很容易,但是当你有许多网站都连接到同一个开发过程时,它会变得有点复杂。同样,git有一些选择。
我猜你在这一点上可能会对branching
有所了解,如果没有lots of resources的话。分支允许您从主“主”分支拍摄探索性甚至完全独立的项目。听起来这正是您想要的所有不同的安装,这些安装都基于相同的主代码。分支的另一个好处是,您可以使用主服务器的任何更改使您的分支机构保持最新,并且如果您愿意,可以将它们合并回来。另一种选择是克隆。这与您实际上是复制和整个存储库的事实不同,而不仅仅是分支您当前拥有的内容。关于here的更多信息。
可能需要一段时间来确定设置所有内容的最佳方法,但我可以保证,一旦你有某种程序,你就会对git可以给你的选择和安心感到非常满意。