我意识到有similar questions,但我的问题略有不同:我想知道在多台计算机上通过同步的Dropbox文件夹共享裸存储库是否适用于通过Git共享代码?
换句话说:通过Dropbox共享Git仓库,就像从一个集中位置共享它一样,例如,通过SSH或HTTP?
repo是否在每个人的本地驱动器上更新?这与通过共享网络驱动器共享Git仓库相同吗?
注意:这是不一个经验问题:它似乎工作正常。我在问Git repo的结构是否与这种共享方式兼容。
编辑为了澄清/重复,我说的是将Dropbox上的Git存储库保存为 裸存储库 。我不是在谈论保留Dropbox中受源代码控制的实际文件。
答案 0 :(得分:20)
我认为没有理由丢失数据--Git的存储库结构很健壮,而在存储库存储本身中,具有相同名称的文件将始终具有相同的内容(这不适用于分支名称)。 / p> 但是,它不会有效率。 Git的传输协议意味着它通常只会传输一次更改。使用Dropbox,如果两个人打包稍有不同的存储库,生成的包可能包含重要的公共数据而不相同,因此DropBox会同步这两个包,这是低效的。
您可能还会发现,虽然数据全部存在,但由于两个副本同时更新了相同的分支,因此最终会出现未跟踪的更改。这可以通过确保从每个副本推送到不同的分支来解决,但这很痛苦。
答案 1 :(得分:15)
我很确定这是不安全的。 Git存储库中有很多移动部件,而Dropbox很容易破坏其中一个。例如,您可能会在refs
目录中找到错误的分支提示(主数据等),或者如果objects/info/packs
文件的内容错误,您的对象存储可能会停止工作。 Git repos相当简单而且健壮,但它们不仅仅是愚蠢的牢不可破的存储空间。
通过SSH,git或HTTP访问远程存储库,甚至在网络文件系统上本地访问远程存储库是安全的,因为只能通过git
进程访问存储库,这样可以确保所有内容都移动到位正确的顺序。但是Dropbox没有对订购做出任何保证,因此您可能会丢失数据。
只需使用Git服务器(或任何SSH服务器) - 如果您没有,请考虑GitHub,Bitbucket或GitLab。它可以为您节省很多麻烦,而且使用Dropbox共享的本地存储库并不困难(您只需要SSH URL而不是本地路径)。
答案 2 :(得分:12)
如果两个用户断开连接,做一些工作,推送到裸存储库的本地副本然后继续,会发生什么?在这种情况下,当Dropbox尝试同步时你会遇到问题 - 包文件和分支提示会有所不同,而Dropbox无法解决这个问题。这是我能看到的唯一问题。我认为,即使两个用户都已连接,如果他们碰巧同时进入他们的本地裸存储库,也会发生同样的事情。
答案 3 :(得分:9)
我在使用Dropbox和Git以及Mercurial时遇到了问题。存储库文件经常被破坏,可能是由于Dropbox的同步不完美,特别是在从多个地方进行更改时。此外,Dropbox在后台运行,因此在同步操作过程中,很容易意外地尝试使用存储库(或重启机器)。
我喜欢Dropbox,但它不是共享驱动器或“真正的”远程Git存储库的良好替代品。
答案 4 :(得分:5)
我曾经使用MobileMe执行此操作,但计算机一直不同步。每台计算机都有一个不同于云中的回购,因为在MobileMe中没有“合并”的概念(我认为,DropBox也是,对吗?)我最终只需要选择一个版本保留和丢失一些编辑,或复制编辑并重新应用它们。自从我转到中央Git回购后,生活变得更加轻松。
如果它到目前为止对你有用,那很好。我想,如果两个开发者同时推动他们当地的裸露回购,你将会遭受很多痛苦。如何DropBox知道哪个是对的?
答案 5 :(得分:3)
如果我告诉你,有些情况下Dropbox已经搞砸了我的Git,我会通过矛盾回答你的问题吗? 至少根据我的经验,这发生了5次以上,并且有很多人在那里有相同的经历。
但是现在我不相信Dropbox对Git来说真的很重要。实际上你可以设置远程分支(Github,Gitorious,Bitbucket),它可以取代Dropbox共享和修订历史功能(不仅仅是关于Dropbox的吗?)并为您提供更多。
答案 6 :(得分:2)
DropBox的一个问题与它们处理历史备份的方式有关。虽然您可以回滚单个文件(在过去30天内,或者如果您有PackRat,则永久回滚),但您无法回滚整个目录。这意味着,如果您的仓库因任何原因而搞砸了,那么拥有历史备份的惊人服务基本上是无用的,因为您必须点击数千个文件才能将它们恢复到早期版本。
然后,如果你愿意的话,大多数其他答案都会提到竞争条件的问题。
答案 7 :(得分:0)
我只是将我的存储库作为私有存储库托管在github.com上。是的,您必须支付Micro计划(7美元/计划),但您知道您在外部备份了代码。