在使用 Overleaf 写 LaTeX 文档过程中,经常会有想在本地写的需求。同时又想在本地将文档通过坚果云同步到云端,方便我可以不在 Overleaf 上,也能随时切换到别的设备查阅更新后的文档(因为国内 Overleaf 的访问速度太不稳定了)。
以上两点需求,第一点,Overleaf 提供了 git 链接,可以直接通过 git clone 同步到本地。但是如果仅仅把 git clone 下来的整个文件夹直接扔进坚果云的同步文件夹,那隐藏文件夹 .git 中的文件就会被同步到坚果云。并且当你进行 git 操作时,很多赘余的信息会被同步到坚果云当中,由于文件细碎而繁杂,会让坚果云那一直处于校验比对的状态,影响同步效率。
早前有一个很好的解决方案,也就是通过坚果云的选择性同步功能,将 .git 文件夹目录写进 customExtRules.cfg 文件中。但自从坚果云推出令他们团队引以为傲的云桥[1]功能之后,就把选择性同步的功能给取消了。虽然在其后的 4.1.5 版本中短暂地又恢复了选择性同步功能[2],后来还是取消了。
最终,找到了一个虽然崎岖但很好用的解决方案,将 .git 文件夹移出了同步文件夹,同时又能对同步的文件夹进行 git 操作。
解决方案
主要的想法是在把 .git 文件夹移出同步文件夹外的同时,将和云端同步的工作文件夹和 .git 文件夹连接起来。而这样的连接方式的解决方案来自于万能的 Stack Overflow: Can I store the .git folder outside the files I want tracked?[3],在此简要翻译一下核心步骤(针对 git 版本大于等于 1.7.5):
如果是已经存在在本地 repo:
-
将 .git 文件夹移动到 /path/to/repo/.git -
在工作文件夹中将 gitdir: /path/to/repo.git
写入一个新建的名为 .git 的文件(而不是文件夹!)中,让工作目录可以指向 .git 文件夹
-
回到 .git 文件夹所在的目录,通过 git config core.worktree /path/to/root/of/work/dir
将 .git 文件夹指向同步到云端的工作目录。
如果想要新建一个 git repo,直接通过
git init --separate-git-dir /path/to/repo.git
便完成连接工作。