使用哪个版本控制系统?

我正在考虑使用版本控制系统,以确保我可以回到某个特定版本的所有文档,如果有需要的话。
鉴于以下情况,哪种工具最适合我使用呢?
  • 我在版本控制系统方面没有太多经验
  • 有几个文件是纯文本文件,但也会有一些Libre-Office文件
该工具应具备以下功能:
  • 易于设置、运行和维护
  • 具有易于理解的配置选项(要跟踪哪些目录,跟踪多长时间,多频繁地捕捉更改等)
  • 最好还有一个图形用户界面
  • 能够恢复已删除的文件
对于我来说,最佳/最广泛使用的工具是什么?

4听起来你更需要一个备份工具,而不是一个版本控制系统。可以使用像Bacula这样的工具来备份你的个人文件夹,并使用Git或SVN将你的~/Documents放入版本控制中。 - ayckoster
我认为Déjà Dup是你所需要的。 - user98829
连一个集市都没有提到吗?还是有其他目的? - deshmukh
8个回答

我曾使用过CVSSubversiongit以及一些商业软件包。我刚刚将个人版本控制系统从CVS迁移到了git(我原以为这会比实际情况更困难,早就应该做了)。
根据你的需求,我推荐使用git。

我是一个没有太多版本控制系统经验的新手

git可能有一个较长的学习曲线,尤其是如果你有之前版本控制系统的经验。如果没有接触过之前的版本控制系统,你的学习曲线可能会更短。
学习git的最佳方法是下载Pro Git by Scott Chacon这本书(免费),创建一个测试仓库(mkdir <project name>; cd <project name>; git init),然后开始动手操作。创建仓库并不需要太多的努力,而且在测试仓库中出错也没关系,因为每个仓库都是独立的。可以很容易地删除一个仓库(cd <project name>; rm -rf .git)。

有一些文件是纯文本文件,但也会有一些Libre-Office文件。

对于git来说,文件类型(ASCII vs binary)没有区别,但是ASCII文件更适合查看差异和合并冲突。

易于设置、运行和维护。

git可以根据您的需求以多种方式进行配置。首先,如果您只是一个人在用,您只需要安装git(sudo apt-get install --install-recommends git-core)并创建一个仓库(如上所示)。如果您在多台机器上工作,您可以设置通过ssh使用git(书中有介绍)。更好的是,随着您的需求扩大,您不会丢失已经完成的工作。

具有易于理解的配置选项(要跟踪哪些目录,要持续多长时间,更改应该多频繁地捕获等)

您可以拥有一个大的仓库,或者将其拆分为单独的项目或单个文件。再次创建一个git仓库并尝试一下,看看哪些方法奏效,哪些不奏效。

最理想的情况是还有一个图形界面

有很多专门处理不同任务的git guis。然而,强烈建议从命令行学习git。要开始学习,您只需要掌握几个命令(git initgit statusgit diffgit addgit rmgit commitgit pushgit pull)。此外,命令行还可以帮助您完成需要进行的任务。例如:git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   systems/ion/setup.txt
#   modified:   systems/dogstar/teardown.txt
#   modified:   applications/help.html
#   modified:   applications/readme.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   applications/faq.html
no changes added to commit (use "git add" and/or "git commit -a")

如果你更喜欢图形用户界面(GUI),SmartGit对新手非常友好。
能够恢复已删除的文件
是的,只要文件已经提交,git可以恢复任何版本的任何文件。
什么是最好/最广泛使用的适合我的工具?
git被广泛使用。至于最好的工具,它是最好的之一,如果不是最好的。但是最好是一个个人观点,并且也取决于具体情况。

听起来,我认为使用像git、Mercurial hgbzrsvn这样的版本控制工具并不完全适合您的需求,因为它们主要针对源文件而不是二进制数据。因此,我想在这里添加一些额外的可能性。
我认为一个不错的解决方案是基于云的备份服务。我个人使用的是SpiderOak,效果非常好。

