代码之家  ›  专栏  ›  技术社区  ›  Steve Emmerson

如何在NFS分区中有git存储库,在本地分区中有工作树?

  •  8
  • Steve Emmerson  · 技术社区  · 16 年前

    我的主目录位于文件服务器上远程安装的NFS分区中,并定期进行备份。我希望项目的git存储库位于我的主目录下(以便备份),但我希望我的工作树位于工作站的本地磁盘分区中(以便快速构建)。未备份本地磁盘分区。

    有什么办法吗?我知道我可以克隆NFS存储库并将其推送到它,但这似乎是不必要的过度使用。

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

    4 回复  |  直到 16 年前
        1
  •  7
  •   VonC    8 年前

    您可以通过以下方式创建Git回购:

    • 但是 .git dir --git-dir=<path> 或 $GIT_DIR 环境变量,并引用(备份)主目录中的路径。

    这个 git init $GIT_DIR 环境变量:

    如果 $GIT_DIR 设置环境变量,然后指定要使用的路径,而不是 ./.git


    或者,您可以在home目录中创建回购协议,但添加以下内容 git config :

    core.worktree
    


    这可以由 GIT_WORK_TREE 环境变量及其应用 --work-tree 命令行选项。
    吉特先生 目录,由 --git-dir 或 GIT_DIR ,或自动发现。
    如果 --吉特目录 或 --工作树 , 和 core.worktree 则当前工作目录被视为工作树的根目录。

    请注意,即使在配置文件中设置为“ 吉特先生 /path/to/.git/config ”“是的 核心工作树 设置为“ /different/path ),这很可能是一个错误配置。
    在“”中运行git命令 /path/to “目录仍将使用” /不同/路径 “作为工作树的根,可能会给用户造成很大的混乱。


    OP补充道:

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

    设置 (如 git-dir 或 核心工作树 ),它允许实现相同的效果,而无需依赖特定于操作系统的功能,如符号链接(并非在每个操作系统上都可用)


    Tom Russell 加上 in the comments

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

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

        2
  •  4
  •   Wayne Conrad    14 年前

    git-new-workdir (在我的箱子上,在下面 /usr/share/doc/git-core/contrib/workdir ). 它不是git核心的一部分;这是一个有贡献的脚本,但您的发行版的git包可能已经安装了它。用途是:

    git-new-workdir <repository> <new_workdir>
    

        3
  •  3
  •   julian7    15 年前

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

        4
  •  0
  •   Dustin    16 年前

    我不确定你所说的“过度杀戮”是什么意思,但我的建议是继续在NFS中创建一个克隆,并推动它。

    您可以设置一个post-commit钩子来执行 git push --mirror my-nfs-thing 甚至不用去想它。