Git - 将.git目录移动到另一个驱动器,将源代码保留在原来的位置

时间:2013-07-28 22:24:01

标签: git

我在一个小的快速ssd上有我的源代码和.git文件夹,我想在我的第二个较大的较慢的硬盘上安装.git目录并将我的工作代码保存在我的快速小ssd上,是否可能?怎么样? 感谢。

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

另一个有趣的奖励是我将在2个差异驱动器上获得源代码(工作代码和.git repo),这对笔记本电脑来说更有保障....

我正在使用Windows

4 个答案:

答案 0 :(得分:26)

是的,你可以

符号链接

您可以将.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
  3. 的文件gitdir: path/to/.git
  4. core.worktree定义为指向工作副本
  5. 作为一个脚本:

    $ 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
    

答案 1 :(得分:12)

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

您可以将repo目录设置为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=<path> and --work-tree=<path> flags for git为仓库和/或工作副本设置不同的路径。

您可能还想查看core.worktree configuration

答案 2 :(得分:3)

实际上,你可以运行

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

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

  

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

参考Git manual page

答案 3 :(得分:0)

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

运行后

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

发生的情况是在本地目录中创建了一个.git文件,其内容如下:

gitdir: [path to directory for .git data]