Déjà Dup

它使用duplicity作为后端。

优点

  • Ubuntu自带的备份解决方案
  • 非常简单
  • 有很多选项可以选择备份的位置

缺点

  • 更多是备份解决方案,而不是版本控制
  • 控制有些受限

如果还没有安装,请安装它:

sudo apt-get install deja-dup 

如果你输入backup,你可以在仪表板中找到它。

SpiderOak

优点

  • 提供Ubuntu软件包,添加到sources.list存储库(自动更新)
  • 您可以选择任何要备份的文件夹(不像dropbox)
  • 后台运行,监视这些文件夹中的更改并仅上传更改(节省带宽),这是自动和即时的
  • 客户端加密(不像dropbox)
  • 识别重复文件
  • 在服务器上压缩文件
  • 在其服务器上保留已删除的文件和旧版本(只要您在那里有免费存储空间),除非您明确删除它们
  • 漂亮的GUI
  • 可以在计算机之间同步(Linux / Windows / OS X,移动客户端仅供只读使用)
  • 基于云 - 即使您的硬盘崩溃,您仍然有备份

缺点

  • 基于云的 - 需要互联网连接
  • 不是完全开源
  • 只有2 GB(无耻地插一句:如果你想要额外的1 GB,可以使用我的推荐链接

在这里下载:SpiderOak下载

rdiff-backup

优点

  • 可以进行本地或远程备份
  • 精细控制
  • rsync算法,仅跟踪更改
  • 空间高效(未更改的文件保持不变)
  • 文件权限也可以被存储
  • 可以保留最近n个版本或最近n天的备份

缺点

  • 必须由cronjob或显式地运行
  • 命令行实用程序(如果你不喜欢命令行),但也有一个可用的图形界面:Pybackpack

通过以下方式安装:

sudo apt-get install rdiff-backup pybackpack

BTRFS快照

虽然对于新手来说可能有些困难,但是有可能将您的/home目录放在一个单独的BTRFS分区上,并定期创建该分区的快照。

优点

  • 非常节省空间,只存储已更改的文件
  • 跟踪分区的所有数据
  • 速度快
  • 挂载任何旧的快照以访问以前的版本

缺点

  • BTRFS仍然相对较新
  • 不适合新手
  • 仅支持命令行
  • 需要对系统进行一些调整
  • 不是备份解决方案 - 如果硬盘崩溃,所有版本都会丢失

Ubuntu帮助页面上有一个教程可供参考。


我会推荐使用Git,因为:
  1. 它很容易使用
  2. 你可以免费在GitHub上托管它
  3. 对于Windows用户,你可以使用GitHub for Windows,它提供了一个图形界面。
  4. 它运行速度快
  5. 如果你需要,在GitHub网站上有语法高亮功能。
  6. 你可以在本地运行它,非常适合个人项目。

3我不建议将您的个人文本和LibreOffice文件放在公开的GitHub上。如果它们是公开的,可能可以这样做,但问题对我来说并非如此。 - Nanne
1那么Bitbucket就是答案,但它不是公开的。 - Dr_Bunsen

众所周知,版本控制系统有CVS、SVN(subversion)和GIT。不需要考虑古老的CVS,所以我们只剩下SVN和GIT。
对于你有限的使用来说,我认为选择哪个并不重要,所以我的建议是看看你认识的人中谁在使用其中之一,然后选择那个 :)
如果你正在寻找更复杂的东西(如代码的真正版本控制)的易用性,我建议使用GIT。基本上,“他们”说SVN是对CVS的更新,而GIT又是对SVN的“更新”。我个人认为,GIT相对于SVN的优势主要体现在多用户和多分支方面,所以也许不是你应该担心的事情。
另一方面,为什么不尝试一下更好的选择呢?你永远不知道将来会做什么。
请查看一些关于它们的信息。

