我正在开始一个新的分布式项目。我应该使用SVN还是Git,为什么?


当前回答

肯定是svn,因为Windows充其量是git世界中的二等公民(更多细节请参阅http://en.wikipedia.org/wiki/Git_(software)#Portability)。

更新:抱歉断开的链接,但我已经放弃尝试让SO与包含括号的uri一起工作。[链接现在固定。——编者)

其他回答

If your team is already familiar with version and source control softwares like cvs or svn, then, for a simple and small project (such as you claim it is), I would recommend you stick to SVN. I am really comfortable with svn, but for the current e-commerce project I am doing on django, I decided to work on git (I am using git in svn-mode, that is, with a centralised repo that I push to and pull from in order to collaborate with at least one other developer). The other developer is comfortable with SVN, and while others' experiences may differ, both of us are having a really bad time embracing git for this small project. (We are both hardcore Linux users, if it matters at all.)

当然,你的里程可能会有所不同。

肯定是svn,因为Windows充其量是git世界中的二等公民(更多细节请参阅http://en.wikipedia.org/wiki/Git_(software)#Portability)。

更新:抱歉断开的链接,但我已经放弃尝试让SO与包含括号的uri一起工作。[链接现在固定。——编者)

重点是,Git是分布式VCS, Subversion是集中式VCS。分布式vcs比较难理解,但是有很多优点。如果不需要这些优点,Subversion可能是更好的选择。

另一个问题是工具支持。您计划使用的工具更好地支持哪种VCS ?

编辑:三年前我是这样回答的:

Git目前只能通过Cygwin或MSYS在Windows上运行。 Subversion从一开始就支持Windows。作为解决方案 对于Windows可能为你工作,可能会有问题,作为最 Git的开发人员在Linux上工作,没有可移植性 心灵从一开始。目前我更喜欢Subversion 在Windows下开发。几年后,这可能就无关紧要了。

现在世界发生了一点变化。Git现在在windows上有一个很好的实现。虽然我没有在windows上进行全面测试(因为我不再使用这个系统),但我很有信心,所有主要的VCS (SVN、Git、Mercurial、Bazaar)现在都有适当的windows实现。SVN的这一优势已经不复存在。其他要点(集中式vs.分布式以及工具支持的检查)仍然有效。

Git在Windows下还不受本地支持。它针对Posix系统进行了优化。然而,运行Cygwin或MinGW可以让你成功运行Git。

现在我更喜欢Git而不是SVN,但是如果你来自CVS, SVN的土地,它需要一段时间才能超过阈值。

在做了更多的研究,并查看了这个链接:https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html

(摘录如下):

It's incredibly fast. No other SCM that I have used has been able to keep up with it, and I've used a lot, including Subversion, Perforce, darcs, BitKeeper, ClearCase and CVS. It's fully distributed. The repository owner can't dictate how I work. I can create branches and commit changes while disconnected on my laptop, then later synchronize that with any number of other repositories. Synchronization can occur over many media. An SSH channel, over HTTP via WebDAV, by FTP, or by sending emails holding patches to be applied by the recipient of the message. A central repository isn't necessary, but can be used. Branches are even cheaper than they are in Subversion. Creating a branch is as simple as writing a 41 byte file to disk. Deleting a branch is as simple as deleting that file. Unlike Subversion branches carry along their complete history. without having to perform a strange copy and walk through the copy. When using Subversion I always found it awkward to look at the history of a file on branch that occurred before the branch was created. from #git: spearce: I don't understand one thing about SVN in the page. I made a branch i SVN and browsing the history showed the whole history a file in the branch Branch merging is simpler and more automatic in Git. In Subversion you need to remember what was the last revision you merged from so you can generate the correct merge command. Git does this automatically, and always does it right. Which means there's less chance of making a mistake when merging two branches together. Branch merges are recorded as part of the proper history of the repository. If I merge two branches together, or if I merge a branch back into the trunk it came from, that merge operation is recorded as part of the repostory history as having been performed by me, and when. It's hard to dispute who performed the merge when it's right there in the log. Creating a repository is a trivial operation: mkdir foo; cd foo; git init That's it. Which means I create a Git repository for everything these days. I tend to use one repository per class. Most of those repositories are under 1 MB in disk as they only store lecture notes, homework assignments, and my LaTeX answers. The repository's internal file formats are incredible simple. This means repair is very easy to do, but even better because it's so simple its very hard to get corrupted. I don't think anyone has ever had a Git repository get corrupted. I've seen Subversion with fsfs corrupt itself. And I've seen Berkley DB corrupt itself too many times to trust my code to the bdb backend of Subversion. Git's file format is very good at compressing data, despite it's a very simple format. The Mozilla project's CVS repository is about 3 GB; it's about 12 GB in Subversion's fsfs format. In Git it's around 300 MB.

在阅读了所有这些之后,我确信Git是可行的方法(尽管存在一点学习曲线)。我也在Windows平台上使用过Git和SVN。

我很想听听其他人在读完上面的文章后会怎么说?