使用Dropbox作为跨多台机器的git工作目录 - 提交不能完美同步

wic*_*her 10 git github dropbox

首先,我想强调的是,这个问题不是关于在Dropbox上托管我的中央回购,而且我是使用git的新手.我能找到的涉及Dropbox和git的其他问题都没有真正回答我的问题; 他们都是关于使用Dropbox托管您的存储库,或者是否将这两者结合使用是一个"好主意",这两者都不是我在这里问的问题.

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

例如:

在我的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")
Run Code Online (Sandbox Code Playgroud)

但是我已经在我的其他机器上提交了这些更改,表面上是相同的工作目录.尝试从github服务器'git pull'给我的信息是一切都是'已经是最新的'.

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

Tod*_*obs 11

TL; DR

不要使用Dropbox与Git进行并发操作.

最终的一致性将导致你的悲伤

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

如果您希望一次将同步目录用作一个用户的工作树,Dropbox和Spideroak Hive就可以了.只需确保您的文件和文件夹在从其他系统访问之前已完全同步.只要您坚持单用户,单系统工作流程,您就不会遇到麻烦,但您的里程可能会有所不同.

时间戳

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

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