我的主目录位于文件服务器上的远程安装的NFS分区中,并且是常规备份的.我想让我的项目的git存储库位于我的主目录下(以便备份)但我希望我的工作树位于我的工作站的本地磁盘分区中(这样构建速度很快).未备份本地磁盘分区.
关于如何做到这一点的任何想法?我知道我可以克隆NFS存储库并推送到它,但这似乎是不必要的过度杀伤.
是否可以像在本地分区中创建.git符号链接到远程NFS分区中的.git目录一样简单?
你可以创建你的Git仓库:
.git
dir是用--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-dir
or 指定GIT_DIR
,或自动发现.
如果--git-dir
或GIT_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(反之亦然)是使工作目录更新的最简单方法.