部分Git部署策略?

时间:2010-05-28 10:34:27

标签: git deployment kohana

我需要设置一个Kohana开发环境,允许我在不同的应用程序中充分利用共享模块/系统类。每个应用程序通常属于不同的客户端。我使用Git进行源代码控制,但我正在努力想出一个干净的部署方法,这个方法允许我将特定于客户端/应用程序的开发环境的那些部分提取到该客户端的生产环境中(假设客户端的生产环境将安装Git)。

Dev环境:

- kohana
  - applications
     - clientapp1
     - clientapp2
  - modules
  - public_html
     - clientapp1
     - clientapp2
  - system
     - 3.0.1
     - 3.0.5

客户1的生产环境:

- /
 - applications
     - clientapp1
 - modules
 - public_html
     - client_app1
 - system
     - 3.0.5

当然,我希望完全控制每个客户“子回购”,好像它是一个独立的回购(就gitignore等而言)。我已经看到了涵盖Git的sparse checkout功能的主题,但从维护的角度来看,似乎可能会引起一些问题,我不喜欢客户端中存在的整个repo元数据的想法生产环境回购。

你可能会说,我不是一个Git poweruser,所以非常欢迎任何建议/智慧!

1 个答案:

答案 0 :(得分:1)

理想情况下,您的每个目录(app / clientapp1,app / clientapp2,public_html / clientapp1,...)都是子模块

即:主要项目git repo:

kohana
  - applications
  - modules
  - public_html
  - system

添加子模块的位置:

- kohana
  - applications
     - clientapp1  -> remote: /path/to/app_client1app Git repo
     - clientapp2  -> remote: /path/to/app_client2app Git repo
  - modules
  - public_html
     - clientapp1  -> remote: /path/to/pubhtml_client1app Git repo
     - clientapp2  -> remote: /path/to/pubhtml_client2app Git repo
  - system
     - 3.0.1  -> remote: /path/to/sys Git repo, tag 3.0.1
     - 3.0.5  -> remote: /path/to/sys Git repo, tag 3.0.5

您只使用子模块的事实允许您:

- /
  - applications
     - clientapp1  -> remote: /path/to/app_client1app Git repo
  - modules
  - public_html
     - clientapp1  -> remote: /path/to/pubhtml_client1app Git repo
  - system
     - 3.0.5  -> remote: /path/to/sys Git repo, tag 3.0.5
  • 定义另一个主项目,这次用于部署
  • 直接在这些子模块中的特殊部署分支中工作,允许您在特定于客户端的环境中控制其文件 (见true nature of submodules