将 Git 目录放入驱动器同步工具中是否危险?

Luk*_*ron 7 git

我喜欢使用桌面版 Google 云端硬盘。我喜欢将所有内容都放在云端,因为集中所有内容可以使事情变得井井有条。

但是,Git 目录位于这样的同步驱动器中是否危险?

危险的定义:

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

  2. 让同步工具更改 .git 的所有其他可能的副作用

Dai*_*Dai 12

我喜欢将所有内容都放在云端,因为集中所有内容使事情变得井然有序。

就我个人而言,我通常会避免文件夹同步服务或云托管文件夹(例如 OneDrive、Google Drive、DropBox 等),因为它们都致力于为用户提供简单易用的体验,但考虑到CAP 定理,这是不可能做到的适用于文件夹同步服务:因此这些服务通常拒绝让其用户拥有详细的冲突解决工具 - 以及它们无法跟踪文件分割等更改,甚至克隆文件(看看你,OneDrive .. .)只会引起头痛。

将git目录放入drivesync工具有危险吗

是的

但它也没有实际意义,因为它git已经是一个用于保持存储库同步的工具(和整个生态系统):只需从 Google Drive 中排除您的存储库,并使用 GitHub、BitBucket 或您自己的自托管 git 服务器从 NAS 等托管您的存储库。

至于为什么危险:

  • 主要原因是该git工具假定它对您的存储库目录具有独占访问权限.git并且其他软件在处理文件 时不会偷看这些文件。git
    • 虽然git 确实使用操作系统提供的文件锁和其他 IPC 手段来确保对其文件的独占访问,但第三方文件夹同步软件不会尊重 git 自己的 IPC 锁。
    • 还要考虑更广泛的第三方 git 工具(GitKraken、Visual Studio 的 git 集成、TortoiseGit 等),我们无法确定这些工具是否“安全”,以及用户自己的用于自动化 git 的 shell 脚本,这些脚本很可能会获胜也没有任何类型的锁定。
  • 同步软件通常使用写入时复制卷影副本等功能来获取锁定文件的快照副本。
    • 例如,从 Windows 7(也许是 Vista?)开始,当您复制并粘贴具有由另一个进程持有的独占锁的文件时,Windows 的文件资源管理器将使用卷影副本。
    • ...这意味着虽然您的本地.git目录可能处于有效状态,但同步服务保存的目录副本.git可能处于损坏状态(所以不要恢复它!)因为(据我所知)没有第三方文件夹同步服务尝试创建.git目录的事务正确的快照副本。

.git与“所有跟踪文件”不一致。(同步工具可能会.git在不同时间随其跟踪文件发生变化,这可能会在您提交某些内容或推送某些内容时导致灾难。

有点。正如我所说,风险在于,当同步工具复制本地存储库时,同步服务的文件夹远程副本可能会包含不一致的目录副本,直到您随后进行操作.git后,问题才会显现出来。从 Google Drive 或 DropBox下载您的文件夹。

让同步工具更改的所有其他可能的副作用.git

太多了,无法一一提及。只是不要让它发生。


这个流行的 QA特点是人们声称他们的 Git 存储库与 DropBox 一起使用,但高票数评论警告说,他们的方法不会扩展到单个用户之外(而且无论如何你都不应该共享 git 存储库)。