个人(一个人)项目的git。过度杀伤力?


84

我知道并使用两个版本控制系统:Subversion和git。到目前为止,Subversion被用于我是唯一开发人员的个人项目,而git被用于开源项目和我相信其他人也可以在该项目上工作的项目。这主要是因为git惊人的分叉和合并功能,每个人都可以在自己的分支上工作。非常便利。

现在,我将Subversion用于个人项目,因为我认为git在这里毫无意义。这似乎有点过大。如果我是唯一的开发人员,则将其集中(通常在我的家庭服务器上)对我来说是可以的;我还是要定期备份。我不需要建立自己的分支的能力,主要分支我的分支。是的,SVN对分支有简单的支持,但是我认为对它的更强大的支持是没有意义的。合并可能会很痛苦,或者至少从我的小经验来看。

我是否有充分的理由在个人项目上使用git?


61
不,我将git和hg用于个人项目。拥有本地修订控制是天赐之物。
wkl 2011年

7
无论是否有大量的贡献者,Git在许多方面都对所有项目都更好:git压缩东西比svn效率高得多(并且数量级更快!),git使备份变得微不足道,而git不会如果有人想贡献,那就成为障碍。
Artefact2

4
我使用的版本控制我的代码推向任意github上或到位桶,它的服务器作为备份我,也许有一天我会其实写东西的人将成为真正的兴趣。
马哈茂德·霍山

8
“我不需要自己创建分支的能力,主要分支是我的分支。” 关于undo何时将其作为应用程序中的一个相对较新的功能,很多人都说过同样的话。现在每个人都意识到他们一直都需要它。您需要分支,只是不知道。
Dan Rosenstark 2011年

1
@rtperson是的,您可以这样做,但实际上我更喜欢购买,尽管我更喜欢github而不是bitbucket。
Mahmoud Hossam

Answers:


155

这不是矫kill过正。我开始对个人项目使用Git和Mercurial over Subversion的主要原因是,启动存储库要容易得多。

想开始一个新项目吗?

> git init

AM!无需设置存储库服务器,也无需检入文件夹结构即可支持将分支和标记添加到Subversion存储库中。

稍后共享您的项目只是以下问题:(git push除了具有远程存储库之外)。尝试通过Subversion快速做到这一点!


