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

5
我搜索了很多,但不清楚git是否是我想做的正确工具。当我编写代码时,希望为在各个位置测试代码创建整个仓库的快照。我忘记在哪里添加/编辑代码,因此最好的方法是将整个仓库“还原”到初始状态。这些快照需要能够永久维护或删除,因为它们只是测试和实验。
虚拟机快照很慢且会中断连接。我考虑使用Git及其分支功能。但据我所知,除非执行一些特殊的危险命令来删除内容,否则Git会永久保存所有内容。
我想要的是: 提交多个快照,可以在它们之间进行切换,并在将所有内容推送到在线仓库后永久删除它们。我不想因为无用的代码浪费空间,而有无用的提交导致视图混乱。
这可能是一个初学者问题,不幸的是互联网上的每个指南都讲解了许多命令和概念,但很少提供实际用例。 谢谢大家!
2个回答

3
当我编写代码时,我想创建整个存储库的快照以在各个位置进行测试。 是的,git非常适合这个。
这些快照需要能够被永久维护或删除,因为这些只是测试和实验。分支将为您完成此操作。
就我所知,git会永远保留所有内容,
不,这不是真的。它仅保留与分支或标签相关联的所有提交,以及直接引导到它们的所有内容。其他提交,您无法再通过任何分支或标记访问,将在一段时间后通过垃圾回收自动删除。
我想要的是:提交多个快照,能够在它们之间切换,并在将所有内容推送到在线存储库时永久删除它们。是的,git分支。
我不想因为无用的代码而浪费存储库上的空间,还有无用的提交会使视图混乱。是的,它们会消失;除非我们在这里谈论Linux大小的项目,否则空间不应该成为问题。
这可能是一个新手问题,不幸的是互联网上的所有指南都使用了很多命令和概念,但实际用例很少。 http://gitready.com/beginner/2009/02/17/how-git-stores-your-data.html 是一个很好的入门介绍;https://www.jayway.com/2013/03/03/git-is-a-purely-functional-data-structure/ 有许多细节(在第一个链接之后阅读,对您来说可能只是过度杀伤力)。

你很棒。对的,我想了很多关于分支的事情,我只是不想像SVN一样混乱。所以如果没有关联标签,提交就会被删除,对吧?我读过有关垃圾收集的文章,但是弄不清它是如何工作的。 - John White
1
它在幕后运作。如果你习惯使用 SVN,那么对分支的一些担忧是可以理解的;但在 git 中,它们完全不同(干净、简单、轻量级)。 - AnoE
后来我发现WebStorm有一个更好、更易管理的功能,叫做“本地历史记录”,可以接受自定义标签。https://www.jetbrains.com/help/idea/local-history.html - John White

1
Git对于你的使用情况来说似乎是一个很好的选择。与许多其他版本控制系统(VCS)不同,Git是一个基于存储库或项目的VCS。在Git中进行commit时,实际上是对整个项目,包括每个文件,进行快照。这与其他VCS(如Perforce)形成对比,其中每个file都有自己的历史记录。因此,在Git中从一个状态移动到另一个状态非常容易。
Git的另一个好处是它只存储从一个commit到下一个commit的diff(至少在概念上是这样,在实践中它会保留树形结构)。因此,如果您在从一个commit到下一个commit的过程中只更改了一个文件,则Git只会记录对您的项目进行的change。这使得Git变得轻便高效,而且没有必要删除您可能认为多余的任何东西;Git存储完成工作所需的最少信息。从概念上讲,您可以将Git视为在存储库中对整个项目进行one完整快照,然后记录随着时间发生的changes

你对 diff 的描述是误导性的 - 这不是 git 内部工作的方式。 - AnoE
@AnoE 你的评论有误导性,因为你让人觉得 Git 没有在每个提交中存储更改文件的差异,而这正是它所做的。 - Tim Biegeleisen
https://dev59.com/rWkv5IYBdhLWcg3wtTG7 - AnoE
1
实现细节...我想表达的是,OP不需要担心Git在每次提交时存储每个完整文件。Git选择如何实现这一点是另一个话题。 - Tim Biegeleisen
感谢您在回答中更新了“概念上”的部分。 - AnoE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接