22

我对编程世界完全陌生,对行话和典型方法知之甚少。

前段时间我在写一些代码,但在删除坏代码时不小心删除了一些好代码。从那时起,我开始创建文件的版本,我会用日期和版本号命名每个文件。

但是,这很麻烦,必须为每个文件指定一个唯一的名称,然后转到我的核心文件并更改对新文件名称的引用。

然后,就在前几天,我不小心用这种方法写了一些重要的东西,可能是因为命名错误。

不用说,这种方法很糟糕。

我正在寻找有关更好做法、更好工具的建议。我一直在研究版本控制,但其中很多,git svn 看起来真的很复杂。这个想法是为了加快整个版本控制过程,而不是通过命令行使其变得更难。

现在我希望有一个工具可以在我每次按 ctrl-s 时保存文件的唯一版本,并给我一个按钮来创建最终版本。

当然,如果有关于完全不同的做事方式的建议,那就更棒了。

谢谢大家。

4

21 回答 21

17

这个问题有两种方法:

  1. 按需版本控制。这是subversion、CVS等所使用的模型。当您进行了“重大”更改时,您决定告诉系统“保留此版本”。
  2. 自动版本控制。这是一些旧的VAXen、Eclipse、IDEA、每个wiki以及一些作家的工具所使用的模型。每次保存时,都会隐式创建一个新版本。在某些删除时,旧版本可能会被剔除(例如,一周前执行的工作只保留一个版本,而不是每次保存)。

听起来您更喜欢#2,因为它是“万无一失的”——您永远不必去,“哎呀,在进行此更改之前,我应该'签入'/'保留'我的工作。” 您可以随时回滚。一个缺点是您必须手动逐步浏览旧版本才能找到某些内容,因为与 #1 不同,您通常不会对每个更改进行描述。

另一个缺点是,对于大文件,或者不容易区分/修补的文件(即二进制文件),您将开始快速消耗磁盘空间。

顺便说一句,听起来你不需要标准 SCM 系统中 90% 的功能——分支、标签等——但你最终可能会找到它们的用途。因此,从长远来看,学习一个可能是一种胜利。您可以使用 svn 等来做到这一点,但这需要一些定制。如果您使用脚本编辑器(emacs、vi、TextMate 等),您可以将“保存”命令重新定义为“保存并制作新版本”。

于 2009-05-29T16:41:34.810 回答
13

颠覆或多或少是黄金标准。

我建议(特别是对于新手)你检查 BeanStalk (www.Beanstalkapp.com) 来为你的客户端运行你的 subversion 服务器和 TortoiseSVN。

祝你好运!

于 2009-05-29T16:09:05.950 回答
6

无论您做什么,如果有人提到 Visual SourceSafe,请尽可能快地运行。VSS 是由撒旦自己创建的,并流传下来折磨全世界的开发人员。

于 2009-05-29T16:47:37.907 回答
5

我认为你处于一个必须稍微走出舒适区并花一些时间学习 git 的位置。它很容易学习和使用。

相信我,这真的很值得。花在学习 git 上的时间是值得的。

于 2009-05-29T18:12:58.443 回答
4

如果您不是在团队中工作,则可以使用 Eclipse 的本地历史功能之类的东西。它在本地存储文件的版本,您可以随时恢复到以前的版本。更多细节在这里:http ://help.eclipse.org/ganymede/index.jsp (搜索“本地历史”)。我很确定其他 IDE 也有这样的功能。

如果您正在与他人合作编写代码,则可能无法学习其中一种标准工​​具,例如 SVN、CVS 或 git。对于其中大多数,有许多可用的 IDE 插件,因此您不必使用命令行。

于 2009-05-29T16:12:04.157 回答
4

我目前使用 Subversion,但我的源代码管理经验有限。

不过,我建议阅读 Eric Sink 的教程。

http://www.ericsink.com/scm/source_control.html

于 2009-05-29T16:13:07.357 回答
3