24
公认。我无法证明git过于矫kill过错;)
安托(Anto

7
Steve341:我通常将所有源代码项目都保存在名为“ projects”的文件夹中。那是我保存所有存储库的地方,每个源代码项目一个。我从来不需要在一个和同一VCS存储库中一起跟踪多个项目。这就是Ivy或Maven等依赖管理系统的用途。
Spoike

3
@ Steve341跟踪这些东西有多么困难?您只有一个包含所有存储库的文件夹。它并不比你的系统的事实,你的系统是使用Git时一个非常不好的做法......不同的,除了
替代

2
@ Steve314:echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
安德烈Paramés

2
git init和ba!是的,然后cp ../the-other-project/.gitignore .在初次提交之前。am!
Dan Rosenstark 2011年

46

我认为将Subversion用于本地个人项目是过大的,而Git绝对不是。Git将占用更少的空间(由于SVN的“修订”概念相对于Git的对象快照效率低下),所需的设置更少(git init与十几个svnadmin命令和设置权限等相比),更易于备份(git clone --bare[或git push origin如果使用Github,或类似的代码),您已经完成了),并且拥有更好的代码管理工具(分支是免费的,合并更容易,更干净)。仅仅因为没有其他人可以克隆您的存储库,并不意味着任何DVCS的好处都是“过分杀伤”。

此外,我想说Git的分支支持要比SVN的复杂得多,而且回报更大。


我想我应该使用“强大的”而不是“复杂的”
Anto

3
@安托:没关系。我仍然会说基本相同的事情:与SVN相比,Git的高级分支根本没有缺点。
greyfade11年

3
Git也不会通过跟踪每个子目录中的文件来“污染”您的源代码树。
WarrenT 2012年

4
@WarrenT在svn 1.7及更高版本中不会发生源代码树“污染”。
2012年

4
在Subversion中创建文件系统存储库是一条命令(svnadmin create,再加上一条用于进行初始签出或导入),无需设置权限等。我并不否认Git通常是一个更好的工具,但是有关Subversion的错误信息并没有帮助。
Josh Kelley

34

认为您永远不会分支自己的代码有点眼光短浅。我已经多次分支自己的代码,尤其是当我尝试一种新方法时,我还不完全相信。您最终将需要该功能。

这来自长期的Subversion用户。整合一种工具确实可以使您的生活更轻松。


2
是的,我相信这是分支机构的实验重点。这是我阅读Op的问题时的第一个保留意见。如果您不在存储库中进行分支,那么您就在头脑中“分支”,当您具有适当的版本控制时,这是毫无意义的。
克里斯(Chris)

3
您可以使用subversion进行分支。并合并。有点。实际上,我唯一的尝试是遇到了一个无法再使用的损坏的存储库,并且从备份中恢复(已应用了分支)无济于事,所以我最终失去了所有历史记录,开始新的存储库...但我将此归咎于从1.4开始的过渡。到1.5(我认为-几年前)。实际上,可能是分支和合并。如果您有足够的勇气尝试。如果我早先知道了svn dump,那么我当然可以通过一些努力解决该问题。
Steve314 2011年

@Chris,我希望有一个可以随时使用的工作版本。当然,您可以使用标签来实现这一点,但是有时候分支是很有意义的。也不要忘记git / mercurial的其他好处。
Berin Loritsch 2011年

9

如果因“解决方案”造成附带损害,则保留超额杀伤力。用枪杀死苍蝇意味着子弹移到其他地方会造成伤害。这太过分了。使用不会引起问题的比必要功能更强大的功能并不过分,如果这有助于您简化开发过程,那将是一件好事。它不会造成任何损害,并且只允许您更新一套软件,而不是两套。那么,为什么要麻烦两个系统而不是一个?


如果系统进入您的控制范围,则可能会适得其反(是的,用这个定义)。我想知道将git用于个人项目是否是一个好主意。您能否告诉我什么是具体优势?这个答案没有解决。我认为git是一个更强大的系统,对于个人项目来说太强大了。但是,只要它不会妨碍您,就不一定有任何危害。您能否扩大答案?
安托

1
当用于解决方案的工作不成比例时,也会使用过度杀伤。可以说,如果您已经在本地项目中使用Subversion,那么学习Git或其他任何多余的东西都需要付出努力。当然,这也许是发展可转移技能的有用课程。就我个人而言,我仍然在使用颠覆-这让我有点难过,但只留下了些许伤疤。我对学习Git感兴趣,但是每次浏览时,发现的教程都是晦涩难懂的,或者我无法获得适用于Windows的稳定工具,或者还有其他障碍使这一切看起来都过头了。
Steve314 2011年

7

我将Git用于我的单人项目,我喜欢它。我以前使用过Subversion,但尚未看到使用Git的缺点。它功能更强大,但不能使简单的事情变得更复杂。使简单的事情变得不必要的复杂/昂贵/缓慢/等。恕我直言,称呼某种过分杀伤是必要条件。另外,在Github上,我分叉了其他人以前的单人项目,以添加我想要的功能,然后向他们发送拉取请求。如果对我的项目感兴趣的人做同样的事情,我会觉得很酷。


7

在DVCS之前,我从未在个人项目上使用过源代码控制,因此,想象有人持相反的观点有点奇怪。我的一些原因是:

  • 易于安装和拆卸。例如,上周一位同事给了我一个编程难题,我通过几个小步骤就解决了。我做了一个持续45分钟的git repo来保存我的工作,然后它消失了。我不知道在Subversion中这样的事情有多容易,但是我从未听说有人这样做。
  • 断开连接。对我而言,能够离线工作对一个业余项目的好处远胜于一项工作。我不需要在我的家庭防火墙上戳一个洞,也不需要公开托管一个项目。我可以将存储库临时放在拇指驱动器或笔记本电脑上,并且仍然保持同步。
  • 一切都在同一地点。将仓库和工作树放在一起可以使小型项目更容易在操作系统升级之类的过程中进行跟踪。
  • 强大的功能。当然,我不需要一直使用这种功能,但是在需要时就可以使用它,不需要时也不会消耗任何资源。

6

有人告诉我git-bisect,通过在输入中来回导航(取决于您的输入)来查找引入给定行为的确切提交确实非常好。

不得不为某天做一些事情,而您根本无法弄清发生了什么。


编辑:此外,当您必须在客户使用的旧版本中进行错误修复时,分支的能力非常重要。您必须能够管理“只解决这个小问题,但是我不想要最新版本,因为我现在不想再次对其进行测试”。


2

这取决于您想要对自己的代码进行版本控制的认真程度。例如,如果您要构建的是一个仅具有当前版本(或者只要是正确的版本)的简单库,那么我个人将只使用诸如Dropbox之类的基本备份选项。如果您丢失了所有代码,则可以从Web上恢复它,如果您确实做一些愚蠢的事情,Dropbox可以提供30天的版本备份。

但是,例如,如果您需要维护Production和Dev分支,那么git绝对是一个很好的工具-比svn快得多。但是,如果仅将数据存储在本地,请注意硬盘驱动器发生故障的风险。


1
是的,我将DropBox用于个人项目。该版本是远不及真正的VCS那样复杂,但它的罚款,对于较小的项目,我在我的空闲时间做的,它不需要关注在所有(如没有提交,因为你对他们的工作文件,只需更新。)
jhocking

哦,顺便说一句,因为我开发游戏,所以我的项目中往往会有很多二进制文件(图像文件,音频剪辑等),并且大多数版本控制系统实际上仅用于源代码。
2011年

Git可以很好地处理二进制文件,而diff则没那么有趣。幸运的是,git的差异并未完全锁定-如果您可以找到自己喜欢的二进制diff工具,则可以很容易地在git中使用它(从命令行)
Chris Moschini

有人告诉我,Git浪费了很多空间版本控制二进制文件,但是我被告知可能不正确。基本上,我被告知,大多数二进制资产(我想不是所有二进制文件,而是游戏中的图像和声音)都必须完全还原为每个版本,因此Git会用本地存储库填充硬盘。
jhocking 2011年

仅当您不打算对二进制文件进行版本控制时,这才是浪费。如果您确实需要对它们进行版本控制,那么版本历史记录就不会浪费。我认为他们在跟踪二进制文件时不小心暗示git膨胀了其版本历史记录-这是不正确的。git.wiki.kernel.org/index.php/GitSvnComparsion
Chris Moschini

2

对于任何类型的开发项目,我都会始终使用版本控制系统。大小无关紧要。无论我是在在家中使用某种新技术,还是写一些小助手来减轻我的生活,还是在一个庞大且分散的团队中进行专业开发-我总是希望有一个版本控制系统来为我提供支持。

当然,在大多数时候,对于小型个人项目,您不会使用大多数功能,但是设置git存储库(甚至本地的Subversion存储库)没什么大不了的,所以去吧!而且,在您知道它之前,您将需要知道“该死,文件X的最后一个星期五的内容是什么?”。没有版本控制-祝你好运;-)

