Web Mercurial可以存储文件,但不能存储版本?

Web Mercurial可以存储文件,但不能存储版本?,web,version-control,mercurial,Web,Version Control,Mercurial,我正在开发一个静态网站,我想使用Mercurial进行版本设置 但是,我想专门处理图像和库(例如jQuery、Bootstrap等) 具体来说,我希望Mercurial存储这些文件,但不跟踪它们的更改 例如:如果我将更新推送到一个映像文件,更新后的映像应该只是在服务器上对版本进行重击。我不想让Mercurial费心分散或存储增量。因此,就版本控制系统而言,文件应始终保持在版本1。此外,如果我从源代码管理中删除一个图像文件,它应该永远消失 有办法做到这一点吗?这是处理图像和库的好方法吗?您可以从M

我正在开发一个静态网站,我想使用Mercurial进行版本设置

但是,我想专门处理图像(例如jQuery、Bootstrap等)

具体来说,我希望Mercurial存储这些文件,但不跟踪它们的更改

例如:如果我将更新推送到一个映像文件,更新后的映像应该只是在服务器上对版本进行重击。我不想让Mercurial费心分散或存储增量。因此,就版本控制系统而言,文件应始终保持在版本1。此外,如果我从源代码管理中删除一个图像文件,它应该永远消失

有办法做到这一点吗?这是处理图像和库的好方法吗?

您可以从Mercurial的跟踪中找到。这会产生预期的效果,但如果您使用Mercurial进行部署(例如,将更改向下拉到live server),则不会包含映像/库

但是,我看不出有什么理由希望避免图像/库的版本控制。我无法想象一个包含图像/库的用例会造成足够的麻烦而需要解决。除非你有很好的理由,否则在Mercurial中包含图像/库,然后使用它

有办法做到这一点吗

对。你可以

  • 将v.1中的这些资产添加到Mercurial中
  • HG忽略它之后的所有“单一版本”文件
因此,所有后续更改都将不可见(TBT!!!)

这是处理图像和库的好方法吗


不,这是非常糟糕的想法(tm)和愚弄历史

这不是现代版本控制系统的工作方式(Mercurial、Git、Subversion等等)。在现代VCS中,提交是原子的,这意味着由提交表示的所有更改构成一个不可分割的整体。您不能返回并稍后抛出部分提交(在某种程度上,您可以在Mercurial中使用
hg convert
,在Git中使用
Git filter branch
,但这些操作代价高昂,而且有潜在的危险,因为它们必须重新处理整个存储库)


可能有一些方法可以近似满足您的需求(至少要尽量减少服务器上的磁盘使用)。largefiles扩展名(与Mercurial一起分发)通过加密指纹表示大文件(如图像),并将其保存在缓存中,仅在需要时下载(如果您真的知道自己在做什么,您甚至可以删除旧版本,尽管这不一定安全或受支持,并且可能以微妙的方式破坏您的存储库)。Facebook使用的缓存方案更为复杂,但需要非常简单的设置工作和客户端与服务器之间相当快速的连接。

为什么?您试图通过尝试解决什么问题?
“这是处理图像和库的好方法吗?”
-我认为不是这样,因为版本控制针对的是整个代码库,而不仅仅是单个文件。如果只跟踪了一些文件,那么就在版本控制中覆盖了历史记录。在web设计中,图像经常会发生更改,而这些更改对跟踪来说并不重要。我觉得跟踪这些更改会导致repo变得越来越大这是一个我们不太关心的变化历史。所以我想保持简单,只跟踪最新的版本。另一方面,库不受更改,但我认为使用相同的方法来跟踪它们是很方便的。考虑应用程序的版本1使用给定文件的版本1的情况。et到应用程序的版本10,在文件版本2出现的过程中的某个地方。现在,您无法再可靠地重新创建应用程序的任何早期版本。对于测试、生产热修复程序等,所有早期版本都已更改,不再与原来的版本匹配。如果某些资源确实不应为版本ed,那么它们一开始就不应该在源代码中。把它们放在其他地方,比如CDN主机。如果这确实是一个“应用程序”,我会接受这个论点但它只是一个没有服务器端组件的静态网站。使用CDN听起来是个好主意,但如果我在工作时没有可靠的互联网连接,就有点不方便了。老实说,听起来你真的在发明一个实际上不存在的问题。真的有这么多数据导致磁盘空间变得有限吗nstrained?服务器处理时间在签入过程中受到限制?如果是这样,那么这就是CDN的主要候选,CDN旨在处理大量这样的数据(可以是内部托管的,以解决可靠的internet连接问题)但是,如果这些问题实际上都不存在……那么实际上就不存在问题。排除文件并不方便。正如您所提到的,如果我尝试部署项目或设置另一个构建环境,则不会填充映像和库。我不想对映像进行版本设置的原因是,区分和存储增量似乎很浪费几次仅仅是因为我将颜色从蓝色更改为红色,然后再更改为蓝色。简单地说,跟踪这些更改没有任何用处,并且没有明显的好处而占用空间。@AlfaZulu没有理由提交更改(从而创建增量)直到您满意为止,除非您是通过在本地进行更改、提交,然后推送到服务器进行开发。如果是这种情况,您应该在本地开发,然后在希望与其他人共享更改时推送。