基本SVN用法

时间:2009-07-27 18:30:56

标签: visual-studio svn version-control ankhsvn

前言

让我首先说我是一个相对较新的程序员而且我之前没有源代码控制经验 - 虽然经过一些阅读后,概念和一般术语对我来说是陌生的


背景

我即将开始我的第一个专业项目(我将是唯一一个承诺),我想借此机会熟练掌握Subversion和源代码控制实践。

  • 在AnkhSVN SC插件的帮助下,将在Visual Studio的Windows框中进行开发。

  • 我在Windows服务器上设置了SVN并创建了一个存储库,我将存储我的项目。

  • 此特定项目需要提供二进制文件源代码。


问题

  1. 如何设置解决方案?假设我已将解决方案的初始版本导入存储库;接下来,我在我的本地工作副本中取得了一些里程碑;我承诺这些改变;那会发生什么?我是否只是在我的本地开发机器上构建解决方案并将二进制文件打包在那里然后呢?这是如何在现实世界中完成的?

  2. 在虚拟机中弄乱VS和AnkhSVN之后,我注意到在我检查了一些解决方案的修订后,我的本地副本的目录树在每个节点中获得了一个名为“.svn”的额外目录。根据“背景”中的第三点,我还将提供源代码和二进制文件。这提出了一个问题:如何获得我的解决方案的“干净”版本?我是否希望编写一个shell脚本来为我清理?

  3. 我经常创建,合并(手动,即),并删除我的解决方案中的文件。 SVN(而不是VS和AnkhSVN)会优雅地处理这个吗?如果我回到某个版本,VS / AnkhSVN是否会自动重新加载已添加/删除文件的解决方案?

  4. 在哪里学习使用源代码控制,以及在这需要多长时间才能让你精通(即,直到这些操作是第二天性)。

    < / LI>

    我真的想开始使用源代码控制,但我很害怕如果我开始使用它并且我做了一些无意中愚蠢的事情,我就会丢失我的代码。任何额外的建议表示赞赏。

10 个答案:

答案 0 :(得分:14)

  1. 通常,打包的二进制文件不会保留在源代码管理中。如果有的话,为它们使用单​​独的存储库。事实上,如果可能的话,尽量让二进制文件远离您的存储库。没有源代码的编译版本。 (查看评论
  2. 获取TortoiseSVN以便在资源管理器中使用。您可以使用导出选项(而不是结帐)来获取目录的干净版本。为此使用单独的目录。
  3. Visual Studio将询问您是否要重新加载已更改的项目或解决方案。您需要确保在添加/删除文件的同时签入项目。它现在不会给你带来任何问题,但是如果你与多个人一起工作或者你想稍后恢复到早期版本,那就会出现问题。
  4. 在这里和那里:)花了我一个月左右的常规用法来做对了*
  5. 我过去使用过AnkhSVN,这很不错,但是如果你有大量文件的大型解决方案,你可能想要为VisualSVN支付一些现金。它使用TortoiseSVN(在术语上有一些缓存机制),使其更快见下面关于AnkhSVN 2.0的评论)。 VisualSVN还将帮助您在特殊目录上设置属性。例如,它会自动忽略binobj目录 我不是一个非常喜欢为一个免费项目如此重视的产品付钱的人,但我不得不说投资是值得的。

    其他人已经就如何设置您的存储库链接了一些不错的消息来源,所以我不会过多地介绍它。我通常会自己使用/trunk/branches/tags方法。至少标记您的发布版本,以便稍后快速找到它们。

    广告4:
    到目前为止,我已经使用过CVS(很少),Visual SourceSafe,Subversion和Team Foundation Server。我的意思是在某些时候尝试Git,但你可能比SVN做得更糟。

答案 1 :(得分:8)

4)我从这个开始,因为这将回答你的许多第一个问题:Pragmatic Version Control using Subversion是在我看来与SVN合作的圣经。但与圣经不同的是,你可以在几天内完成它而不用匆忙。

1)版本控制项目通常采用仅提交源文件的形式,因为项目文件(例如,VS)通常包含当前安装的无关定义,并且会丢弃存储库。日常提交仅供您个人使用。对于主要版本,请使用标签。

2).svn目录是由SVN客户端完全管理的本地缓存存储库。不要碰它。

3)合并,删除和添加文件是版本控制的全部内容。是的,SVN会优雅地处理这个问题,这在参考书中很容易解释。项目的每个版本都是独立的。

答案 2 :(得分:6)

我无法回答你的主要问题,因为它们非常具有VS特异性,但当你说:

  

如果我开始使用它,我很害怕   我无意中做了一件事   愚蠢,我丢失了我的代码。

