Git-将.Git目录移动到另一个驱动器,将源代码保留在原处

Git-将.Git目录移动到另一个驱动器,将源代码保留在原处,git,Git,我有我的源代码和.git文件夹在一个小的快速ssd上,我想把.git目录放在我的第二个大的慢的硬盘上,并把我的工作代码放在我的快速小的ssd上,可以吗?怎样? 谢谢 我想我的本地工作副本.git目录会随着时间的推移而增长(有了新版本),所以把它放在更大的本地硬盘上是明智的。工作拷贝的增长速度不快,因此它在ssd上运行sens,因为它可以更快地编译 另一个有趣的好处是,我将在2个diff驱动器上提供源代码(工作代码和.git repo),这对笔记本电脑来说是一个更好的保护 我使用的是windows

我有我的源代码和.git文件夹在一个小的快速ssd上,我想把.git目录放在我的第二个大的慢的硬盘上,并把我的工作代码放在我的快速小的ssd上,可以吗?怎样? 谢谢

我想我的本地工作副本.git目录会随着时间的推移而增长(有了新版本),所以把它放在更大的本地硬盘上是明智的。工作拷贝的增长速度不快,因此它在ssd上运行sens,因为它可以更快地编译

另一个有趣的好处是,我将在2个diff驱动器上提供源代码(工作代码和.git repo),这对笔记本电脑来说是一个更好的保护


我使用的是windows,Git repository目录可能位于与工作副本根目录不同的位置,但我不确定它是否可以跨驱动器工作

您可以将回购目录设置为放置在不同的目录中,同时:

$git clone--单独的git目录=\
对于已克隆的回购,您可以使用为回购和/或工作副本设置不同的路径

您可能还想查看。

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

$ cd my/project
$ mv .git /over/here/.git
ln -s /over/here/.git .
而且存储库也可以正常工作

gitdir: 或者您可以用一个文件替换
.git
文件夹,该文件告诉git
.git
文件夹的实际位置。这正是默认情况下git子模块的设置方式

重新配置现有签出的步骤包括:

  • 将.git目录移动到需要的位置
  • 将其替换为包含以下内容的文件:
    gitdir:path/to/.git
  • 定义
    core.worktree
    指向工作副本
  • 作为一个脚本:

    $ cd my/project
    $ mv .git /tmp/.git
    $ echo "gitdir: /tmp/.git" > .git
    $ git config core.worktree $PWD
    
    窗户上的交叉口 使用Microsoft提供的工具在Windows上轻松创建连接

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

    实际上,你可以直接跑

    $ git init --separate-git-dir=[path to directory for .git data]
    
    git init可以安全地在已克隆的存储库中使用

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

    对的引用--separate git dir方法与
    gitdir
    方法完全相同

    跑步后

    $ git init --separate-git-dir=[path to directory for .git data]
    
    发生的情况是,在本地目录中创建了一个
    .git
    文件,其中包含以下内容:

    gitdir: [path to directory for .git data]
    

    当你说你的“源代码”时,你实际上是指你的工作副本吗?因为从技术上讲,
    .git
    目录/repo也包含您的源代码。还有,你为什么要这么做?可以在
    .git
    repo目录的单独目录中拥有一个工作副本,但我不确定它是否可以跨驱动器工作。您是否试图在SSD上节省空间?
    .git
    repo实际上是压缩的,并且比您的工作副本小。如果repo在硬盘上是独立的,您也可能会降低性能。是的,基本上我希望将我的工作副本放在快速小型ssd上,将.git目录/repo放在更大(但速度较慢)的hddIf上。如果有人想尝试创建使用Windows连接点的解决方案,请参阅。另请参见。出于好奇,是否可以在工作副本中设置指向
    .git
    repo的符号链接(*nix systems)或连接点(Windows)?这需要最少的配置/步骤吗?符号链接可以工作,但不确定连接点。因为问题是关于windows的,我不确定这对OP是否有用-仍然需要将
    核心.worktree
    设置为任何一种方式。感谢AD7Six和Cupcake,我最终尝试了Junction和.git文件,这两种文件都可以工作。在“git克隆”之后,我使用Junction结束。工作副本(或moved.git)工作正常,但它与.git文件不兼容。您使用的是git版本<1.7.8吗?git是如何存储子模块的(这与这个答案相关,因为它很简单)-很高兴知道一个连接为您工作-我将更新答案。我想大多数有这个问题的人在看到
    init
    时都会跳过这个评论,尽管它确实满足了我们的需要!谢谢你的提示。它不能跨驱动器工作,但在Linux上你可以使用符号链接