通过Mercurial提供代码更新的实用方法,无需共享主BitBucket帐户

时间:2013-03-11 07:35:41

标签: mercurial

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

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

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

现在,我正在寻找一种机制,我可以在我将用户的服务器移交给用户的服务器之后推出错误修复和改进。那时,我不会对服务器进行SSH访问,我不能指望我的最终用户做一些比启动cron作业或启动脚本更复杂的事情。

为实现这一目标,我正在考虑为我的用户设置一个BitBucket帐户,对我的仓库具有只读权限。

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

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

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

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

总而言之,我有一个包含一些敏感文件的主要仓库,我需要一种方法将除了这些敏感文件以外的所有文件的更新推送给我的只读用户。

很抱歉,如果这非常明显。我敢肯定,这是一个没有看到树木的木材,并被可能性所淹没的情况。感谢。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

整个Mercurial树总是会一起移动,因此您无法克隆或拉取存储库的一部分(沿文件树轴)。你可以保留一个只有部分文件的分支,然后保留另一个包含所有内容的分支,这样就可以很容易地将部分(在文件方面)分支合并到另一个分支中(但是以其他方式合并不会特别容易)。

我想也许subrepositories适用于您的特定用例。

答案 2 :(得分:0)

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

您可以通过在合并过程中排除文件来解决此问题。 Excluding a file while merging in Mercurial

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

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

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

"internal:local"
   Uses the local version of files as the merged version.