源控制 - 如果,为什么,如何开始?

时间:2010-01-14 13:13:36

标签: svn git version-control cvs

  

可能重复:
  Using Source Control

所以,虽然即使在stackoverflow这里实际上在版本控制方面还有很多东西,但我找不到能回答我所有问题的好东西。如果您有任何发言或发布链接,请在此处进行。

1.我需要从版本控制开始吗?

虽然大多数人都同意,即使是单个开发人员/程序员也应该从版本控制开始,没有人(或者至少是可理解的形式)告诉

2.,怎么样?

在我的本性中,我需要知道CVS,SVN,Tortoise,Git,GitHub是什么意思,有什么不同,但我很难找到一些简单的启动版本控制世界。

作为开发人员/程序员,我工作或研究了几乎所有的编程/标记语言,这是主要的(从pascal到java,从html到php :))并使用了许多编辑器,IDE和程序。当有人提到你甚至可以使用源代码控制来写东西 - 为学生做家庭作业,年度报告,书籍......你必须包括更多的编辑......

我现在已经不知道如何从版本控制开始,如何将它合并到我的工作流程中,如果我需要服务器或什么。

感谢您帮助我找到了什么以及如何处理它:)

修改 从你的所有答案(谢谢),我感觉它真的只有像“有历史的同步文件夹”之类的东西。 (以最明显的方式:))如果是的话,你能回答两个问题吗? (编号为4.和5.,所以它不会在答案中混淆:))

4.如果我决定彻底改变我的程序结构怎么办(例如,在flex中,我决定使用两个as3类而不是MXML组件) - 这会不会造成混淆?

5.,从其他问题来看,我如何投入? (发现这个问题已经发布并且可能已经回答了,但是又失去了它)

编辑2: 再一次,更多答案(谢谢)

6.我的问题4更像是如果我不小心(或不)更新一些已删除的文件(这可能是可能的),它会破坏我的程序,因为例如它取决于其他已删除的文件,这不是取消删除,我能得到吗? :d

7.我看到了一些我会看的方式。谢谢你的回答......但是,现在我很困惑,我应该给谁“好的答案”,因为你们都非常乐于助人:)

接下来,我会(对于任何寻找我正在寻找和绊倒这个问题的人):

阅读此stackoverflows:

观看此视频:

http://excess.org/article/2008/07/ogre-git-tutorial/

在理解手册的基础知识时,我将其缩小为颠覆(+ TortoiseSVN)和git(hub),这是最常用和最受欢迎的。我现在只有github的问题是私有存储库是付费的,所以我要么寻找不同的git解决方案,要么更多地关注Subversion。

非常感谢大家,我提出了最有帮助的答案,也感谢您的评论。 亚当

编辑:试过Mercurial,但发现我的工作流程不行......现在尝试颠覆,所以我标记了最老的颠覆答案:)

16 个答案:

答案 0 :(得分:17)

我要反对当前的粮食并说与Git一起去。这就是我所做的,而不是学习SVN。仔细阅读git book的第一位。

一旦掌握了它,它就会非常简单易用。想在当前目录中启动一个新的存储库吗?

git init

想用短提交消息提交所有内容吗?

git commit -am 'My commit message here'

这真的不是火箭科学,因为有些人会相信你。

对于一个单独的开发人员来说,这非常简单。您不必为单独的仓库而烦恼,仓库就在您的工作目录中。

编辑:您还询问了github。他们有真正的白痴入门指南。注册帐户并添加新存储库时,它们会为您提供将其与本地存储库同步所需的确切命令。这是使用命令行的另一个好理由。

为什么要使用github?如果您的计算机爆炸,云中就会有一个副本。如果你想与朋友合作,给他们发一个链接,他们可以直接从github - v。拉。

编辑2:

4:这不会造成任何问题。

5:我不能代表SVN,但是从我听过的所有内容来看,因为git使得它很容易提交,你可以更频繁地提交,这可以让你更精细地控制你的历史。所以,假设你犯了一个大错误,打破了一切,你在一周前做了一些时间,你可以通过你的git日志找出变化发生的地方并修复它。至于实际频率,我每半小时约会一次(实际上每pomodoro一次),但如果发生了很多变化,可能会更频繁。

