我试图了解subversion / git

时间:2011-04-28 23:27:27

标签: svn git version-control

我试图了解并学习如何使用subversion或git。你推荐哪个?

看起来如此复杂和混乱。

我做了很多PHP Web开发项目。我有习惯备份项目文件夹,如project_name_version_date

初学者学习的最佳方法是什么?

如何将更新的项目从本地计算机上传到实时网站到另一台服务器,如何从subversion / git完成?并重新上传到新版本?

2个或3个人可以同时在同一个项目上工作吗?他们从服务器加载代码文件?它不会相互冲突......就像他们删除了类对象,函数等一样。

8 个答案:

答案 0 :(得分:3)

  

最好的学习方法是什么   初学?

  

如何上传更新的项目   本地机器生活网站到了   不同的服务器,怎么做   来自subversion / git?并重新上传到   新版本再次?

使用版本控制,您可以拥有一个中央存储库和一个或多个工作副本(git在每个工作副本的本地存储库中添加,以允许分布式存储/管理)。

在您的情况下,您的实时网站和开发副本都是工作副本 - 您可以从中央存储库结帐到这些位置。然后,您将处理开发副本,并将这些更改提交到中央存储库。一旦准备好发布,您只需对实时工作副本执行更新,该更新将从中央存储库中提取所有更改。

  

2或3人可以同样工作吗?   项目在同一时间?他们加载   来自服务器的代码文件?   不会相互冲突......   就像他们取消了课程一样   对象,功能等。

是的 - 每个人都有一份工作副本,他们会对其进行更改。

冲突可能会并且会不时发生 - 但SVN和Git可以很容易地处理很多事情。例如,简单地合并对同一文件的不同位置的代码的更改。对同一文件中相同位置的代码的更改通常需要手动干预。

可能发生的最严重冲突可能是SVN称之为“树冲突” - 文件夹结构的变化。这可以是一个真正的PITA来修复 - 但你必须真正不顾一切地引导它们。

尽管如此,在非版本控制的环境中发生冲突的可能性(以及解决它们的困难)远远大于此。

有一些做法可以帮助防止发生重大冲突:

  1. 模块化代码
  2. 明确界定工作 - 阻止程序员踩着彼此的脚趾
  3. 在提交之前更新本地副本
  4. 承诺小,经常承诺 - 多么小?很难说,你开始感受到这一点......但是要考虑功能和功能。
  5. 我认为如果你不使用其他任何东西,Git可能最好开始 - 分布式系统意味着你在推送到中央存储库之前更能够解决本地级别的冲突。我的所有项目都使用SVN(在办公室和家中),但我开始在Drupal项目中使用Git,就像我到目前为止看到的那样。

答案 1 :(得分:2)

GIT是版本控制的新范例。 SVN已经存在了一段时间,但GIT和Mercurial正在获得牵引力,因为它们允许“分布式版本控制”。这意味着您的代码没有中央服务器。每个人都有完整的历史记录,可以互相发送“补丁”来共享代码。但是,git和mercurial确实支持与具有中央存储库非常类似的工作流。集成git和“gerrit”对于处理多人项目非常有用。

我建议跳过svn,因为svn是一种较旧的技术,实际上会阻碍你对git / mercurial的理解,因为它是一个不同的范例并使用不同的过程。 GIT / mercurial只在本地工作(没有服务器,你是唯一使用的),也适用于大型团队。

GIT功能更强大但更难使用,而mercurial具有更实用的外形基础。

答案 2 :(得分:1)

我建议,去git,你也可以在网上访问你的存储库。对于颠覆,据我所知,没有这样的规定。但这不应该只是理由。我用过两者,git非常有用。 Git的主要优点是您不必始终连接到主存储库。你可以在这个问题中阅读更多内容,这个问题已经很好地解释了Why is Git better than Subversion?

答案 3 :(得分:1)

您不熟悉整个版本/源代码控制概念。我建议你阅读一些关于VC的内容。

最好的学习方法是在日常项目中实际使用VCS。是的,很多人可以同时处理同样的事情。然后“冲突”就会发生。但是现代的VCS可以让你做一些叫做合并的事情。

