指定版本控制存储库的存储位置

Specifying where Version Control repositories are stored

我想将 VC 用于开发项目,但是我在各种类型(Git、SVN、Mercurial...)中看到的似乎不适合我想完成。

我想做的是将代码存储库存储在外部设备(例如拇指驱动器或 SD 卡)上,不仅用于版本控制,还可以作为备份以防我的本地硬盘驱动器崩溃.

在阅读了有关各种 VC 包的一些教程之后,我很难理解如何实现这一点。我看到的大部分内容是存储库必须在项目目录结构的根目录中初始化,这不是我希望存储存储库的地方。

在我看来,这会创建重复的代码...
或者我只是错过了什么?
这能实现吗?

非常感谢任何有助于理解这一点的人!

由于 Git 是去中心化的,您可以:

  • 您磁盘上的本地存储库,您的资源所在
  • a bare repo 在您的拇指驱动器上,您将源推送到的位置,用于备份

即:

cd /path/to/myproject
git init .
git add -A .
git commit -m "my sources"

然后

cd /path/to/thumdrive
git init --bare myproject.git

终于

cd /path/to/myproject
git remote add origin /path/to/thumbive/myproject.git
git push -u origin master

It seems to me this creates duplicates of code...

没有。通常,存储库不是 "copy of your code" - 它是数据库,其中包含您的代码和其他元数据。我发现 没什么不好 在不同的地方有两个存储库

以上说明仅适用于 DVCS(Mercurial、Git、Bazaar...),不适用于像 Subversion 这样的 CVCS,其中所有和任何存储库都是远程的并且 .svn 目录仅包含一些元数据(因此 - 您可以在外部驱动器上拥有 单个 SVN-repo)

结论:

  • 对于 Mercurial,您不能将本地存储库 (.hg) 移到工作目录的根目录之外("project",但可以在外部驱动器上拥有额外的存储库
  • 在 Git 的情况下,除了 VonC 答案外,您还可以 use --separate-git-dir option for git init
  • 如果是 SVN,您必须在您的工作副本之外的任何其他位置拥有存储库

您似乎混淆了存储库和备份的概念和不同用途。

存储库的主要目的不是为了保留备份。它的主要目的是版本控制和源代码历史。我知道的版本控制系统通常将它们的历史数据保存在项目本身的根目录下——也许可以以其他方式配置,但默认值通常是有充分理由的默认值。但是,您可以轻松地克隆这样的存储库,以便在另一个驱动器或机器上存在完整历史记录(或者也可以选择仅部分历史记录)的另一个副本。此机制可被滥用为备份。

备份通常是您的数据(可能是您的存储库)在另一个独立介质上的额外副本,最好是在另一栋建筑物中。这允许恢复您的(重要)数据的完整状态 - 通常对于您的工作计算机包括存储库以及存储库的工作目录状态。