为啥不建议将 git 存储库放在 Dropbox 文件夹中?

Posted

技术标签:

【中文标题】为啥不建议将 git 存储库放在 Dropbox 文件夹中?【英文标题】:Why is putting git repositories inside of a Dropbox folder not recommended?为什么不建议将 git 存储库放在 Dropbox 文件夹中? 【发布时间】:2013-10-18 18:14:36 【问题描述】:

使用 OSX 的 GitHub 应用程序在 Dropbox 文件夹内创建 Git 存储库时,我收到以下消息:

将 git 存储库放在 Dropbox 文件夹中不是 推荐的。您确定要在此处创建存储库吗?

为什么不推荐?

【问题讨论】:

你从哪里得到这个警告的? 如果您使用 File > Add Local Repository in Github for OSX 添加 Dropbox 文件夹,则会出现该消息。 Dropbox and git, could it cause conflicts? 的可能重复项 this question 有一些很好的讨论。 TL;DR:Dropbox 合并冲突可能会通过覆盖 .git 中的文件来破坏您的存储库。如果您不想为 Github 付费,Bitbucket 提供免费的私人仓库托管 Mercurial (and, I guess Git) with Dropbox: any drawbacks?的可能重复 【参考方案1】:

如果人们正在修改文件并使用 Dropbox 进行同步,您可能会遇到问题。

如果您使用 Dropbox 作为一种方便的方式为人们提供指向您作品的只读链接,那么我发现这没有任何问题,并且已经这样做了多年。

【讨论】:

我只是用 Dropbox 来存储我所有的 Git 存储库,其中一些是巨大的(付费 Dropbox 帐户)。除了我,没有其他人可以访问 Dropbox 文件夹,但我确实在两台不同的计算机上使用它,有时在同一张桌子上来回切换。我现在已经这样做了大约 6 个月,并且没有遇到任何问题。我认为警告只是作为预防措施。但这些只是本地开发文件。我使用 Bitbucket 和 Github 进行托管。 我也是...我使用 Dropbox 并且从未损坏过任何东西。 Google Drive 有时会出现故障,但 DP 做得非常好。 我遇到了一个问题,Dropbox 和 git 一直在争夺一个在操作过程中遗留下来的 index.lock 文件。否则我没有发现问题。 这是正确的,我不能说应该不惜一切代价避免它。这是那些“直到它让你流血并死亡”类型的错误之一。我的顾问使用了这个设置,它最终导致了重大问题 b/c 一个 IDE 在一台笔记本电脑上打开了锁定文件,然后他试图在另一台机器上打开项目,这是不可能的...... b/c DropBox 拒绝让他从另一台机器上删除了锁定文件...另外,如果您不走运,您可能会遇到一些非常棘手的同步问题。如果“墨菲定律”不影响您,请继续……否则祝您好运【参考方案2】:

DropBox 和其他类似的云盘服务如 SpiderOak 会弄乱你的 git 索引文件,因为它可能会在这些文件修改的中间尝试同步,所以它会上传部分状态,然后将其下载回来,完全破坏你的 git 状态。

幸运的是,通过使用 git reset --keep 返回上一个状态可以轻松解决此问题。

然后,为避免此问题,您可以:

    使用 git bundle create my_repo.git --all 将您的 git 索引捆绑到一个文件中。 设置文件监控的延迟,例如 5 分钟,而不是瞬时。这将减少 DropBox 在更改过程中同步部分状态的机会。在即时修改云盘上的文件(例如使用即时保存的笔记应用)时,它也有很大帮助。

【讨论】:

“设置文件监控延迟”这是您在 Dropbox 首选项中找到的设置吗?还是您指的是 git 命令。我想将此作为工作台式机和工作笔记本电脑之间的一个过程开始,因此无论我面前碰巧有什么机器,我的工作文件都是完美的副本。 “将 git 索引捆绑在一个文件中”究竟是什么意思?它通常不止一个文件?为什么这有帮助? @HomeroEsmeraldo 是的,它通常存储在多个文件中,符合其原始概念“一切都是文件”的想法(Linus Torvalds)。这会有所帮助,因为它可以避免启动一个文件的同步,然后错过其他文件,然后通过将这些其他文件恢复到旧版本来破坏,这将与索引中正确同步的其他文件发生冲突。至少理论上是这样,但在实践中我仍然遇到问题。

以上是关于为啥不建议将 git 存储库放在 Dropbox 文件夹中?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Git 以将其与 Dropbox 一起使用?

Mercurial(我猜是 Git)和 Dropbox:有啥缺点吗?

为啥 git 子模块与 svn 外部不兼容?

将 Visual Studio 项目放在 git 存储库中,并在 networkdrive 上添加远程(裸机?)源

将一堆带有标签的 git 存储库放在一起

恢复 git 存储库/提交等