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

问题描述 投票:8回答:4

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

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

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

git unix
4个回答
7
投票

你可以创建你的Git仓库:

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

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

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


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

core.worktree

设置工作树根目录的路径。 这可以通过GIT_WORK_TREE环境变量和--work-tree命令行选项覆盖。 它可以是.git目录的绝对路径或相对路径,由--git-dirGIT_DIR指定,或自动发现。 如果指定了--git-dirGIT_DIR但未指定--work-treeGIT_WORK_TREEcore.worktree,则当前工作目录将被视为工作树的根。

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


OP增加:

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

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


更新2018年(8年后):Tom Russell添加in the comments

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

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


4
投票

像往常一样在您的主目录中创建您的仓库,然后在快速本地磁盘上,使用脚本git-new-workdir(在我的框中,在/usr/share/doc/git-core/contrib/workdir下)。它不是git核心的一部分;它是一个贡献的脚本,但您的发行版的git包可能已安装它。用法是:

git-new-workdir <repository> <new_workdir>

这将创建一个链接到原始存储库的新的独特工作目录。


3
投票

您可以将.git目录移动到远程共享,然后可以将其替换为名为“.git”的文件,其中包含“gitdir:”。它存储在存储库布局帮助页面中(例如git help repository-layout)。


0
投票

不确定你的意思是矫枉过正,但我​​的建议是继续在NFS中使用克隆并推送它。

你可以设置一个post-commit钩子来做一个git push --mirror my-nfs-thing而不必考虑它。

最重要的是,您始终可以快速,可靠地访问存储库数据(无需担心数据丢失等系统故障等)。

© www.soinside.com 2019 - 2024. All rights reserved.