0

所以,你不会听到我说 svn 和 git 不是非常强大和通用的工具,但是对于非本地开发(中央网络共享)来说,它不能很好地发挥作用(两个人实际上可以在同一个文件上工作) 并产生了相当多的开销,所以具体来说,我想知道是否有任何替代方案可以在中央网络共享上运行良好(主要使用的功能是责备和识别稳定代码和开发代码)。

我知道这是一个相当广泛的问题,我希望这属于 Stackoverflow 的范围,但由于类似的问题没有解决,我决定试一试这个问题。


在反应中似乎存在一个常见的误解:现在我们正在使用颠覆,我们正在提交我们的更改,我们正在使用标签来区分版本并仅将已标记的更改推送到生产环境。此外,似乎有人相信本地副本在某种程度上是协作开发的圣杯。让我告诉你,如果你在同一个项目上最多只能与 4 个开发人员一起工作,那么如果你不使用一些需要编译所有代码和单一语法的古老的低级语言,那么处理相同的文件是理想的错误会破坏整个应用程序。确实,偶尔这确实会导致不必要的错误,但总的来说它工作得非常好,并且有助于加快开发速度。实际主要问题在于,如果不同的人在同一个 svn checkout 上提交和工作,svn 往往会中断很多。此外,还有一些其他的事情往往会引起麻烦(svn 似乎不喜欢坐在共享上,尽管其中一个答案可能有助于“解决”这个问题),但事实是所有这些事情都是由事实上,SVN 和 GIT 都基于个人开发人员在他们自己的本地副本上工作的想法,这与我们正在做的共享代码库上紧密结合的开发风格不符。

经过讨论后,我们得出结论,我们可以想象一个更简单的不太先进的源代码控制系统,更适合这种开发风格(例如,像体验这样的全自动修订跟踪系统)用户拥有谷歌驱动器文件+另外某种形式的“标记”文件),我们认为其他人也必须考虑到这一点,这就是这个问题的来源。如果您认为我们的开发风格很糟糕,请允许我指出,我们公司目前的效率能够达到我们与之竞争的类似大型 Web 应用程序开发公司的 3-5 倍(以及不增长的选择)是有意识的),是的,这种设置是帮助达到这种效率的原因之一,因为无论流行的版本控制系统多么漂亮:它们添加了很多的开销。正如我在下面的评论之一中所说,对于我们来说,设置本地开发环境意味着必须设置大约 50x4=200 个不同的开发应用程序才能运行。这意味着在每个开发系统上都有 3 个不同的 IIS 实例(由于我们正在使用的“插件”的限制以及这个“插件”的 3 个不同版本的必要性),一个 apache/tomcat 实例和一个 apache/jetty 实例. 另外,为每个开发人员在这 5 个实例中分离出 50 个应用程序的不同子集。(而且我什至不想考虑如何让这 5 个实例相互运行,以及如何处理跨应用程序请求)将所有这些与当前设置进行比较,在当前设置中,我们只需要每个应用程序的三个不同实例(开发、暂存和生产)它' s 根本没有道理。而且我什至没有提到公司中只有大约 2 或 3 人知道如何设置这些实例......顺便说一句,这是一团糟(对于新项目,我们已经从这个混乱中迁移出来,但是对于所有旧的仍然支持但无关紧要的项目)。

我试图使这个问题尽可能笼统,以防止它仅适用于我们,但是某些人在某些答案和评论中给出的那种反应令人难以置信的傲慢。老实说,我们已经考虑过这个问题,我问了一个相当具体的问题。如果问题是要寻找 svn/git 的替代方案,那么来给出答案就太冒昧了:“使用 svn”/“使用 git”或“这个问题让我哭了”。并且没有冒犯@David W. 因为与其他一些人不同,我认识到您真诚地试图提供帮助,但在看到这些评论后,我认真地考虑过退出 stackoverflow。</rant>

无论哪种方式,我仍然希望有人能够向我指出一些完全不同的源代码控制方法,但从表面上看,情况并非如此。也许有一天我会自己写,但现在我没有时间,所以我有点希望其他人已经这样做了。

4

4 回答 4

1

其他答案已经指出,通常多人同时在一台服务器上工作可能会有问题。我同意-但是,您写道,这对您有用,所以我不会为此争论。

也就是说,我的版本控制解决方案是:

  • 每个项目有一个存储库,具有三个分支(dev、staging、prod)。
  • 在每台服务器上,始终签出与服务器角色 (dev/staging/prod) 对应的分支。

这样,多人可以在一台服务器上工作。他们只是像往常一样提交,与碰巧在同一系统上工作的任何同事协调。使用 Git 会更容易一些,因为它可以更轻松地只提交工作副本中的一部分更改,但它也适用于 SVN。

