我的主目录位于文件服务器上的远程安装的NFS分区中,并且是常规备份的。我想让我的项目的git存储库位于我的主目录下(以便备份)但我希望我的工作树位于我的工作站的本地磁盘分区中(这样构建速度很快)。不备份本地磁盘分区。
关于如何做到这一点的任何想法?我知道我可以克隆NFS存储库并推送到它,但这似乎是不必要的过度杀伤。
是否可以像在本地分区中创建.git符号链接到远程NFS分区中的.git目录一样简单?
答案 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-dir
或GIT_DIR
指定,或自动发现。
如果指定了--git-dir
或GIT_DIR
但未指定--work-tree
,GIT_WORK_TREE
和core.worktree
,则将当前工作目录视为工作树的根目录请注意,即使在目录的“
.git
”子目录中的配置文件中设置此变量,其值也会与后一个目录不同(例如“/path/to/.git/config
”具有{{ 1}}设置为“core.worktree
”),这很可能是错误配置 在“/different/path
”目录中运行git命令仍然会使用“/path/to
”作为工作树的根目录,并且可能会对用户造成很大的混淆。
OP补充道:
是否可以像在本地分区中创建.git符号链接到远程NFS分区中的.git目录一样简单?
至少,使用设置(例如/different/path
或git-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
的提交后挂钩,而不必考虑它。
最重要的是,您始终可以快速,可靠地访问存储库数据(无需担心数据丢失等系统故障等)。