让我向你保证。 VCS的重点是防止任何代码丢失。我所知道的所有版本控制系统都无法修改旧版本的文件,而不会跳过一些极不可能的箍,例如直接用文本或十六进制编辑器编辑存储库。只要你不这样做,只要你定期备份你的存储库,你的代码就会安全,你可以随意进行实验。

答案 3 :(得分:4)

您应该阅读book。它是免费的,可以回答问题2(答案:导出)。

答案 4 :(得分:2)

  1. 在进行个人更改后,您将在本地构建。通常你会在提交之前在本地构建并测试。在现实世界中,多个开发人员都在同一个SVN上工作,并且通常会有一个夜间构建,您可以在其中获取更新的二进制文件,当然您可以在本地重建。在您的情况下,只需根据具体情况进行重建,强制提交源代码,然后每天提交二进制文件。
  2. 这看起来像SVN和Visual Studio设置问题。我会向这些论坛寻求帮助。
  3. 您通常会在最终处理解决方案,即当您添加和删除本地解决方案更改的文件时,由于解决方案很小,您也可以将此解决方案上传到SVN。任何SVN都可以处理文件的添加和删除。
  4. 我开始使用谷歌代码和subclipse,毕业于Tortoise SVN。 Tortoise SVN很不错,因为它集成在shell中,因此您可以在任何IDE中进行开发,并将本地文件视为本地文件,并在需要时提交它们。
  5. 一开始只是很奇怪,但SVN很快就会成为你的第二天性。祝你的项目好运。

答案 5 :(得分:2)

我将使用Subversion推荐使用实用版本控制的Avihu Turzion。如果您还没有,请查看Eric Sink's source control how-to

  1. 由于您是唯一一个提交,在本地构建和打包二进制文件绝对是一个选择。如果构建/打包步骤是相当标准的,则通过建立持续集成系统来自动化它们。 TeamCity Professional是一款免费的产品,您可以轻松配置并使用Subversion。

  2. 正如其他人所说,导出选项是获取没有.svn文件的解决方案版本的方法。

  3. Subversion可以非常顺利地处理文件创建,合并和删除。使用你提到的插件,特别是如果你使用像AnhkSVN和TortoiseSVN这样的插件,插件报告的内容可能与Subversion存储库实际提交的内容不同。如果你删除文件或移动文件,考虑完全在命令行(或在TortoiseSVN)完成。

  4. 一旦我工作了几年,我学会了自己使用源代码控制。当我开始使用Visual SourceSafe(这很糟糕)时,我最终转向使用Subversion和/或TFS进行版本控制的公司。

  5. 如果您不使用源代码控制,那么您丢失代码的可能性要大于您的代码。你肯定是从右脚开始的。

答案 6 :(得分:2)

  1. 我在Subversion中存储文件的方法是设置Trunk / Branch / Tag目录,尽管我几乎从不使用Tags。你的后备箱是你坚实的工作基础。分支是指您需要“分支”代码,处理某些内容,然后将其合并回主干。你可以做一些你知道需要一段时间的事情,你知道你可能需要做一些修改后备箱的快速修复。合理?

    - 您可以在本地检查最新版本并进行构建,或使用MSBuild或Cruise Control.NET或TeamCity(来自resharper的人员)设置构建环境。这将为您构建一个构建,然后您可以部署它。所有这些都可以实现自动化,只需要配置一切即可。 Team Foundation Server处理大部分内容。

  2. .svn目录是如此颠覆知道你正在做什么,并且可以说“嘿,某些事情发生了变化,用一个漂亮的红色标记警告用户并让他们知道某些事情发生了变化。”

  3. 是SVN将正常处理删除和合并。您可能不时被迫使用“清理”实用程序。

  4. 我在第一个项目中从高级开发人员那里学到了源代码控制。

答案 7 :(得分:1)

我个人通过反复试验获得了源代码控制。我确实觉得Sourcegear Vault 更加用户友好,并且更适合Visual Studio开发,但我已经设法有效地使用它们。

如果您遇到SVN问题,我建议您查看一个或两个人团队免费的保险库。 (一个管理员和一个用户帐户不需要购买。)

答案 8 :(得分:1)

  

如何设置解决方案?假设我已将解决方案的初始版本导入存储库;接下来,我在我的本地工作副本中取得了一些里程碑;我承诺这些改变;那会发生什么?我是否只是在我的本地开发机器上构建解决方案并将二进制文件打包在那里然后呢?这是如何在现实世界中完成的

大多数地方已经标准化了自动构建流程。如何设置一个根据公司和项目的要求而有所不同,但不能提出有争议的好处。我工作的最后一个地方自动化90%的构建并根据需要运行它,但是当我离开时它们正朝着完全自动化的方向移动。这超出了您的问题的范围,但如果您感兴趣,您应该着眼于构建自动化。 .NET开发的一些常用工具是CruiseControl.NET,MSBuild,NANT。大多数工具是为特定的开发环境或语言创建的,但很容易适应其他环境。

  