答案 1 :(得分:14)

  1. 是的,您需要进行版本控制。

  2. 我建议你在PC上安装Subversion(无论你安装了什么用途)。如果您正在使用Windows也可以获得TortoiseSVN,它是Subversion的最佳客户端。 Subversion服务器在PC上运行正常。

  3. 下载并阅读Subversion手册。其中一个章节提供了很多问题的答案,并非所有问题都偏向于Subversion。

  4. 是的,还有其他VC系统可用,但对于单独的学习者,我完全推荐Subversion + TortoiseSVN。

    HTH

    标记

答案 2 :(得分:3)

  1. 是的,当然。
  2. 从Subversion和TortoiseSVN客户端开始。它有很好的支持,很棒的工具,配置和使用通常比Git更直接。
  3. 免费提供优质Subversion manual

答案 3 :(得分:3)

您的编辑答案,第4点和第5点(注意我的投票是针对GIT的 - 我们在这里使用它(多用户窗口环境)并且它确实非常有效:

4.,如果我决定彻底改变我的程序结构怎么办?

大多数版本控制系统都能够处理这个问题。在一天结束时,当您提交更改时,您会保存一个版本,保存文件在特定时间点的外观,这应该是编译代码所需的全部内容。

您的版本控制系统只是一种“简单”的方式,可以在某个时间点拍摄文件的快照。

5.,从其他问题来看,我该怎么做?

尽可能多的时间。换句话说,如果你改变某些东西(或者更重要的是,不小心删除了某些东西或做了一些非常愚蠢的事情),你就会感觉到你刚刚失去了几小时可能已经犯下的相对无关的工作(并且保存),然后你不经常提交。

答案 4 :(得分:2)

关于源代码管理,您可能需要查看此"How to use SVN, Branch? Tag? Trunk?"

关于使用某种源代码控制,对代码和文档进行修订以重新进行软件开发总是好的。值得一看GIT。

答案 5 :(得分:2)

其他答案都是现货。但是,我还要提到源控制有两种不同的“风格”:
1)集中=您将代码存储在服务器中,尽管这可能是您的本地机器(例如CVS,SVN) 2)distributed =您将代码存储在本地数据库(例如Git,Mercurial)中

SVN几乎是事实上标准的集中式源代码控制程序,尽管您需要设置其服务器才能使用它。不是太难,但你可以尝试像Mercurial这样的分布式系统来减少额外的步骤。

答案 6 :(得分:2)

对于您的新问题:

4:重组您的应用程序不会有问题。他们只是看到一些文件被删除而其他文件被添加。

5:随心所欲。你犯的次数越多,修复小错误就越容易。

答案 7 :(得分:2)

在孤独的爱好方面,源代码控制为我解决了三个问题。

  1. 硬件/软件/湿件故障时备份
  2. 不同机器(笔记本电脑,台式机,朋友电脑)之间的轻松同步
  3. 但是,改变我的游戏是Git对分支的强烈支持。
  4. 让我扩展#1。除了无法控制的失败案例外,我还可以进行投机开发,如果/当投机失败回到稳定的基础时很容易。

    让我在#3上展开一秒钟。我总是有一个相当大的功能列表,我想添加到我正在编写的软件中。我为我想要添加的功能创建了一个分支,并且可以在其上工作一段时间。如果以后,我觉得有兴趣使用不同的功能,我可以回到工作基地并在其他功能上工作一段时间。当我对任何/所有变化感到满意时,将它们合并在一起很容易。

    我在开发中使用过SourceSafe,ClearCase,CVS,SVN,SCCS,RCS和Git,对我来说,让我在爱好编程中定期使用版本控制的工具是Git。它不仅让我失望,而且使上述任务更容易。

答案 8 :(得分:1)

是否使用源代码管理的决定实际上取决于您的需求。对于单个开发人员类型的氛围和小项目,您可能只是将其用于版本控制;使您可以更改代码,而不必担心丢失已经完成的工作。这种声音就像你在哪里,所以我不会在源代码控制的各个方面都被包裹起来。如果你不关心保留这些版本并且愿意冒失去的东西,那么源代码控制可能是你不需要的开销。