我建议你从学习git开始。因为你是整个事物的新手,对你来说应该不是很难。但恕我直言学习SVN(这是一个'集中版本控制系统)然后进入git(这是一个分布式版本控制系统)往往会使事情复杂化。很多人都觉得分布式VCS是未来的发展方向。所以我建议你开始学习git或Hg,两者都是很好的VCS。

祝你好运!

答案 4 :(得分:0)

你应该阅读一个tutorial on Subversion,并且在你有相当的SVN经验之前,要远离Git。

最好的学习方法是遵循实践教程,然后在正常的开发工作流程中自己尝试相同的事情。

当然很多人可以在同一个项目上工作,这是我们使用版本控制的主要原因之一。

答案 5 :(得分:0)

我强烈建议退房http://hginit.com/它使用与Git非常相似的Mercurial,但从hginit获得的重要一点是分布式版本控制(以及一般的版本控制)如何独立地工作和作为一部分一个团队。一旦理解了hginit中的概念,您选择的分布式源代码控制工具就不那么重要了。

答案 6 :(得分:0)

Subversion和git在处理代码方面有很大不同,但目标是相同的。

Subversion是源代码控制的集中解决方案。 Git是源代码控制的分布式解决方案。在这两种情况下,您只能自己使用它们,或者任意大型团队都可以使用它们。

Subversion是集中式的,这意味着只有一台服务器。所有代码都存在于该机器上。处理这个问题在概念上有点简单。

Git是分布式的,这意味着有很多服务器(每个人都是服务器和客户端)。这使得理解哪一个是“正确的”服务器变得有点复杂。

现在,您正在创建要保留在磁盘上其他位置的文件的副本,并将其用作备份。执行此操作时,您一次只执行几个步骤(在概念级别):

  1. 决定要备份的文件

    大多数源代码控制都需要您的帮助来告诉它要跟踪哪些文件。这在git和subversion中都被称为add命令。

  2. 备份这些文件,以便将来的更改不会影响它们

    这是通过commit对源代码管理系统为您跟踪的文件所做的更改来完成的。在subversion中,这是使用commit完成的。在git中,add让git知道您对文件所做的更改,而commit会以永久的方式保存更改。

  3. 以对您有意义的方式标记文件副本

    这在不同的源控制技术中以多种方式完成。两者都有提交的历史,分支/标签的概念和不同的存储库(虽然代码在subversion中通常不会在存储库之间发生变化)。

  4. 在Subversion中,代码位于单个服务器上。每个人都从那里获得它(最初是checkout,之后是update)。在git中,您fetch从另一个存储库进行远程更改。

    Git在颠覆方面有一些优越的冲突解决方案(两个人同时改变同样的事情),但如果你不小心,你仍然会陷入大量的合并困境。 Git rebase可能会有所帮助,虽然我只是以个人的方式使用它,所以我还没有太多的冲突解决方法。

    Git有一些工具,有些人发誓(bisect和grep),我发现它有点用处。您的里程可能会有所不同:)

答案 7 :(得分:0)

这主要是一个安慰的问题,但由于你是一个初学者(并且可能愿意花一些时间学习一项新技能),我会推荐git。作为使用过svn和git的人,我认为你的工作流程似乎会受到git的帮助。

在思考svn vs. git时,您需要自己回答一些问题:

  • 您所在的公司政策是否阻止您使用git? (如果是,请使用svn)。

  • 您是否有一个工作流程,您希望创建一个“主题分支”来开发一个功能,然后在您认为该功能运行良好时将其合并到main中? (如果是的话,git会更好,因为它实际上鼓励你创建分支,并且很容易将它们合并回来,而svn是完全地狱,就创建分支并将它们合并到main而言)。

  • 您是否希望经常以小块的形式提交,以便您可以选择性地展开更改的干净记录? (我认为git可以更好地支持这种开发方式。)

  • 请看这个命令:http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html。我不能告诉你有多少次我必须做一个自定义版本,其中我提取特定功能和'撰写'图像/网站/应用程序以进行快速演示。如果您认为自己经常这样做,请考虑如何在颠覆中做到这一点。我可以提前预测它将成为野餐:)

还有很多其他原因,但如果您的工作流程看起来像我所描述的那样,那么您应该使用git。

您可以从这个优秀的资源中学习git:http://progit.org/book

请记住,如果你被svn困住并仍然想使用git,那也很容易!

http://progit.org/book/ch8-1.html

相关问题