把git目录放到驱动同步工具里有危险吗

Is it dangerous to put git directory in drive sync tool

我喜欢使用“google 桌面驱动器”,我喜欢将所有内容都放在云端,因为集中所有内容使事情井井有条。

但是,git 目录在这样的同步驱动器中有危险吗?

危险的定义:

  1. “.git”与“所有跟踪文件”不一致。 (同步工具可能会在不同时间更改其跟踪文件。git,这可能会在您提交或推送某些内容时导致灾难。
  2. 让同步工具更改 .git
  3. 的所有其他可能副作用

I love to put everything in the cloud since centralize everything makes things organized.

就个人而言,我通常避免使用文件夹同步服务,或者 cloud hosted folders (like OneDrive, Google Drive, DropBox, etc) because they all strive to give users a simple and easy to use experience, which is impossible to do given that the CAP theorem 当然适用于文件夹同步服务:因此这些服务一般拒绝让其用户拥有详细的冲突解决工具 - 如以及他们无法跟踪更改,例如文件拆分,甚至克隆文件(看着你,OneDrive...)只会让人头疼。

Is it dangerous to put git directory in drive sync tool

但这也没有实际意义,因为git已经是一个工具(和整个生态系统)用于保持回购同步: 只需从 Google 中排除你的回购协议 使用 GitHub、BitBucket 或你自己的自托管 git 服务器驱动和托管你的回购协议。

至于为什么危险:

  • 主要原因是 git 的工具假定它具有 独占 访问您的存储库 .git 目录和其他软件 不会git处理文件时偷看
    • 虽然 git 使用 OS 提供的文件锁和其他 IPC 手段来确保对其文件的独占访问,但第三方文件夹同步软件不会遵守 git 自己的 IPC 锁。
    • 还要考虑范围更广的第三方 git 工具(GitKraken、Visual Studio 的 git 集成、TortoiseGit 等),我们无法确定其中是否“安全”,以及用户自己的 shell-用于自动化 git 的脚本,很可能也没有任何类型的锁定。
  • 同步软件通常使用 copy-on-write and shadow-copies 等功能来获取锁定文件的快照副本。
    • 例如,自从 Windows 7(也许是 Vista?)Windows' 文件资源管理器在您复制并粘贴具有另一个独占锁的文件时使用卷影副本过程。
    • ...这意味着虽然您的本地 .git 目录可能处于有效状态,但同步服务保存的 .git 目录的副本可能处于损坏状态(因此不要恢复它!)因为(据我所知)没有第三方文件夹同步服务会尝试制作 .git 目录的交易正确的快照副本。

inconsistency of .git with "all tracking files". (sync tool may change .git with its tracking file at different times, which may result in disaster when you commit something or push something.

差不多。正如我所说,风险在于,当同步工具正在制作本地存储库的副本时,同步服务的文件夹远程副本 可能 包含不一致的副本 .git 目录,在您 随后从 Google Drive 或 DropBox 下载 您的文件夹之前,问题不会很明显。

all other possible side effects of letting the sync tool change the .git

不胜枚举。只是不要让它发生。


This popular QA 功能人们声称他们的 Git 存储库与 DropBox 一起使用,但是高度赞扬的评论警告说他们的方法不会扩展到单个用户之外(而你 不应该 共享一个 git 仓库)。