通过合并在系统之间交换代码。如果在“dev”中完成了一项新功能,可以将“dev”代码合并到“staging”中,然后将“staging”合并到“prod”中。标签可用于识别适合合并到下一阶段的版本 - 因此您不仅可以将最新的“dev”合并到“staging”中,还可以将标签“featureX-dev”合并到分​​支上的旧版本“开发”。

如果您使用 Git,如果您必须中断工作并有工作正在进行,本地分支可能会很有用。然后,您可以将正在进行的工作提交到本地临时分支,保持工作副本(和主分支)干净,以便其他人可以在同一台服务器上工作。当然,这需要临时检查您的临时分支,因此您需要与在同一系统上工作的其他任何人协调。

于 2013-04-21T08:44:54.857 回答
1

如果没有服务器来规范修改,那么您就无法阻止两个人同时修改同一个文件。这就是为什么file://当你有多个人在一个项目上工作时,你不应该在 Subversion 中使用该协议。你不应该在净份额上使用它。

对于 Subversion,您可以使用该svnserve过程在包含共享的系统上创建轻量级服务器。它简单快捷。甚至可以将其设置为 Windows 服务。完成后,您可以使用该svn://协议,该svnserve过程将调节更改。

在这种情况下,Git 可能真的会大放异彩。使用 Git,您通常有一个主存储库,您可以在其中推送拉取更改,但这实际上是在使用 Git,就像 Subversion 一样,您无法以这种方式获得 Git 的全部功能。

Git 允许您拥有多个存储库,每个存储库相互拉取和推送更改。事实上,您甚至根本不需要主 Git 存储库。而且,这就是为什么 Git 可能是您处理设置的最佳方式的原因。

您和您的同事都可以拥有自己的私有 Git 存储库。您自己办理入住和退房手续。你们通过电子邮件相互同步。没有服务器。没有 Windows 共享。两个人同时尝试更改同一个文件没有问题。

我使用Dropbox来存储我的 Git 存储库,因此我可以在家中和工作中使用我的存储库。

警告:如果你像这样使用 Dropbox,你不能让两个人同时推送到这个 Dropbox Git 存储库。你可以让多人做拉动,但不能推动。

但是,这个 Dropbox Git 存储库不会在我和其他人之间共享。它是我的,而且只有我的。我在工作时在我的电脑上使用它,然后回家,然后继续在家工作。如上所述,我使用电子邮件将该存储库与我项目中的其他人同步。

于 2013-04-17T14:43:18.980 回答
0

让我告诉你,如果你在同一个项目上最多只与 4 个开发人员一起工作,那么在同一个文件上工作是理想的

说谎。即使对于围绕单个通用(真正常见的映射网络驱动器)代码库的 2 个开发人员,您也无法保证,他们不会同时修改同一个文件并覆盖外部更改(使用古老的“锁定和等待”模型除外) ),因此 - 有很多头痛

实际的主要问题在于,如果不同的人在同一个 svn checkout 上提交和工作,svn 往往会中断很多。

实际的主要问题不是Subversion(如果以正确的方式(tm)使用,它不会破坏任何东西) - 而是未经培训的用户,使用显微镜进行钉钉

对我们来说,设置本地开发环境意味着必须设置大约 50x4=200 个不同的开发应用程序才能运行

您可以(已经)更改您的工作流程以正确使用 Subversion,而无需构建 LDE。只需添加本地工作区层(开发人员在个人 WC 中编辑代码)和服务器上的提交后挂钩以更新服务器开发环境(并且,如果在提交 /for 过时的 WC/ 之前更新 + 合并可能会惹恼开发人员,则可能开始使用分支)

我们可以想象一个更简单的不太先进的源代码控制系统更适合这种开发风格

嗯,它是 WebDAV - 在此之上没有任何东西的线性版本控制。对于最终用户,它将是相同的共享驱动器

于 2013-04-17T23:30:23.597 回答
0

我想知道是否有任何替代方案可以在中央网络共享上运行良好

恐怕,但真正的选择是“改变你懒惰的工作流程和习惯”——你想(现在)结合不兼容的东西

“50-100 个不同的项目”只是 50-100 个存储库(在中心位置)和 50-100 个开发盒上的工作副本(需要一些工作来创建它,是的,但它是一次性操作)和一个(两个在DVCS 的情况 - 添加了推送)开发人员稍后在开发过程中采取的额外行动- 提交。

用定义明确且易于管理的开发过程和公平的价格替换“非托管无政府状态”的开销最小

于 2013-04-17T19:52:04.987 回答