在虚拟机中弄乱VS和AnkhSVN之后,我注意到在我检查了一些解决方案的修订后,我的本地副本的目录树在每个节点中获得了一个名为“.svn”的额外目录。根据“背景”中的第三点,我还将提供源代码和二进制文件。这提出了一个问题:如何获得我的解决方案的“干净”版本?我是否希望编写一个shell脚本来为我清理?

正如其他人所说,.svn是存储库的缓存。更新,签入或合并时,svn会将缓存版本与您打算执行的操作进行比较,只会更新,签入,合并差异。在AnkhSVN的情况下,它与VS很好地集成,旨在在检入文件时忽略不必要的文件。因此,检查临时文件和二进制文件时应该没有问题(当然,除非您专门添加它们)。

  

我经常创建,合并(手动,即),并删除我的解决方案中的文件。 SVN(而不是VS和AnkhSVN)会优雅地处理这个吗?如果我回到某个版本,VS / AnkhSVN是否会自动重新加载已添加/删除文件的解决方案?

这是SVN的强项。一些VCS(如Visual Source Safe)使合并成为一种可怕的操作。另一方面,SVN专门针对合并操​​作而设计。大多数是自动处理。如果合并的版本之间存在冲突(同一行以两种不同的方式修改),它将向您显示问题,其余部分由您决定。很难真正删除SVN中的文件。因此,如果你决定探索一个旧版本,任何删除的文件仍然是他们的。

  

你在哪里学习使用源代码控制,以及你需要多长时间才能熟练(即,直到这些操作是第二天性)。

我在大学时听说过VCS,但在我第一次付费编程职位之前从未使用过VCS。它是视觉源安全的。学习基础知识(签出,签到,评论,查看和比较旧版本)非常简单。分支我后来用私有存储库学到了。这也是一件好事。 VSS中的分支比大多数其他VCS更容易出错。我现在的雇主使用SVN,虽然它不是最先进的VCS,但VSS看起来像黑客。

我无法强调自动化构建的重要性。我现在的雇主在我开始时没有构建过程(对大多数项目来说仍然没有)。我对继承的项目所做的第一件事就是自动完成整个构建过程。它在专用服务器上运行,作为监视SVN以进行更改的后台进程。如果它检测到任何它启动只需几秒钟的增量构建。接下来是一套自动化单元测试。如果所有测试都成功,它会将二进制文件放入测试环境中,以进行进一步的自动集成和系统测试。我会在流程的每个步骤得到通知,并立即知道是否有问题。

答案 9 :(得分:1)

我将尝试添加一些尚未被上述写得很好的答案所涵盖的评论。

  

如何设置解决方案   吗?说我已经导入了一个首字母   解决方案的版本   库;接下来,我已经实现了一些   我当地工作副本的里程碑;一世   承诺这些变化;怎么了   然后?我是否只是构建解决方案   我的本地开发机器和   把二进制文件包装在那里   然后?这是如何在真实中完成的   世界?

应该注意的是,忽略某些文件是SVN的核心功能,因此不需要额外的工具 - 只需要一些设置。一旦你配置SVN忽略你的构建输出,你就可以开发和构建你内心的内容,而不必担心SVN试图吸收二进制文件。

标记您的版本。使用标记名称中版本中的版本号。从标记构建二进制文件,并向您的客户发送源的完整副本以及生成的二进制文件。您不需要修改二进制文件本身,因为标记的不变性意味着您将始终能够重新生成相同的有效负载。

  

我经常创造,合并(手工,那个   是),并删除我的解决方案中的文件。   将SVN(而不是VS和AnkhSVN)   优雅地处理这个?将   VS / AnkhSVN会自动重新加载   添加/删除文件的解决方案   从它回来,如果我回到某一点   修改

VCS通常会遇到一些问题。一种是使用Windows资源管理器删除修订的文件(又名:键盘删除)。另一种方法是将修订后的文件从Windows资源管理器中的一个位置移动到另一个位置。除了这些半稀有行为之外,SVN将轻松跟上您的修改和合并。对于上面列出的两个事件,您可以使用SVN命令行TortoiseSVN或其他帮助应用程序执行“SVN删除”或“SVN删除+ SVN(重新)添加”。

顺便说一句 - 一个好的(免费)合并工具是Kdiff3

  

你在哪里学习使用来源   控制,你需要多长时间   变得精通(即,直到   这些行动是第二种性质)   在它。

我在工作中学习SVN,在家学习Mercurial,在工作中学习AccuRev(再次)。 “获得”你的第一个VCS可能需要很长时间 - 特别是如果你在真空中学习它。在第一个之后,它变得更容易。我会把它放在几个月而不是几周的时间。

祝你好运!