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

2024-05-09

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

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

e.g.:

在我的 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 能够无缝同步存储库状态。有人熟悉解决这种情况的方法吗?谢谢!


TL;DR

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

最终的一致性会让你悲伤

Dropbox 为您提供最终一致性 http://en.wikipedia.org/wiki/Eventual_consistency。将其用作关键 Git 操作的后备存储是一个坏主意™。如果您将其用作工作树而不是裸存储库,情况会更糟。您当然可以做到,但您需要了解这种方法的局限性。

Dropbox 和蜘蛛橡树巢 https://spideroak.com/hive/如果您想使用同步目录作为一次一个用户的工作树,那就没问题了。只需确保您的文件和文件夹完全同步,然后再从另一个系统访问它们即可。只要您坚持单用户、单系统工作流程,您就不应该遇到麻烦,但您的情况可能会有所不同。

时间戳

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用 Git 部署时压缩 JS/CSS 文件

    我对 git 有点陌生 另外 这是我第一个自动化部署过程的项目 到目前为止 能够做到这一点真是太幸福了git push dev并上传文件 复制配置文件等 现在 当我推送到我的开发服务器时 我想缩小 JS CSS 文件 我正在考虑在服务器上安
  • 目标路径已存在且不是空目录

    我克隆了一个 git 存储库 但不小心弄乱了 所以我重新克隆并显示消息 目标路径已存在且不是空目录 我尝试过删除 Mac 中带有目标路径名称的文件夹 但没有成功 我对编码非常陌生 因此我们将不胜感激 对于根文件夹 以及任何其他文件夹 对于那
  • VS2013 - GIT 不工作

    我最近安装了VS2013 每当我尝试使用 GIT 执行任何操作时 我都会在输出窗口中收到以下两条消息 libgit2 引发错误 类别 未知 错误 本机库未提供错误消息 该问题可能主要出现在远程存储库获取中 在克隆远程存储库之前 请打开远程
  • travis-ci 安装程序使用 --github-token 发布

    我在使用带有 github 令牌的安装版本时遇到问题 我喜欢 travis ci 但我不愿意透露我的 github 密码 我需要使用令牌并且我阅读了文档 因为这应该可以通过这种方式实现 不幸的是它仍然要求输入密码 travis login
  • Git 身份验证 - 以新用户身份拉取

    以下命令集可以正常工作 mkdir carboncake cd carboncake git init git remote add origin email protected cdn cgi l email protection rep
  • 仅将单个文件放入 git 子模块/存储库中

    我在 git 源代码存储库中有一个特定文件 其中包含生产设置 密码 我想限制此文件 以便只有制作团队的成员才能看到它 但是 我想控制它的变化 我考虑过在 git 中使用子模块 然后限制对新存储库的访问 然而 git 似乎需要子模块的整个子目
  • 如何设置“阅读文档”以使 Sphinx autodoc 选项发挥作用?

    我的项目不是使用 autodoc 构建的 我遇到了关于我的项目未在 autodoc 中构建的常见问题 https read the docs readthedocs org en latest faq html my project isn
  • 如何在 github 复合操作步骤中动态设置环境变量?

    我确实需要它作为一个环境变量 这是为了复合动作具体来说 在复合操作中 我尝试了许多不同的设置环境变量的方法 我发现做到这一点的唯一方法是使用env在步骤本身内 runs using composite steps name A step e
  • 使用 SourceTree 克隆存储库

    有人可以给我一个简单的使用 SourceTree 克隆存储库的快速演练吗 在书签中 我单击克隆存储库 对于源路径 我粘贴如下所示的 URL 电子邮件受保护 cdn cgi l email protection 客户端 应用程序名称 ios
  • 如何列出未推送的 Git 提交(本地但不在源上)

    如何查看我所做的 尚未推送到远程存储库的任何本地提交 偶尔 git status将打印出我的分支是X提交之前origin master 但不总是 这是我安装的 Git 的错误 还是我遗漏了什么 这给出了 origin master 和 HE
  • git update-index --no-assume-unchanged 不起作用

    我设置了assume unchanged咬了几个文件 现在我想取消它们 但这不起作用 gt git update index no assume unchanged Gemfile gt git ls files v grep Gemfil
  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • Azure git 部署 - 第二个程序集中缺少引用

    我正在尝试将 Bitbucket 部署设置到 Azure 网站 我成功链接了 Bitbucket 和 Azure 但是当我推送到 Bitbucket 时 我在 Azure 站点上收到以下错误 如果我单击 查看日志 它会显示以下编译错误 D
  • 在 git 中记录前 10 个

    两个问题 如何从头到尾显示 git 中的前 10 个提交 无分行 如何指定提交索引并记录它 显示第二个或第三个 我知道 git 使用父级来链接提交 很容易从头到尾记录提交 喜欢 git log HEAD 10 但我需要从头到尾查询 可以吗
  • 从 Dropbox 下载文件并将其保存到 SDCARD

    现在我真的很沮丧 我想从 Dropbox 下载一个文件并将该文件保存到 SD 卡中 我得到的代码为 private boolean downloadDropboxFile String dbPath File localFile throw
  • gitattributes 中的`* text=auto eol=lf` 会做什么?

    我们的 gitattributes 文件中有这样的内容 text auto eol lf 我想准确理解这是做什么的 第一部分是text auto 来自文档 http git scm com docs gitattributes 这确保了所有
  • git checkout HEAD -- 和有什么区别?和 git reset --hard HEAD?

    我已经查看了这个 stackoverflow 链接 但我认为我所要求的之间的细微差别是使用HEAD在结账命令中 因为他们的建议似乎不起作用 git reset hard HEAD 和 git checkout 之间有区别吗 https st
  • 将远程更改合并到非当前分支的分支中

    我有多个分支 我想将远程更改合并到一个分支中不是我当前的分支 例如 git merge remote branch some other branch 仅当本地分支可以快速转发到远程头时 这才是可行的 在任何分支中 要从源获取远程分支并更新
  • 更改 Windows 安装的 Git Bash 中 ~ 目录的位置

    我什至不确定我问的是正确的问题 让我解释一下我的情况 这是关于 Windows 7 上的 Git 我的公司在网络驱动器上设置 Windows 用户目录 而不是在本地硬盘驱动器上 用于备份和超出本问题范围的其他目的 我无法改变这项政策 然而
  • Git-svn:批量删除孤立的远程分支

    我正在处理的 SVN 项目 通过 git svn 有经常创建的分支 然后与主干重新集成 然后删除 现在项目大约有10个分支没有被删除 但是在git中 gitbranch r显示大约有50个 我可以一次删除这些 检查它们是否仍然存在于 svn

随机推荐