最好学习如何使用现有的“行业标准”版本控制工具,如 Subversion。即使您是编程和版本控制的新手,SVN 也不难学习,并且会很好地为您服务。我个人使用并推荐适用于 Windows 的VisualSVN ServerTortoiseSVN。两者都是免费的,而且使用起来非常简单。

对于在每次保存时创建修订的系统,也许您应该查看版本控制文件系统

于 2009-05-29T16:17:57.123 回答
3

如果您在 Windows 中,我认为 TortoiseSVN 将是一个很好的 Subversion 客户端供您尝试。它不会做你正在寻找的每次我保存我得到一个新版本 - 你必须手动将版本“提交”到存储库。当您进行提交时,会创建一个新版本,实质上会保存您当时的进度。TortoiseSVN 对用户非常友好,它是一个 GUI,所以你不会在命令行上工作。您将能够执行诸如右键单击 Windows 资源管理器中的文件并选择提交以保存进度等操作。另外,TortoiseSVN 是免费和开源的。

于 2009-05-29T16:18:22.083 回答
3

颠覆并不复杂。如果你使用的是 Windows,TortiseSVN 会很有帮助,如果你使用的是 Eclipse,subclipse 插件很棒。(不管怎样,你可能应该使用 eclipse :))

其他一些有点复杂,但你只需要知道 eclipse 的模式。也许你可以用一个开源项目或一些现有的颠覆服务器“试试看”。

循环将是:

首先,您“签出”一个存储库。这将使用存储库中的内容填充您指定的目录。

如果你是从命令行做的——它是“svn co”——那里有足够的帮助来解决剩下的问题。

其次,您编辑文件。您不必锁定它们或任何东西。

如果你添加一个新文件,你一添加它就使用“svn add filename”。在您提交更改之前,这实际上不会更改存储库。

