【问题标题】:Online DVCS Client在线 DVCS 客户端
【发布时间】:2012-04-30 21:35:51
【问题描述】:

好的,我一直在用各种解决方案来解决我的问题,比如Recommended DVCS mechanism for hosting many independent patchesUsing Mercurial patch queue repository on BitBucket for many users and patches,但希望这将是我需要问的关于如何为我描述的项目建立源代码控制的最后一个问题在https://sourceforge.net/p/iotabuildit/wiki/Home/。然后我可以接受其他问题的一些答案并继续前进。

我正在努力满足的要求是:

  1. 贡献源修改(补丁)对用户来说必须非常容易。这意味着他们不必下载版本控制客户端。
  2. 任何版本的代码都需要轻松地在线托管,因为由于 W3C 安全要求(IE 显然忽略了这一点,但 Chrome 尊重),当从本地文件集运行时,它在 Chrome 中不起作用。
  3. 用户应该能够自行注册并自动获得提供补丁的权限,其他任何人都可以播放和查看(如 Little Big Planet,但更加集成 - 允许更改任何内容,而不仅仅是添加内容)。

到目前为止我尝试过的路径都失败了,原因如下:

  1. Mercurial Patch Queue - 在探索了一会儿之后,我发现它对于普通玩家/用户来说太复杂了,无法参与。我们在这里讨论的是潜在的非开发人员。
  2. Github 和 BitBucket - 这些存储库似乎仍然需要本地 DVCS 客户端,并且需要额外的步骤来贡献补丁。最后,对于普通用户来说,它们仍然很难,尤其是那些只想玩某些用户的特定版本游戏的人。似乎无法在线托管文件。

所以现在我提出的解决方案如下,我想看看我是否遗漏了一些可以通过其他方式更好地处理的东西。我将在我的 SourceForge 项目上创建一些 PHP 脚本:

  1. 允许用户使用密码注册自己的电子邮件/帐户,这样只有他们才能更新自己的“补丁”
  2. 允许他们克隆标准存储库或任何其他用户存储库。
  3. 在线在 PHP 脚本可访问但 HTTP 不可访问的目录中创建克隆。
  4. 允许他们将一组文件提交到他们的工作目录,并将差异作为补丁提交到他们的存储库。
  5. 允许从同一目录中的其他用户存储库中提取补丁。 (拉取和提交到您自己的存储库不需要身份验证,当我考虑已经存在的更正式的在线存储库托管时,这是一个绊脚石)
  6. 拥有一个单独的 PHP 脚本,将您的工作空间复制到一个可以在线玩游戏的托管目录中。任何玩家都可以访问此工作区来玩您的游戏版本(其中可能包括从任意数量的其他存储库中提取的补丁)。

我不能使用现有的存储库来执行此操作似乎很奇怪,但我想不出解决身份验证问题的方法。所以我需要创建我自己的克隆,我知道 PHP 脚本应该能够在不推送的情况下访问和提交。不幸的是,其他 DVCS 客户端可能无法从这些在线客户端中提取,但如果需要,可能有一些方法可以导出补丁。而且我不知道当合并冲突发生时我要做什么。但这是迄今为止我最接近可行的解决方案。

所以我最终得到的是一个在线 DVCS 客户端,以避免用户必须下载 DVCS 客户端并避免为他们的游戏版本寻找主机。我是否忽略了一个更简单的解决方案? (我是否违反了 SourceForge 的服务条款?如果(我可以)安装 Mercurial,我也可以在 Dreamhost 上托管它。)

【问题讨论】:

    标签: php mercurial github bitbucket sourceforge


    【解决方案1】:

    几个cmets/answers:

    使用 DVCS(“D”为分布式),没有“服务器”或“客户端”。
    如果您想在本地(在您的工作站上)访问代码,您将需要一个 DVCS(git 或 Mercurial),并且您将克隆一个 upstream repo(即存储在 GitHub 或 BitBucket 中的远程存储库)。

    据我所知,每个用户都会分叉主存储库,每个用户创建一个存储库,仍然存储在上游服务器(GitHub 或 BitBucket)上,因为这是分叉背后的想法(在远程端克隆)。

    这将解决 1. 因为每个用户都是他/她自己的分叉的所有者,并且只有那里有写访问权。
    2. 是给定的(你可以 fork 一个 repo)

    GitHub 或 BitBucket 不会解决其余问题,而是通过专用服务器解决问题,您在该服务器上安装了 DVCS,并在其中添加了相关挂钩以实现您想要的自动化。
    该专用服务器可以监控在 GitHub 或 BitBucket 上推送的内容,对于给定用户的给定存储库,执行所需的克隆或更新,并将存储库同步到正确的目录(例如,在您的情况下可以访问 PHP 脚本) .

    【讨论】:

    • 您说没有“服务器”或“客户端”,但我确实看到了托管在 SourceForge、github 和 bitbucket 上的存储库与存储在本地的存储库之间的明显区别。区别在于您可以提交到本地存储库,但不能提交到“服务器”存储库(需要推送和身份验证)。那么正确的术语是什么?你的提议让我大开眼界;我很难将我的范式转移到 DVCS,但它开始变得清晰起来。那么我的 SourceForge 项目会简单地从用户托管的存储库中提取请求的版本以允许他们玩吗?
    • 不过,我仍然想知道,当今网络空间中似乎存在对立的力量:云计算邀请每个人将更多的工作放在云中,而在您的系统上做更少的本地工作,而 DVCS 推动人们将内容放回您的本地系统,以便您可以在未连接到云的情况下访问它。你能看到一个非常瘦的客户端希望有一天从云端运行他们的 DVCS client 的 use 案例吗?
    • 顺便说一下 D 不是去中心化的:)
    • @Learath2 arg(耻辱):我已经修正了“错别字”
    • @BlueMonkMN "monitoring" 表示常规的git fetch,以便检测自上次获取以来是否在给定的远程仓库上发布了任何新提交,有点像stackoverflow.com/questions/7166509/…。您可以考虑在非裸仓库中获取/拉取(在这种情况下,文件在仓库所在的位置,在这种情况下,您不需要 stackoverflow.com/questions/9448682/…
    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2012-10-18
    • 2012-09-26
    相关资源
    最近更新 更多