1

我怀疑这可能非常明显,但我在文档或论坛中找不到简单的解决方案:

我已经编写了一些代码,这些代码保存在 BitBucket 的 Mercurial 存储库中。

我使用此代码来构建 Linux 虚拟服务器。当我构建服务器时,我将 repo 克隆到服务器上,运行构建脚本,然后删除克隆。结果是一个配置的服务器,其中包含来自我的存储库的多个文件,这些文件位于服务器上的各个文件夹中。

现在,我正在寻找一种机制,在我移交用户服务器后,我可以在其中推出错误修复和改进。那时,我无法通过 SSH 访问服务器,我不能指望我的最终用户做任何比启动 cron 作业或启动脚本更复杂的事情。

为了实现这一点,我正在考虑为我的用户设置一个 BitBucket 帐户,以只读访问我的存储库。

我通过这个只读帐户编写脚本来克隆我的仓库并应用更新没有问题,但我不想包含我的所有文件。特别是,我想排除我的构建脚本,因为它对商业敏感。我知道我可以从我的回购中删除它,但是我的构建将无法正常工作。

环顾四周,似乎我可能需要为我的仓库创建一个分支或一个分支(哪个?)。或者也许是一个子回购?然后,我可以从该分支/fork/sub-repo 中删除敏感文件,并允许我的用户通过脚本克隆它。

没关系,但是当我对主仓库进行更改时,我需要一种方法来更新分支/分叉/子仓库。这可以是自动的吗?换句话说,是否可以将其设置为始终反映主存储库中所做的更新?当然不包括敏感文件。

我不确定我是否希望更新是自动的,所以我也想知道如何手动将更新从 main 传输到 branch/fork/sub。合并?如果我进行合并,如何确保我的敏感文件不会被复制?

总而言之,我有一个包含一些敏感文件的主存储库,我需要一种方法来向我的只读用户推出除这些敏感文件之外的所有文件的更新。

对不起,如果这非常明显。我敢肯定,这是一个只见树木不见森林并被各种可能性压倒的情况。谢谢。

4

3 回答 3

1

我认为你根本不需要在 Mercurial 中解决这个问题。
你真正需要的是持续集成/构建服务器。

最简单的解决方案是这样的:使用TeamCityJenkins
之类的工具 设置构建服务器,该服务器始终在线并监控您的 Bitbucket 存储库中的更改。 您可以对其进行设置,以便当您的存储库发生更改时,构建服务器会运行您的构建脚本并将输出复制到某个 FTP 服务器、下载站点或其他任何地方。

现在您有了一个始终包含最新代码更改的位置,但没有像构建脚本这样的敏感文件。
然后,您可以设置最终用户可以运行的脚本或 cron 作业,以从该中心位置获取最新版本的代码。

于 2013-03-11T20:39:42.560 回答
0

整个 Mercurial 树总是一起移动,因此您不能克隆或仅拉取存储库的一部分(沿文件树轴)。您可以保留一个仅包含部分文件的分支,然后保留另一个包含所有文件的分支,从而可以轻松地将部分(就文件而言)分支合并到另一个分支中(但以其他方式合并不会特别容易)。

我在想子存储库可能适用于您的特定用例。

于 2013-03-11T10:02:20.913 回答
0

您可以使用两个分支,一个用于用户克隆(main),另一个用于您的主要开发(dev),棘手的部分是将新的更改从 dev 合并到 main。

您可以通过在合并过程中排除文件来解决此问题。在 Mercurial 中合并时排除文件

通过[merge-patterns]在 .hgrc 中设置部分,您可以确定哪些文件不受合并影响。

[merge-patterns]
build.sh = internal:local

欲了解更多信息,请阅读hg help merge-tools

"internal:local"
   Uses the local version of files as the merged version.
于 2013-03-11T17:47:35.880 回答