完成一组编辑后,您可以使用“svn ci”将它们签入(svn commit 也可以)。这个有一点你会永远忘记的转折——每次提交都需要注释。您不必指定要提交的文件或任何内容,但您确实需要位于项目的顶层(它将提交您目录下的所有内容。

所以这里的过程是,转到项目树的“根”并键入:

svn ci -m "评论"

小菜一碟。

最后,如果其他人正在检查东西,事情就会变得有点陌生。在您提交之前,您应该“更新”并获取他们的更改。只需要“svn up”,但它可能会警告您存在合并。这只发生在你们俩都编辑了同一个文件时,并且 90% 的时间,合并会顺利进行。其余时间,它会在您的文件中放置一些小标记,告诉您更改了什么以及它们更改了什么。“up”命令将告诉您它对哪些文件执行此操作。在签入文件之前,请先查看它们并清理文件。

总是在“svn up”和“svn ci”之间进行测试,你永远不知道他们糟糕的更改是否破坏了你的原始代码。

就是这样。从 CLI 很容易,图形环境几乎不值得(但是如果你在 eclipse 中,subclipse 真的很好,因为它会直观地显示你需要签入的修改文件)。

如果你忘记了,svn 的命令行帮助非常简洁和有用,它告诉你你需要知道的内容,并且对所有的子命令和选项都有帮助。

于 2009-05-29T16:21:09.357 回答
3

如果你正在寻找一个易于设置的 Windows 版本控制系统,我强烈推荐TortoiseHg,一个易于使用的 Windows Mercurial前端。您不必担心设置和跟踪与文件分开的存储库,但如果您愿意,您始终可以这样做。Mercurial 是一个很棒的工具,因为它可以随着您的需求而增长。它具有所有常用功能,例如轻松合并等,并且根据我的经验,它比 Git 更容易理解。

于 2009-05-29T18:11:30.100 回答
2

我认为 Git 真的很容易使用,尤其是当您使用 GitHub 时。他们还提供了许多很好的启动和运行指南。

http://github.com
http://github.com/guides/home
于 2009-05-29T16:16:33.537 回答
2

我使用过 Git、SVN、CVS 和 Perforce。在 Windows 和 Unix 环境中。

我的投票绝对是 SVN,因为它易于使用和灵活。我现在更喜欢使用命令行,但有一次我在 Windows 上使用 TortoiseSVN,我们能够让非技术人员轻松使用它。

使用 SVN。

于 2009-05-29T18:05:38.957 回答
2

认识到版本控制的必要性,您肯定走在正确的轨道上,但听起来不确定这对您和您的工作可能意味着什么。一旦你了解了版本控制系统背后的概念,你就会真正体会到它们。

概念很简单:源代码控制系统是一款旨在帮助您存储和管理代码的软件。根据您选择的系统,将代码输入和输出的方式会有所不同:一种范例是您故意“签出”文件,对其进行更改,对其进行测试并确保它是好的,然后再将其签入。另一个是您只需保存所做的每一个更改,因为磁盘空间非常便宜,比您最初创建源所花费的时间和精力要便宜得多。

另一个重要的概念是“基线”或“标签”。当您的产品处于准备发货状态时,您告诉源代码控制系统创建一个“标签”并用该标签标记您的整个源代码库中的每个当前项目。这样,当有人报告 4.1 版中的错误时,您可以访问您的系统,请求所有带有“4.1 版”标签的文件,并准确获取他们遇到问题的源代码。

将源代码控制工具与您的开发环境集成在一起,使整个过程比乱用命令行要容易得多。(不要因为命令行的复杂性而忽视命令行,它们为有经验的用户提供了优雅的控制,你最终会成为有经验的用户。)但是现在,我推荐一个源代码工具,它可以尽可能地自动化这个过程尽可能。

需要考虑的一些事项:您是现在,还是打算与其他开发人员共享开发?这可能会对您设置服务器的方式产生影响。如果您在自己的盒子上单独开发,您可以在本地进行设置,但这可能不是团队的最佳方法。(如果你不确定,git 在那个领域非常灵活。)你打算存储大型多媒体文件,还是只存储源代码?一些源代码系统被设计为只有效地存储文本文件,并且不能很好地处理电影、声音或图像文件。

还有一点需要知道的是,大多数较新的源代码控制系统需要在服务器上运行某种“守护程序”程序(Subversion、git、Perforce、Microsoft Team Foundation Server),而较旧、更简单的系统只直接使用文件系统(Visual Source安全,cvs)并且不需要服务器程序。

如果您不想学习太多并且您的要求很低,那么更简单的解决方案就足够了。Microsoft 的 Visual Source Safe 曾经与他们的 Visual Studio 产品一起提供,并且是一个非常简单易用的工具。它不是很健壮,它只是微软的,它不能很好地处理大文件,但它非常非常容易设置和使用。如果您不想花钱,Subversion 和 git 是两个出色的开源解决方案,并且在网络上有很多关于这两个的文档。

如果你喜欢花钱,Perforce 被认为是专业开发团队的绝佳选择(而且我相信他们有免费的单开发者版本。)如果你真的喜欢花钱并想让比尔盖茨开心,微软的团队Foundation Server是一个完整的软件开发生命周期管理器,在Windows环境下非常好用,功能非常强大;但是您可能希望使用整个 Windows 服务器(加上 SQL Server)实例来托管它,而且仅在许可证上就需要花费数千美元。不幸的是,它不适合单人商店,或者如果您没有 Windows 管理员经验。

如果您有预算或人脉,请一位经验丰富的软件工程师帮助您开始工作,这可能是通往成功的最快途径。否则,您将不得不做更多的研究来了解哪些系统最适合您的情况。

于 2009-05-29T20:53:57.167 回答
2

无论您使用哪种 VCS,如果您选择按需版本控制而不是自动版本控制(借用 Alex 的帖子中的术语),您将不得不通过一些仪式来:-create、-rename、-move、-copy 或 -delete受源代码控制的文件。

创建新文件时,必须先将其添加到源代码管理,然后再将更改提交到存储库。

当您重命名、移动、复制或删除受源代码控制的文件时,请使用您的 VCS 客户端执行此操作。在 TortoiseSVN 和 TortoiseGit 中,移动和复制操作是通过右键单击和拖动来完成的,而重命名和删除操作是通过右键单击来完成的。

可以想象,更改项目名称等内容可能会非常麻烦,因此需要自动版本控制。

普通文件编辑和对不受源代码控制的文件的任何更改都不需要您告诉您的 VCS 客户端。

最后,对于单人项目,我更喜欢 git 而不是 SVN,因为 SVN 至少需要 2 个副本:一个存储库(文件和历史的“主”副本)和一个工作副本(你工作的副本) . 使用 git,存储库和工作副本是一回事,这让我的体验更简单。

于 2009-11-22T16:42:45.947 回答
1

我们使用SourceGear Vault,它与 Visual Studio 有很好的集成,并且对单个用户免费。不过,根据您使用的框架和语言,Subversion是一个很棒的免费解决方案。

于 2009-05-29T16:12:39.713 回答
1

首先,请阅读 Eric Sink 的这些文章。Eric sink 经营着一家公司,该公司创建了一个名为 Vault 的源代码控制系统。他以对新手友好的方式解释了如何进行源代码控制、最佳实践等:

源代码管理简介

当我第一次想了解源代码控制时,我发现它非常宝贵。

SourceGear Vault 对单个用户免费。它的界面很直观,并与 Visual Studio 很好地集成在一起。

于 2009-05-29T16:14:25.390 回答
1

如果只有您,您可能想尝试 Bazaar。它像 Git 一样分发(因此对于一个人来说会很好——无需处理服务器),但他们的主要目标之一是让它比 Git 更容易使用。

此外,还有一个名为 ToroiseBzr 的方便的 gui 工具,它应该非常容易使用。http://bazaar-vcs.org/TortoiseBzr

于 2009-05-29T16:16:37.153 回答
1

实际上有这样的工具。它被称为emacs

只需为自己创建一个“~/.emacs”文件并将以下行放入其中:

(setq kept-new-versions 5)
(setq kept-old-versions 5)

然后重启emacs。

这告诉 emacs 保存该文件的 5 个最旧版本和 5 个最新版本。它们将保存在名为 filename~n~ 的文件中,其中“filename”是您文件的正常名称,“n”是备份编号。

于 2009-05-29T16:40:46.183 回答
1

如果您单独开发项目(不需要服务器进行协作),Mercurial 可能是您的首选系统。我个人很看重它的一个特性:它只使用一个地方来保存它的信息,那就是你项目根目录下的.hg目录。它不会将其数据放入每个目录(如 SVN)。这样存档和项目目录很容易管理。

于 2009-05-29T18:21:28.863 回答
0

我使用过 Visual Source Safe、Perforce 和 Subversion。它们都很好,但我不得不说对 Subversion 的支持和扩展似乎稍微好一点。如果您打算进入/留在软件行业,您必须了解源代码控制的基础知识,我强烈建议您设置其中一项源代码控制服务。Subversion 是我的推荐,也是免费的。一开始会很复杂,但您确实应该使用 SVN 客户端添加 GUI 以增加实用程序并减少您观察到的所有复杂性。

于 2009-05-29T17:55:26.233 回答
0

我在“dreamweaver svn”的快速谷歌搜索显示,许多人正在 Dreamweaver 中使用 Subversion。我是版本控制的拥护者,尤其是 SVN,所以我建议你研究一下 :)

如果您不想使用完整的版本控制系统(如上所述),您可以通过改进和自动化您最初描述的过程来改进您的工作。根据您对工具的舒适度,您应该能够在 DreamWeaver 本身或 Windows 脚本(Powershell、VBA、Perl 等)中编写一个脚本,该脚本至少会为您正在工作的文件夹制作以日期命名的副本。经常。这将使您不必这样做,并确保没有任何与错字相关的问题。再往下走,您可以让脚本将您的工作副本放在备份驱动器或远程服务器上,然后您也可以进行备份。

恐怕我对 DreamWeaver 了解不多,但如果它内置了很多脚本支持,您甚至可以“挂钩”到保存/自动保存功能,让它们完全按照您的意愿行事。

希望这有帮助,adricnet

于 2009-05-29T18:13:10.940 回答