创建存储库的快速快照(git?)

创建存储库的快速快照(git?),git,snapshot,Git,Snapshot,我搜索了很多,但不清楚git是否是我想要做的事情的正确工具。 当我编写代码时,我想创建整个存储库的快速快照,以便在不同的地方进行测试。我忘了在哪里添加/编辑代码,所以最好将整个存储库“还原”到初始状态。这些快照需要能够永久地维护或删除,因为这些只是测试和实验 虚拟机快照速度慢,会中断连接。我在考虑Git及其分支特性。但据我所知,git永远保存着所有东西,除非给出一些特殊的危险命令来删除这些东西 我想要的是: 提交多个快照,能够在它们之间切换,并在我将所有内容推送到在线存储库时永久删除它们。我不想

我搜索了很多,但不清楚git是否是我想要做的事情的正确工具。 当我编写代码时,我想创建整个存储库的快速快照,以便在不同的地方进行测试。我忘了在哪里添加/编辑代码,所以最好将整个存储库“还原”到初始状态。这些快照需要能够永久地维护或删除,因为这些只是测试和实验

虚拟机快照速度慢,会中断连接。我在考虑Git及其分支特性。但据我所知,git永远保存着所有东西,除非给出一些特殊的危险命令来删除这些东西

我想要的是: 提交多个快照,能够在它们之间切换,并在我将所有内容推送到在线存储库时永久删除它们。我不想因为无用的代码浪费repo上的空间,因为无用的提交会使视图变得混乱

这可能是一个很难回答的问题,不幸的是,互联网上的每一本指南都讲述了大量的命令和概念,而实际的用例却很少


非常感谢大家

Git听起来是您用例的最佳选择。与许多其他版本控制系统(VCS)不同,Git是一个存储库或基于项目的VCS。当您在Git中进行提交时,基本上是对整个项目(包括每个文件)进行快照。这与其他VCS(如Perforce)形成了对比,后者的每个文件都有自己的历史记录。因此,在Git中很容易将项目从一个状态转移到下一个状态

Git的另一个优点是它只存储从一个提交到下一个提交的差异(至少在概念上,实际上它是一个树结构)。因此,如果您只在项目中从一个提交更改到下一个提交,那么Git将只记录对项目的更改。这使得Git精益和平均,并且没有必要删除任何你可能认为超常的东西;Git存储完成任务所需的最小信息量。从概念上讲,您可以将Git看作是在存储库中对整个项目进行一次完整快照,然后只记录应该发生的更改

当我编写代码时,我想创建整个存储库的快速快照,以便在不同的地方进行测试

是的,
git
非常适合这样做

这些快照需要能够永久地维护或删除,因为这些只是测试和实验

树枝会帮你的

据我所知git永远保存着一切

不,那不是真的。它只保留所有具有与其关联的分支或标记的提交,以及直接指向它们的所有内容。通过任何分支或标记都无法访问的其他提交将(在一段时间后)通过垃圾收集自动删除

我想要的:提交多个快照,能够在它们之间切换,并在我将所有内容推送到在线存储库时永久删除它们

是的,git分支

我不想因为无用的代码浪费repo上的空间,因为无用的提交会使视图变得混乱

是的,他们会离开;除非我们在这里讨论的是Linux大小的项目,否则空间不应该是任何问题

这可能是一个很难回答的问题,不幸的是,互联网上的每一本指南都讲述了大量的命令和概念,而实际的用例却很少


这是一个很好的介绍;有很多细节(在第一个链接后阅读,可能对你来说太过分了)。

你对
diff
的描述是误导性的-这不是
git
内部工作的方式。@AnoE你的评论是误导性的,因为你说git在每次提交中都没有存储更改文件的差异,实现细节…我要说的是OP不需要担心Git在每次提交时存储每个完整的文件。Git选择如何实现这一点是另一个话题。感谢您用“概念”部分更新您的答案。您太棒了。是的,我想了很多关于分支机构的事,我只是不想像SVN那样一团糟。所以如果没有关联的标记,提交就会被删除,对吗?我读过关于垃圾收集的书,但不知道它是如何工作的。它是在幕后工作的。我知道你的意思,如果你习惯SVN,那么对分支的一些担忧是可以理解的;在
git
中,它们完全不同(干净、简单、轻量级)。后来我发现WebStorm有一个更好、更易于管理的特性,叫做“本地历史”,它可以接受自定义标记