【问题标题】:Git - Moving the .git directory to another drive, keep the source code where it isGit - 将 .git 目录移动到另一个驱动器,将源代码保留在原处
【发布时间】:2013-07-28 14:58:33
【问题描述】:

我的源代码和 .git 文件夹位于一个小型快速 ssd 上,我想将 .git 目录放在我的第二个较大的较慢硬盘上,并将我的工作代码保留在我的快速较小的 ssd 上,这可能吗?如何? 谢谢。

我猜我的本地工作副本 .git 目录会随着时间的推移而增长(使用新版本),因此将它放在我更大的本地硬盘上是有意义的。工作副本的增长速度没有那么快,因此它在 ssd 上很有意义,因为它可以更快地编译。

另一个有趣的好处是我将在 2 个差异驱动器上拥有源代码(工作代码和 .git 存储库),这对笔记本电脑有更多保护....

我正在使用窗户

【问题讨论】:

  • 当您说您的“源代码”时,您实际上是指您的工作副本吗?因为从技术上讲,.git 目录/repo 也包含您的源代码。另外,你为什么还要这样做?可以在与.git repo 目录不同的目录中拥有一个工作副本,但我不确定它是否可以跨驱动器工作。您是否正在尝试节省 SSD 上的空间? .git 存储库实际上是压缩的,并且会比您的工作副本小。如果存储库在您的 HDD 上是单独的,您也可能会降低性能。
  • 是的,基本上我想将我的工作副本放在我的快速小型 ssd 和我的 .git 目录/repo 在我更大(但更慢)的硬盘上
  • 如果有人想尝试创建使用 Windows 连接点的解决方案,请参阅 documentation here。另见technet.microsoft.com/en-US/sysinternals/bb896768

标签: git


【解决方案1】:

可以将 Git 存储库目录与工作副本的根目录放在不同的位置,但我不确定它是否可以跨驱动器工作。

cloning with the --separate-git-dir flag:

$ git clone --separate-git-dir=<path to directory for repo> \
<remote url> <path for working copy>

对于已克隆的存储库,您可以使用 --git-dir=&lt;path&gt; and --work-tree=&lt;path&gt; flags for git 为存储库和/或工作副本设置不同的路径。

您可能还想查看core.worktree configuration

【讨论】:

  • 它不能跨驱动器工作,但在 Linux 上你可以使用符号链接
【解决方案2】:

是的,你可以

符号链接

您可以将.git 目录符号链接(或使用连接点)到不同的位置:

$ cd my/project
$ mv .git /over/here/.git
ln -s /over/here/.git .

并且存储库会正常工作。

gitdir:

或者你可以用一个文件替换 .git 文件夹,该文件告诉 git .git 文件夹的真正位置。这正是默认情况下设置 git 子模块的方式in version 1.7.8 or later

重新配置现有结帐的步骤如下:

  1. 将 .git 目录移动到需要的位置
  2. 将其替换为文件.git,其中包含:gitdir: path/to/.git
  3. 定义core.worktree 指向工作副本

作为一个脚本:

$ cd my/project
$ mv .git /tmp/.git
$ echo "gitdir: /tmp/.git" > .git
$ git config core.worktree $PWD

Windows 上的连接

使用 Microsoft 的 junction.exe 在 Windows 上轻松创建联结。

> junction.exe c:\fast-ssd\proj\.git d:\slow-hdd\proj\.git

【讨论】:

  • 出于好奇,是否可以在指向.git 存储库的工作副本中设置符号链接(*nix 系统)或连接点(Windows)?这需要最少的配置/步骤吗?
  • 符号链接有效,但不确定连接点。由于问题是关于 Windows 不确定这是否对 OP 有用 - 尽管如此,仍然需要设置 core.worktree
  • 感谢 AD7Six 和 Cupcake,我最终尝试了 Junction 和 .git 文件,两者都有效。我最终使用 Junction,因为在“git clone”之后,工作副本(或移动的 .git)工作正常,而 .git 文件不能正常工作。
  • 你使用的是 changed significantly at version 1.7.8 - 很高兴知道一个连接对你有用 - 我会更新答案。
【解决方案3】:

其实你可以直接运行

$ git init --separate-git-dir=[path to directory for .git data]

git init 可以安全地在已克隆的存储库中使用

在现有存储库中运行 git init 是安全的。它不会覆盖已经存在的东西。重新运行 git init 的主要原因是获取新添加的模板(或者如果给出了 --separate-git-dir 则将存储库移动到另一个地方)。

参考Git manual page

【讨论】:

  • 我猜大多数有这个问题的人在看到init 时只是跳过这条评论,尽管它完全符合我们的需要!感谢您的提示。
【解决方案4】:

--separate-git-dir 方法与gitdir 方法完全相同。

运行后

$ git init --separate-git-dir=[path to directory for .git data]

会在本地目录中创建一个.git 文件,其内容如下:

gitdir: [path to directory for .git data]

【讨论】:

    猜你喜欢
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2017-11-23
    相关资源
    最近更新 更多