使用 Dropbox 和 git 没有冲突

Posted

技术标签:

【中文标题】使用 Dropbox 和 git 没有冲突【英文标题】:Using dropbox and git without conflitcts 【发布时间】:2011-09-11 11:19:46 【问题描述】:

我正在与仅使用 Dropbox 作为版本控制和协作工具的人合作。我不打算改变他们的行为。另一方面,我是一个 git 上瘾者,并且想将它用于我的个人用途。

他们有没有在 Dropbox 中同步的 .git 目录?

谢谢

【问题讨论】:

这与编程无关,您是在寻求 Dropbox 技术支持。 如果您想要一个更好的解决方案,请在这里给我们一些帮助:dropboxforum.com/hc/communities/public/questions/… 【参考方案1】:

根据 Dropbox 论坛中的this thread,您不能省略/排除文件夹。有Selective Sync,但这也不是你需要的。

所以目前最好的解决方案是手动同步,例如使用rsync(1)

    在某处创建一个新文件夹 使用 rsync 将此文件夹与 Dropbox 中的文件夹同步。我建议为此编写一个脚本。 在这个新文件夹中添加一个 git repo 使用第二个 rsync 脚本更新 Dropbox 文件夹(在此处使用 --exclude .git

【讨论】:

【参考方案2】:

我可以看到两个选项:

    使用https://***.com/a/8603156/112019 中给出的提示,通过--git-dir 和--work-tree 将.git 存储库文件存储在外部位置(如~/gitdropbox/myproject.git)。为了简化使用,您还可以在您的保管箱同步文件夹中添加一个 .git 文件(不是目录),内容为“gitdir:/path/to/repo.git”,以便您可以正常使用 git .

    使用 Dylan R. 在https://forums.dropbox.com/topic.php?id=52360#post-387887 中描述的方法来忽略 .git 文件夹。然后,您在保管箱系统中保留一个空的 .git 文件夹,并使用选择性同步功能在本地忽略它,然后初始化存储库。请注意,当您通过选择性同步删除现有 .git 文件夹时,它会被 Dropbox 删除,因此如果您有想要保留的历史记录,请确保您有本地备份。

【讨论】:

【参考方案3】:

选择性同步似乎是解决方案,但请注意:当您将文件夹标记为已排除时,Dropbox 会将其删除。

只需备份您的 .git 文件夹,用Selective Sync 将其标记为已排除,Dropbox 将删除它。当您将文件夹复制回来时,Dropbox 不会再次删除它,并且它会缺少 Dropbox 同步标记(及其子文件夹)。

【讨论】:

【参考方案4】:

2020 年更新:现在 Dropbox 具有标记要忽略的文件夹或文件的选项,如下所述:https://help.dropbox.com/files-folders/restore-delete/ignored-files

attr -s com.dropbox.ignored -V 1 myfoldername

【讨论】:

是的!我可以证明这确实有效。 Dropbox 将立即忽略给定的文件/文件夹。它不会删除文件/文件夹,只是忽略它,这正是我们这些年来一直在等待的。如果他们能更进一步,添加类似.dropboxignore 这样会自动执行此操作的内容,那就更好了。【参考方案5】:

我也遇到过同样的问题,正如sunew 已经提到的,您现在可以标记要忽略的文件或文件夹。我在 MacOS 上的 Dropbox 文件夹中使用以下 bash 脚本来查找 Dropbox 文件夹中的所有 .git 文件夹和父 node_modules 文件夹,并将它们标记为忽略:

# for MacOS
# exclude-files-dropbox.sh
find . -type d -name "node_modules" -prune -exec xattr -w com.dropbox.ignored 1  \;
find . -type d -name ".git" -prune -exec xattr -w com.dropbox.ignored 1  \;

以下应该可以在 Linux 上运行:

# for Linux
# exclude-files-dropbox.sh
find . -type d -name "node_modules" -prune -exec attr -s com.dropbox.ignored -V 1  \;
find . -type d -name ".git" -prune -exec attr -s com.dropbox.ignored -V 1  \;

【讨论】:

以上是关于使用 Dropbox 和 git 没有冲突的主要内容,如果未能解决你的问题,请参考以下文章

带有 git 的 Dropbox 类服务——没有 rsync 和 inotify

覆盖 Dropbox Core 中的文件会产生冲突的副本

删除 Git 中的损坏名称(保管箱冲突副本)

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

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

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