如何在NFS分区和本地分区中的工作树中安装git存储库?

Ste*_*son 8 unix git

我的主目录位于文件服务器上的远程安装的NFS分区中,并且是常规备份的.我想让我的项目的git存储库位于我的主目录下(以便备份)但我希望我的工作树位于我的工作站的本地磁盘分区中(这样构建速度很快).未备份本地磁盘分区.

关于如何做到这一点的任何想法?我知道我可以克隆NFS存储库并推送到它,但这似乎是不必要的过度杀伤.

是否可以像在本地分区中创建.git符号链接到远程NFS分区中的.git目录一样简单?

Von*_*onC 7

你可以创建你的Git仓库:

  • 工作树是本地磁盘分区上的当前路径
  • 但是.gitdir是用--git-dir=<path>$GIT_DIR环境变量指定的,并引用(备份的)主目录中的路径.

git init命令考虑了$GIT_DIR环境变量:

如果$GIT_DIR设置了环境变量,则它指定要使用的路径而不是./.git存储库的基础.


或者,您可以在家庭目录中创建您的仓库,但添加以下内容git config:

core.worktree
Run Code Online (Sandbox Code Playgroud)

设置工作树根目录的路径.
这可以被GIT_WORK_TREE环境变量和--work-tree命令行选项覆盖.
它可以是目录的绝对路径或相对路径.git,由--git-diror 指定GIT_DIR,或自动发现.
如果--git-dirGIT_DIR有规定,但没有的--work-tree,GIT_WORK_TREE并且core.worktree被指定,当前的工作目录被认为是工作树的根.

请注意,即使在.git目录的" "子目录中的配置文件中设置此变量,并且其值与后一个目录不同(例如" /path/to/.git/config"已core.worktree设置为" /different/path"),此变量也很有用,这很可能是配置错误.
在" /path/to"目录中运行git命令仍将使用" /different/path"作为工作树的根目录,并且可能会对用户造成很大的混淆.


OP增加:

是否可以像在本地分区中创建.git符号链接到远程NFS分区中的.git目录一样简单?

至少,通过设置(如git-dir,或core.worktree),可以实现相同的效果,而不依赖于特定于操作系统的功能,如符号链接(在每个操作系统上都不可用)


更新2018年(8年后):Tom Russell 在评论中补充道:

--separate-git-dir现在.git/,在本地工作站(NFS客户端)上初始化存储库时,该标志现在用于指向NFS服务器.
但后续行为很奇怪:在NFS客户端上提交的更改不会自动传播到服务器,需要服务器上的更改git checkout -- <file>.

我随后发现,git reset --hard在客户端repo中提交之后的服务器repo(反之亦然)是使工作目录更新的最简单方法.