这里的大多数人都会说Subversion(SVN)是要走的路,他们可能是对的。不是必需的,因为它是最好的工具,但因为它是免费的,而且相当容易理解和使用。它也被开源社区广泛接受,这意味着网上有很多关于它的信息。 TortoiseSVN甚至主要来自Windows中的上下文(右键单击)菜单,因此您可以避免任何其他“编辑器”。

答案 9 :(得分:1)

即使作为单个开发人员,使用某种形式的版本控制也有很多好处。对我来说,最重要的原因是,如果你搞砸了你的源代码(如果你做了一些大的编辑而你的程序停止工作),你可以恢复到以前的工作版本。所以在第一个问题上我会说:“肯定是!”。

如果您在使代码开源时没有任何问题,那么有许多网站可以免费托管您的项目,例如googlesourceforge。否则,您可以在自己的计算机上运行subversion,cvs等服务器。

至于工作流程,大多数版本控制软件(VCS)的工作方式如下:

  • 您将VCS指向磁盘上包含源文件的文件树,并要求它在您的服务器上创建一个存储库(在设置VCS时这样做一次)
  • 您可以编辑文件树中的某些文件
  • 通知VCS,您希望将文件树发送给服务器。这通常可以通过命令行或某种GUI来完成。此操作通常称为提交
  • 服务器会记录对每个文件所做的所有更改

对于问题4:大多数VCS都支持移动/重命名文件,这也将进入历史记录,所以这不会导致任何混淆。

对于问题5:尽可能经常。在我工作的时候,我做出任何我已经验证过的工作变更。在多用户场景中,它被认为是打破构建的主要罪,即提交非编译/非工作版本,因为如果更新其代码,这会使其他开发人员停止尖叫。如果你是唯一的开发人员,我认为你可能会有点松懈。

答案 10 :(得分:1)

你说你正在寻找一个“死的简单启动”,在这种情况下我会推荐Git。安装工具后

git init

在当前目录中初始化存储库。

git add yourfiles

添加您要控制的文件,

git commit -ma "commit message"

提交更改。

Github Guides是在大多数平台上开始使用Git的绝佳资源,并且包含许多有用的链接。

答案 11 :(得分:1)

版本控制(工具和实践)是每个认真的程序员都应该知道的。我建议您学习一些基本系统,并尽早熟悉这些想法。

版本控制系统有各种风格。您可能会遇到集中式,分布式,本地等术语,这些术语可能会让那些不熟悉的人感到困惑。关于任何版本控制系统的大多数好书(例如Subversion的Subversion book和git的Pro git book)将为您提供版本控制本身的一些介绍(与他们覆盖的实际工具分开)。我还建议Wikipedia pagethis page进行快速介绍。

完成后,选择一个系统。有许多可供选择,但他们的哲学是不同的。 SVN,CVS等是集中的,并且已经失去了像git和mercurial这样的新版本,它们是分布式的。我建议你首先尝试使用subversion(因为它仍然被广泛使用,技能将是有用的)然后任何分布式(我个人最喜欢的是git)。

最后的学习行为只会来自实践和经验,而不是来自读书。祝好运。 :)

答案 12 :(得分:1)

为什么呢?我自己和商业上做了很多工作,我永远不会,在没有源代码控制的情况下永远不会开始一个半严肃的项目。多年来,我已经失去了太多的演示(我做了很多教学)和其他代码,我认为源控制的安全网是至关重要的。我还运行多台机器(至少是一台笔记本电脑和一台台式机),这意味着我可以从多个地点进行提交和结账。

如何?对于我的设置,我在Windows上运行的Apache上托管了subversion。这是在Linux上,但我出于各种非技术原因移动它。它在VMWare虚拟机中运行。我不确定,但如果有一个VMWare设备,我不会感到惊讶 - 我很确定有一个适用于Apache的VMWare设备。设置很简单,除了我想要将新项目添加到版本控制之外,基本上不需要管理。我的服务器暴露在外面,所以我可以从任何地方访问它,如果需要,你可以在家庭网络上安装服务器。

像我说的那样我使用颠覆。我也在服务器上安装了git但没有切换到git,部分原因是我的惯性和部分由于工具。今天我主要在Windows上的.net和Visual Studio工作,所以我喜欢集成到Visual Studio中的工具,而不是我不喜欢运行命令行工具,如果它们被集成,它会更容易。

