10

首先,我想强调一下,这个问题不是关于在 Dropbox 上托管我的中央仓库,而且我对使用 git 还很陌生。我能找到的涉及 Dropbox 和 git 的其他问题都没有真正回答我的问题;它们都是关于使用 Dropbox 托管您的存储库,或者将两者结合使用是否是一个“好主意”,这两者都不是我在这里要问的。

我的问题如下:我有两台计算机,每台都双启动 Windows 和 Ubuntu(一台笔记本电脑和一台台式机)。我的本地 git 存储库(从 gi​​thub 存储库克隆)位于 Dropbox 文件夹中,以便跨机器和操作系统同步。当我在一台机器/操作系统上进行提交时,它似乎没有将提交状态正确地同步到其他机器。

例如:

在我的 Windows 桌面上,我对 foo.cpp 进行了更改。然后我“git commit -a”和“git push”,将我的更改推送到 github 托管存储库。对文件的更改也会在我的 Dropbox 文件夹中同步,当我在学校登录我的 Windows 笔记本电脑时,所有内容都会毫无问题地下载。但是,当我输入“git status”时,它会说:

# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   foo.cpp
#
no changes added to commit (use "git add" and/or "git commit -a")

但是我已经在我的另一台机器上提交了这些更改,表面上是在同一个工作目录中。尝试从 github 服务器“git pull”给我的信息是一切都是“已经是最新的”。

我希望 Dropbox 可以无缝同步存储库状态。有人熟悉解决这种情况的方法吗?谢谢!

4

1 回答 1

11

TL;博士

不要将 Dropbox 用于与 Git 的并发操作。

最终的一致性会让你悲伤

Dropbox 为您提供最终的一致性。将其用作关键 Git 操作的后备存储是一个 Bad Idea™。如果您将它用作工作树而不是作为裸存储库,那就更糟了。您当然可以做到,但您需要了解这种方法的局限性。

如果您想一次将同步目录用作一个用户的工作树,Dropbox 和Spideroak Hive就很好。只需确保您的文件和文件夹在从另一个系统访问它们之前完全同步。只要您坚持单一用户、单一系统的工作流程,您就不会遇到麻烦,但您的里程可能会有所不同。

时间戳

如果您使用的多台机器的时间不一致,您也可能会遇到问题。如果您没有运行 NTP,则一台机器的时钟可能领先或落后于另一台机器。这可能会导致同步服务认为新文件实际上是旧文件(反之亦然)的情况。简而言之,任何依赖时间戳的东西都可能容易出错。

如果您使用 GNU make 或其他依赖它们的工具,时间戳的准确性尤其重要。如果您打算使用 Dropbox 同步工作树,请确保您的计时在所有将触及该树的系统中都是准确的。

于 2013-08-31T16:49:40.247 回答