我不认为你想这样做。源代码控制只是用于源代码控制。大多数情况下,它们无法很好地处理二进制文件(如图像、音乐、电影等)。
此外,源代码管理系统会给出每行数据更改的详细信息。所以每次登录或退出时,都会更改一些数据。你将不得不一直进行"合并"或"提交"操作。我几乎可以肯定这不是你想要的。
然而,有几个非常好的工具可供选择。
Back-In-Time非常棒,并且有一个差异查看器。 Deja Dupe是默认选项,但我认为它的功能不够丰富。 grsync可以提供一个已更改的备份文件列表。 而普通的rsync也是一个选择。
如果你坚持使用源代码管理系统,我推荐使用本地托管的git。添加一个.gitignore文件来排除所有二进制文件。最好的办法是只对配置目录进行版本控制。同样,你需要注意二进制文件。

顺便说一下,如果你只是想获取更改文件的列表,diff命令也适用于目录。 - coteyr
指出使用Git(或类似的)系统中的“风险” - deshmukh

阅读您的问题后,我认为您想要的是使用诸如svn之类的工具创建一个本地仓库,并使用其前端rapidsvn进行维护。这似乎非常适合您的目的:本地仓库可以位于主硬盘或外部驱动器上。需要注意的是,版本控制最适用于源代码、文本文件或文档,不适用于多媒体文件。Dropbox或Ubuntu One更适合那种类型的备份。此外,您还可以使用dropbox返回到以前的文件版本。
无论如何,我将简要介绍gui工具rapidsvn的使用方法以及如何从命令行中使用svn。
首先,使用以下命令安装必要的文件:
sudo apt-get install subversion rapidsvn

更多信息可以在官方网站上找到,关于rapidsvn的详细内容。但是需要注意的是,你必须先使用命令行创建svn仓库。确保你在家目录的顶层(如果需要,请输入cd进入)并输入以下命令:
svnadmin create --fs-type fsfs ~/svn

然后创建一个初始文件夹

svn mkdir file:///home/mike/svn/folder -m "initial folder"

使用快速入门指南,我们可以加载rapidsvn,右键单击书签并通过点击检出新的工作副本来添加您的存储库,从那时起,您可以使用检出、导入和提交来随心所欲地操作文件。

enter image description here

我认为这可能是你正在寻找的图形界面,因为它可以轻松管理所有你的文件,并且比在命令行上使用`svn`更容易配置选项。

看起来git比svn更先进。我会试一试,看看情况如何发展。但是你建议的图形界面看起来不错,如果git失败了,它将成为我的第二选择。 - deshmukh

您可以使用 Codebase
  1. 它是一个软件项目管理工具,具有快速、可靠和安全的Git、Mercurial和Subversion托管功能。
  2. 它可以通过Web跟踪整个项目并直接部署存储库到服务器。
  3. 它具有强大的项目管理特性,包括高级票务管理、活动订阅和可自定义权限的数据控制、完整的搜索功能和开发人员API。

GNU RCS(版本控制系统)管理文件的多个修订版本。RCS可以存储、检索、记录、标识和合并修订版本。它对经常进行修订的文件非常有用,例如程序、文档、图形和论文。它可以处理文本文件和二进制文件,尽管对于后者的功能有所减少。
基本用户界面非常简单。新手只需要学习两个命令:ci和co。ci是checkin的缩写,将文件的内容存入一个称为RCS文件的归档文件中。RCS文件包含了特定文件的所有修订版本。co是checkout的缩写。
需要比较您的更改吗?rcsdiff。
项目页面:http://savannah.gnu.org/projects/rcs/ 手册:http://www.gnu.org/software/rcs/manual/rcs.html 我“至少需要10个声望才能发布超过2个链接”,因此读者需要修改以下内容以便访问链接。 作者的撰写,您可能希望最终阅读的内容:

http://www.gnu.org/software/rcs/tichy-paper.pdf

各种版本控制系统软件的简要概述和家谱。

http://en.wikipedia.org/wiki/Revision_Control