至于更改程序结构 - 在这种情况下版本控制的主要优点是,如果你搞砸了,你可以再回去。你甚至可以尝试一些东西,如果他们不工作就把它们抛弃,例如,分支你当前的主要开发线。如果我正在尝试一个重大的重组,我可能会分支我的代码库,重新构造以使一切正常工作,然后将该分支移到'trunk'上(以svn术语)。你不必这样做,但它给你一个安全网。

我应该多久一次?这取决于!对于代码,可能在一个工作单元(可能只是添加一个测试,或者添加一个功能),代码应始终构建。对于文件,不太频繁。您可能还有关于此的公司策略,以及搁置(在VSTS中)您可以在不登记的情况下将代码存储在存储库中的机制。请记住存储库是为了a)保持代码安全b)保存最新的代码和c)允许共享代码。对于b)和c)要满足,代码应该是可构建的并通过所有测试,所以不要随意检查代码。

希望这有帮助

答案 13 :(得分:1)

是的!是的!请从Git开始。

开发人员习惯于为已经稳定的应用程序尝试新的东西/方法。在我遇到Git之前,我一直将我当前的稳定项目复制到一个文件夹上,在文件夹上记下日期标记,以便记住我在哪里以及哪个是稳定版本,然后我会开始使用代码。

但是使用Git我在我的代码上尝试新技巧没有问题,我所做的只是从我的主人(主要稳定的应用程序)分支做我的尝试,如果我失败了我尝试我只是丢弃分支和快速切换回我的主人,这仍然完好无损,安全稳定。如果成功(大部分时间不是)我只是将分支合并到主人,然后丢弃分支。多好啊。

Git中的分支是让我黯然失色的原因。试试吧

答案 14 :(得分:0)

  1. 从版本控制开始是个好主意。除了极少数例外,每个软件企业都会使用某种形式的版本控制,因此您拥有的体验越多越好。另外,源代码控制只是一个好主意,我几乎把它用于我所做的一切。示例:每次我将简历发送给潜在雇主时,我都会标记该版本。现在,我已经获得了任何时间内简历看起来的永久性快照。

  2. 如何:如何取决于您决定使用的系统。我将在讨论中加上2美分,并为Git投票。一旦安装了Git,分支,提交,创建存储库;这些东西都非常简单,超级快。对于单独的开发人员来说,缺少中央存储库也使得设置变得更加容易。我不同意那些说学习Git很容易的人。有些命令是如此深奥,你可能永远无法通过频繁浏览文档来放松自己。 (git push origin :some-branch任何人?)

  3. 您没有问题#3,因此我提供了一个链接:http://gitready.com/

  4. 完全改变程序结构完全没问题。在进行更改之前提交,在进行更改后再次提交,如果你搞砸了,你将能够回滚所有内容。使用Git的另一个好处是Git将跟踪多个文件中的文本。因此,例如,如果Alice在文件A.m中写入20行代码并且Bob将这20行代码移动到文件B.m中,Git将允许您将该代码的源追溯回Alice。

  5. 我经常提交,几乎我所做的每一项改变都会得到提交和描述。不要忘记提交消息!拥有100个提交但没有时间戳的列表对你来说几乎没有任何好处。当我进行大量的GUI调整和/或重构时,我会经常花更多的时间编写提交消息,然后我会编写代码...但是有一次2字符编辑17提交以前会破坏我的测试用例,我很高兴我的承诺如此自由和冗长。

  6. 是。有时需要付出一些努力来解决问题,但如果你要小心谨慎,那么你的数据很少会消失。

  7. 如果没有其他人想要它,我会接受它。 ; - )

答案 15 :(得分:0)

我必须加上我对mercurial的投票。不能把风头全部留给git。 ; - )

但无论你最后选择什么,都要开始使用一个。我很坦率地说你使用过所有这些语言/工具并且从未使用任何 VCS开始。我,我在了解它的那一刻就开始了RCS(回到古老的Amiga 1000,没有高清,只有176KB的软盘:))。无法想象使用某种VCS。我实际上仍然使用RCS,对于不需要任何花哨的单个文件。