如何在不同的驱动器上设置工作目录和本地存储库?

How can I set up the working directory and the local repository on different drives?

在Git中,如何在不同的驱动器上设置工作目录和本地存储库? 原因是在每次本地提交时备份代码。

我们在 'master' 存储库上采用了看门人模型,所以我不能只将任何旧垃圾推到上游,但我想确保每次创建本地时备份所有旧垃圾犯罪。

使用git init--separate-git-dir标志

git init 命令有一个标志:

--separate-git-dir=<git dir>

Instead of initializing the repository as a directory to either $GIT_DIR or ./.git/, create a text file there containing the path to the actual repository. This file acts as filesystem-agnostic Git symbolic link to the repository.

例子

对于此示例,我们假设 /Volumes/My_USB/ 是 USB 驱动器的路径。 (/Volumes 特定于 Mac OS,但是,除此路径外,此示例以直接的方式转换为其他操作系统。)

初始化 Git 存储库

  • 当前目录是其工作树,
  • 谁的"git directory"是/Volumes/My_USB/projectA_gitdir,

简直运行

git init --separate-git-dir="/Volumes/My_USB/projectA_gitdir"

修正想法,

  • 检查 .git 文件的内容:

    $ cat .git
    gitdir: /Volumes/My_USB/projectA_gitdir
    

    如您所见,它只是一个文本文件,其中包含您的存储库 git 目录的路径。

  • 通过 运行ning

    检查本地仓库的配置
    $ git config --local --list
    

    您应该注意到在没有 --separate-git-dir 标志的情况下初始化 repo 时通常不会出现的一行:

    core.worktree=<pwd> 
    

    其中 <pwd> 是当前目录的路径。

  • 检查git目录的内容;如果一切顺利,则必须在 USB 驱动器上创建一个名为 projectA_gitdir 的文件夹,并填充通常进入 .git 文件夹的所有内容:

    $ ls /Volumes/My_USB/projectA_gitdir
    HEAD        description info        refs
    config      hooks       objects
    

    一切顺利:)

当然,如果驱动器可访问,您将只能在此存储库上执行 运行 Git 命令。例如,卸载后,会发生以下情况:

$ git status
fatal: Not a git repository: /Volumes/My_USB/projectA_gitdir