使用git分支来实现项目的变体

时间:2010-04-14 20:28:55

标签: git deployment workflow

我正在使用git的分支功能来管理小型网站的5种变体。有5个版本将在生产的不同子目录中存在。检查各个分支到各自文件夹的方法是:

mkdir foo && cd foo
git init
git remote add origin git@...:project.git
git fetch origin foo:foo

其中“foo”是给定的分支名称。这很好,除了它将我的整个仓库(设计,as3源等)拉到那些分支文件夹而不仅仅是公共www文件夹,这是我真正想要的生产。

有更清洁的方法来处理这个问题吗? Git无法克隆子目录吗?

3 个答案:

答案 0 :(得分:2)

DVCS的运行方式(推/拉所有 repo)会强迫您使用 component (coherent set of files 进行推理,并使用自己的提交生命周期< / p>

您的www文件夹应该是submodule (Git) or subRepo (Mercurial) 这样,你就可以拉一切。


另一个解决方案(如果你想保持你的回购方式是),就是定义一个特殊的“发布”分支(release_foofoo),除了{{{{}} 1}}。
www上的开发准备发布时,您将合并foo并删除那个分支您不需要的内容。
不是理想的解决方案,但可行。


从Git1.7开始,我忘记了最后提到的最后一个解决方案:

<强> sparse checkout

  

克隆存储库后,读取树技巧会将存储库的“视图”限制为仅限release_foo文件中的文件或目录

在您的情况下,您可以使用相关目录创建一个.git/info/sparse-checkout,当您更新工作树时,只会出现该目录(如.git/info/sparse-checkout)。
这是另一种解决方案:

  • 允许您保持存储库不被修改
  • 在交货前避免任何“维护”工作。

答案 1 :(得分:1)

不要将想要保密的东西混合到可释放的产品中。

我建议你将你的产品(html,php,js,img等)与来源分开。将源保存在一个或多个项目中,并将产品分别保存在另一个项目中。或者甚至只是根据需要动态构建产品,使用构建脚本复制/生成/等来自源的输出。这样很容易指出哪些来源产生了什么输出。

答案 2 :(得分:0)

目前(AFAIK)git只会克隆整个存储库。使用单独的存储库进行部署可能是一种选择。鉴于git的灵活性,如果您可以从主开发存储库推/拉,只需将一个分支推送到第二个部署存储库,所有这些都来自同一个本地,我不会感到惊讶。但我从未尝试过。