21

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

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

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

我正在使用窗户

4

4 回答 4

27

是的你可以

符号链接

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

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

并且存储库将正常工作。

gitdir:

或者,您可以将.git文件夹替换为告诉 git.git文件夹实际位置的文件。这正是1.7.8 或更高版本中默认设置 git 子模块的方式。

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

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

作为一个脚本,它将是:

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

Windows 上的连接点

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

> junction.exe c:\fast-ssd\proj\.git d:\slow-hdd\proj\.git
于 2013-07-28T22:47:03.127 回答
12

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

您可以在使用标志进行克隆时--separate-git-dir将 repo 目录设置为放置在不同的目录中:

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

对于已经被克隆的存储库,您可以为存储库和/或工作副本设置不同的路径,--git-dir=<path>--work-tree=<path>使用git.

您可能还想检查core.worktree配置

于 2013-07-28T22:46:48.907 回答
4

其实你可以跑

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

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

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

参考Git 手册页

于 2017-10-30T09:57:04.513 回答
1

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

运行后

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

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

gitdir: [path to directory for .git data]
于 2020-07-19T21:03:35.410 回答