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

时间:2010-02-05 22:49:10

标签: git unix

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

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

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

4 个答案:

答案 0 :(得分: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”具有{{ 1}}设置为“core.worktree”),这很可能是错误配置   在“/different/path”目录中运行git命令仍然会使用“/path/to”作为工作树的根目录,并且可能会对用户造成很大的混淆。


OP补充道:

  

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

至少,使用设置(例如/different/pathgit-dir),可以实现相同的效果,而不依赖于特定于操作系统的功能,如符号链接(并非每个操作系统都可用)


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

  

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

     

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

答案 1 :(得分:4)

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

git-new-workdir <repository> <new_workdir>

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

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

您可以设置执行git push --mirror my-nfs-thing的提交后挂钩,而不必考虑它。

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