我正在使用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无法克隆子目录吗?
答案 0 :(得分:2)
DVCS的运行方式(推/拉所有 repo)会强迫您使用 component (coherent set of files 进行推理,并使用自己的提交生命周期< / p>
您的www
文件夹应该是submodule (Git) or subRepo (Mercurial)
这样,你就可以拉一切。
另一个解决方案(如果你想保持你的回购方式是),就是定义一个特殊的“发布”分支(release_foo
为foo
),除了{{{{}} 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的灵活性,如果您可以从主开发存储库推/拉,只需将一个分支推送到第二个部署存储库,所有这些都来自同一个本地,我不会感到惊讶。但我从未尝试过。