GIT:这种情况的最佳工作流程是什么?

时间:2009-11-09 17:12:06

标签: git workflow

我遇到这种情况的问题:

我有一个基础存储库,其中包含'docs','layout','pub'和'sql'文件夹,'docs'和'layout'文件夹中只有一个空白的'index.html'。在'pub'文件夹中我安装了Joomla。

当我有一个新客户端时,我创建了他的目录并初始化了一个存储库,然后我添加了一个名为“base”的远程指向基本裸存储库(使用Joomla的存储库),获取它,checkout base / master然后执行'checkout -b master'从基础主分支创建主分支。然后我在本地服务器上创建客户端repo的“clone --bare”,然后在本地工作站中克隆它。我们在需要时保存文档,设计师制作布局然后将其提交并推送到客户端的裸仓库。我们总是在推送之前做一个'rebase origin / master',以确保本地回购是最新的。

因此,当完成并推送布局时,我将其拉出并开始制作Joomla模板。所以我做了很多提交,然后我意识到我必须在Joomla组件中进行更改。好的,我更改组件,提交并继续创建模板,提交,...

现在我想将所有Joomla组件的提交带到'基础仓库',因为我希望所有客户都进行相同的更改。当我尝试@jleedev解决方案(rebasing)时,我所有客户端的提交都转到了顶部,重写了已经在客户端裸机库中的SHA。

基本的想法是在'docs','layout','pub / templates / client_template'文件夹中提交文件,也许只有一些Joomla hack只针对客户端repo独有的客户端,但所有其他提交我想在'基础'Joomla回购中也有,所以我可以合并到所有客户回购。

有什么想法吗?也许是一个不同的组织?

提前致谢!

5 个答案:

答案 0 :(得分:1)

  

因此,当完成并推送布局时,我将其拉出并开始制作 Joomla模板。所以我做了很多提交,然后我意识到我必须在 Joomla组件中进行更改。好的,我更改组件,提交并继续创建模板,提交,...

     

现在我想把所有Joomla组件的提交带到'基础回购',因为我希望我的所有客户都有相同的更改

所以你有两组文件用于两个不同的目的 我将这两个分开(即一个包含在另一个中),Joomla组件部分为submodule

  • 您可以直接在客户端的仓库中修改子模块,然后将其推送到中央仓库
  • 您可以使用该Joomla组件的最新版本更新客户端repos。

其他目录仍然是特定于客户端的。

答案 1 :(得分:0)

也许您可以直接在Joomla基础仓库中进行所有客户所需的更改。然后将其合并到所有客户回购中。

编辑:如果您希望更改对所有客户端可用或者仅仅是客户端特定的更改,则需要您在Joomla组件的每次更改之前做出决定。也许这并不容易。

答案 2 :(得分:0)

我认为这个问题超出了git的范围。

我会说你应该始终保持所有项目的“共同基础”。

如果一个项目需要特定的黑客,你应该尝试制作它不会影响其他的回购。例如,默认情况下将其关闭,仅适用于该特定网站。

强迫自己这样做的一种方法是让他们都使用完全相同的“共同”回购;不是它的克隆。例如,您可以使用符号链接作为基本/公共代码库。

答案 3 :(得分:0)

要获得现有的base / master,你可以试试这个:在客户端repo中,在base / master创建一个“base”分支。 (git checkout -b base base / master)。然后樱桃挑选你想要推回基地的joomla承诺。然后将基地推到基地/主人。

如果你试图将master重新绑定到新的base / master上,你可能会得到一个棘手的rebase,因为你挑选的提交将以不同的顺序。不知道该怎么办。

在同一个回购中有两个独立树木的技巧;也许这就是你应该使用的。阅读http://progit.org/book/ch6-7.html,看看这个想法是否适用于您的情况,您想要保留稍微修改的Joomla和其他各种回购。

答案 4 :(得分:0)

这个问题看起来几乎像inheritance问题(关于你的组织)。

类似于 hasen j 所说的,你需要一个包含所有共同点的基础,然后从那里分支 - 如果你有一些特定的结构,你的某些客户的网站不是在其他情况下,您将使用子基础git存储库来表示该特定子集中的常见函数。

这样,如果要对所有存储库进行更改,请通过基本存储库进行更改。如果要更改特定子集,请更改为该子集创建的子库存储库。

相关问题