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



我怀疑这可能真的很明显,但我在文档或论坛中找不到一个直接的解决方案:

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

我使用这个代码来构建Linux虚拟服务器。在构建服务器时,我会将repo克隆到服务器上,运行构建脚本,然后删除克隆。结果是一个配置好的服务器,其中有来自我的repo的几个文件位于服务器上的不同文件夹中。

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

为了实现这一点,我正在考虑为我的用户设置一个BitBucket帐户,对我的repo具有只读访问权限。

我没有问题写一个脚本克隆我的仓库,通过这个只读帐户,并应用更新,但我不想包括我所有的文件。特别是,我想排除我的构建脚本,因为它是商业敏感。我知道我可以把它从我的仓库中删除,但是这样我的构建就不能工作了。

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

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

我不确定我想要更新是自动的,所以我也想知道如何手动从主转移更新到分支/fork/sub。一个合并?如果进行合并,如何确保敏感文件不会被复制?

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

抱歉,如果这是非常明显的。我敢肯定,这是只见树木不见树木,被各种可能性淹没的情况。谢谢。

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

最简单的解决方案是这样的:
用TeamCity或Jenkins之类的东西建立一个构建服务器,它总是在线的,并监控你的Bitbucket存储库中的变化。您可以设置它,以便当存储库中有更改时,构建服务器运行您的构建脚本并将输出复制到某个FTP服务器,或下载站点或其他地方。

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

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

您可以通过排除合并过程中的文件来解决这个问题。在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.

整个Mercurial树总是一起移动,所以您不能克隆或拉取存储库的一部分(沿着文件树轴)。您可以保留一个只包含部分文件的分支,然后保留另一个包含所有内容的分支,这样就可以很容易地将部分(就文件而言)分支合并到另一个分支中(但是以另一种方式合并就不是特别容易了)。

我想也许子存储库适合您的特定用例。

相关内容

最新更新