因此,无论您使用git还是SVN都没关系-就我个人而言,我开始将越来越多的内容从SVN迁移到git,但主要是完全使用版本控制-即使是很小的事情。


1

只是因为没有人提及它:对于个人项目,darcs确实很棒,并且比git少参与简单的版本控制。对于较大的项目来说,速度不是那么快,但是Subversion也不是!


1
这听起来与您对darcs的了解程度有关。我从没使用过它,但是经常使用git。对我来说,git非常简单明了,但是我敢打赌,如果我要使用darcs,我会挠头。
山姆

1
如果您已经掌握了git的疯狂ui,则darcs将是步履蹒跚。
wlangstroth

1
您能否解释一下为什么darcs比git更适合小型项目?
shabunc 2012年

0

理解我们所做的是实验,可能是一种强大的思维模式转变。拥有便宜/简单的工具来支持这一点,可以增强您前进的能力,部分原因是它可以增强您在结果不佳时退出任何实验的能力。

许多开发人员说:好吧,我只是复制我的代码。但是这些副本变得难以管理,最终变得混乱。您有多个副本,不记得要使用哪个副本,然后尝试找出何时可以安全删除它们。

当实验需要跨多个文件进行协调更改时,所有这些都将变得更加有价值。当它是一个单独的项目时,使用Git变得更加简单。

现在,我不知道我是否应该在一个单独的项目中使用它,而是想到我没有早发现这一点是多么可惜。


对于设计师的观点,请在YouTube 上的Git上观看Linus(约70分钟)
WarrenT 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.