git-remote-dropbox

git-remote-dropbox 是 Git 与 Dropbox 之间的透明双向桥接。它允许您将 Dropbox 文件夹或共享文件夹用作 Git 远程仓库!
此 Git 远程助手使 Dropbox 表现得像一个_真正的 Git 远程_。它在使用 Dropbox 作为后端存储的同时,维护了传统 Git 远程所提供的_所有保证_。这意味着 即使有多个人同时操作该仓库,它也能正确工作,从而可以使用 Dropbox 共享文件夹 作为用于协作的 Git 远程。
安装该助手后,使用它就像添加一个远程一样简单,例如
dropbox:///path/to/repo。
要克隆挂载在您的 Dropbox 中的文件夹或共享文件夹中的仓库,您可以运行:
git clone "dropbox:///path/to/repo"
要为现有本地仓库添加远程,您可以运行:
git remote add origin "dropbox:///path/to/repo"
仓库目录将在您首次推送时自动创建。
添加远程仓库后,您可以将其视为普通的 Git 远程仓库。 基于 Dropbox 的远程仓库支持普通远程仓库支持的所有操作,并且 即使在存在并发操作的情况下,即使使用共享文件夹,它在原子性方面也提供相同的保证。
设置
安装 git-remote-dropbox
- Prerequisites:
uv(or other tool likepip)git
- Install this package with
uv tool install git-remote-dropbox. Usewhich git-remote-dropboxto make sure it's available via$PATH.
登录 Dropbox
运行 git dropbox login 并按照说明使用 OAuth 进行身份验证
并登录您的 Dropbox 账户。
如果您希望将访问权限限定在 应用
文件夹 范围内,您可以运行
git dropbox login --app-folder。在此配置下,路径将以您 Dropbox
账户中的 "git-remote-dropbox-repos" 应用文件夹 为根目录。请注意,应用文件夹 无法
共享。
共享
上述内容提供了一种在 Dropbox 上创建 Git 仓库并从你拥有的多台机器上使用它的方法。换句话说,这是一种方便的方式,用于在笔记本电脑和台式机之间共享远程仓库。
如果你想与他人共享,你应该明确地(例如通过 Dropbox 网站)将仓库的根文件夹与你的协作者共享。然后他们也应该安装 git-remote-dropbox 并使用他们自己的账户登录。
多个账户
git-remote-dropbox 支持使用多个 Dropbox 账户。您可以使用 git dropbox login <username> 设置命名
账户。这些用户名与您的 Dropbox 登录无关;您可以选择任意名称来组织您的
账户,例如 "work"。
您可以通过适当设置 git
远程 URL 来告诉 git-remote-dropbox 使用特定账户,指定如下形式的用户名:
dropbox://username@/path/to/repo。
仓库管理器
除了 git 远程助手外,git-remote-dropbox 还附带一个
额外的工具来管理您在 Dropbox 上的登录和仓库。该工具
可以通过 git dropbox 调用。
该工具支持以下命令:
git dropbox login [username]:登录,使用默认账户(无需 在远程中指定用户名),或使用别名(用于多账户 支持)git dropbox logout [username]:注销git dropbox show-logins:列出已登录的账户git dropbox set-head <remote> <branch>:在远程上设置默认分支git dropbox version:显示版本
注意事项
-
不要直接在 Dropbox 文件夹中与 Git 仓库交互 -始终 使用 git-remote-dropbox。如果您正在使用 Dropbox 客户端同步文件, 建议使用 选择性 同步 并禁用包含该仓库的文件夹的同步,以防万一避免任何 意外的冲突。
-
git-remote-dropbox 不使用 Dropbox 桌面客户端 - 它直接使用 API。 它不要求安装桌面客户端。
-
远程助手不支持浅克隆。
-
克隆仓库或获取大量对象会产生大量松散 对象。为了节省本地仓库的空间,请运行
git gc --aggressive。 -
如果远程 HEAD(远程的默认分支)未设置,从 Dropbox 克隆 仓库后,Git 不会自动检出分支。要 检出分支,请运行
git checkout <branch>。要在远程 设置默认分支,请使用git dropbox命令。
常见问题
为什么我不应该将 Git 仓库保留在 Dropbox 中并让客户端同步 它?
互联网上似乎有很多文章推荐这是一种良好的 工作流。然而,这不是一个好主意!桌面客户端并不了解 Git 如何管理其磁盘格式,因此如果存在并发更改或 同步延迟,可能会产生导致 Git 仓库损坏的 冲突。在单用户情况下,由于时序安排,这种情况可能不常见, 但这仍然不安全!
为什么我不应该将裸 Git 仓库保留在 Dropbox 共享文件夹中,将其 用作基于文件夹的 Git 远程,并使用桌面客户端同步它?
互联网上似乎有一些文章建议这是一个好 主意。事实并非如此。使用桌面客户端同步裸 Git 仓库并不 安全。并发更改或同步延迟可能会导致 Git 仓库 损坏。
如何在不使用 git-remote-dropbox 辅助工具的情况下从 Dropbox 访问/恢复我的仓库?
由于 git-remote-dropbox 使用与 Git 兼容的磁盘格式, 不使用辅助程序访问你的仓库很简单:
- 从 Dropbox 下载仓库数据(一个包含
objects和refs目录的目录)。 - 创建一个新目录,并在该目录中初始化一个空的 Git 仓库。
- 用从 Dropbox 下载的数据覆盖你新初始化的
仓库中的
.git/refs和.git/objects(使用类似rm -rf .git/{refs,objects} && cp -r /path/to/data/{refs,objects} .git/的命令)。 - 检出分支(使用类似
git checkout -f master的命令)。 - 可选地,运行
git gc --aggressive以节省本地 仓库的磁盘空间。
如何在代理服务器后面使用 git-remote-dropbox?
你可以通过设置
HTTP_PROXY 和 HTTPS_PROXY 环境变量,在代理服务器后面使用 git-remote-dropbox。参见
此处 以
获取更多详细信息。
如何在子模块中使用 git-remote-dropbox?
你可以通过设置
protocol.dropbox.allow
为 always 来允许此操作:
git config --global --add protocol.dropbox.allow always
设计
如需了解 git-remote-dropbox 的设计,请参阅 DESIGN.md。 如果您正在考虑为该项目做出贡献,这可能特别有用。
贡献
您有关于如何改进 git-remote-dropbox 的想法吗?有功能请求、 错误报告或补丁吗?太好了!请参阅 CONTRIBUTING.md 以 获取有关您可以采取哪些措施的信息。
许可证
版权所有 (c) Anish Athalye。根据 MIT 许可证发布。请参阅 LICENSE.md 以获取详细信息。