跳转到主要内容

git annex针对Google Drive的特殊远程

项目描述

git-annex针对GoogleDrive的特殊远程

git-annex-remote-googledrive向git-annex添加了对Google Drive的直接和快速支持,并带来了一些令人惊叹的新功能。

重要: Google已经开始锁定其Google Drive API。这可能会影响对您的远程访问。请参阅Google Drive API锁定

功能

  • exporttree远程
  • 在仓库内存储凭证
  • 同时使用不同的Google帐户(甚至在同一仓库中)
  • 真正可恢复的上传和下载
  • ... 更多功能即将推出,请参阅问题

安装

pip3 install git-annex-remote-googledrive

对于Arch Linux,AUR中有一个可用的软件包AUR

用法

  1. 创建一个git-annex仓库(《教程》)

  2. 在仓库中,运行git-annex-remote-googledrive setup并按照说明使用您的Google帐户进行身份验证。

  3. 为Google Drive添加一个远程。以下示例

    • 添加了一个名为google的git-annex远程
    • 在上传前加密所有数据块,并将密钥存储在附件仓库中
    • 将您的文件存储在名为 git-annex 的文件夹/前缀中
git annex initremote google type=external externaltype=googledrive prefix=git-annex encryption=shared mac=HMACSHA512

initremote 命令会调用 GPG,如果机器熵不足,可能会导致挂起。要调试问题,请使用 --debug 标志,例如 git-annex initremote --debug

选项

git-annex-remote-googledrive 专用的选项

  • prefix - 用于远程的文件夹路径。如果不存在,将会创建它。
  • root_id - 除了路径外,您还可以指定文件夹的 ID。文件夹必须已存在。这将使它独立于路径,并且 git-annex 总是能够找到它,无论您将它移动到哪里。也可以用来访问您未添加到“我的驱动器”的共享文件夹。
  • layout - 密钥应在远程文件夹中如何存储。可用选项:nested(默认),nodirlowermixed。您可以在任何时候切换布局。git-annex-remote-googledrive 将自动迁移。有关详细信息,请参阅 https://github.com/Lykos153/git-annex-remote-googledrive#repository-layouts(从不同的远程迁移时,将自动导入 gdrive_layoutrclone_layout 的现有设置到 layout。)
  • auto_fix_full - 如果远程应该自动尝试修复满文件夹问题,请设置为 yes。请参阅 https://github.com/Lykos153/git-annex-remote-googledrive#fix-full-folder
  • transferchunk - 传输时使用的块大小。这是在连接错误后重新传输时必须重新传输的最小数据。这也影响进度显示。它必须与 chunk 区分开。建议值在 1MiB 到 10MiB 之间。较小的值意味着在网络连接中断时需要重新传输的数据更少,从而产生更精细的进度反馈。较大的值会产生稍微少的开销,因此效率更高。默认:5MiB

通用 git-annex 选项

  • encryption - "none","hybrid","shared","pubkey" 或 "sharedpubkey" 之一。请参阅 加密
  • keyid - 指定用于加密的 gpg 密钥。
  • mac - MAC 算法。请参阅 加密
  • exporttree - 设置为 yes 以使此特殊远程可由 git-annex-export 使用。它不能用作通用特殊远程。
  • chunk - 这是在上传前 git-annex 切分密钥的大小,请参阅 块化。由于 Google Drive 允许文件大小高达 5TB,并且此远程实现块传输,因此此选项实际上仅在两种情况下有用:(1)加密。如果您使用加密,这将是在上传期间额外使用的磁盘空间量。(2)流式传输。如果您想在使用 git-annex-inprogress 下载文件的同时访问该文件。如果您在此远程上不使用这些功能,您可以忽略此选项。如果您使用它,50MiB500MiB 之间的值可能是不错的选择。较小的值意味着对大文件进行存在性检查的 API 调用更多,这可能会大大减慢 fsckdropmove 的速度。较大的值意味着在通过 git annex inprogress 能够通过下载的文件之前需要等待更长的时间。
  • embedcreds - 将其设置为 yes 以强制将凭证存储在仓库的 git-annex 分支中,并使用与密钥相同的加密方法(nonehybridsharedpubkeysharedpubkey)。如果此选项未设置为 yes,则行为取决于加密。在混合、公钥或共享公钥的情况下,凭证将像设置 embedcreds 一样嵌入到仓库中。对于所有其他加密方法(none 和 shared),凭证将以未加密的形式存储在 .git 目录中的文件中。

使用现有远程仓库

如果您从任何其他与 Google Drive 兼容的特殊远程仓库(如 git-annex-remote-rclone 或 git-annex-remote-gdrive)切换,只需输入 git annex enableremote <remote_name> externaltype=googledrive 即可。布局设置将自动导入。

仓库布局

目前支持以下布局

  • nested - 使用最大宽度为 500,000 个节点的树结构。这是唯一永远不会完全运行的布局(通过每 499,999 * 500,000 个密钥添加一个新级别)。从 v2.0.0 版本开始将是默认布局。
  • lower - 使用两级小写目录层次结构(使用基于 DIRHASH-LOWER MD5 的 git-annex 格式)。此选择需要 git-annex 6.20160511 或更高版本。在 500,000 * 16^6 个密钥时运行满。
  • mixed - 使用两级混合大小写目录层次结构(使用 git-annex 的 DIRHASH 格式)。在 500,000 * 32^4 个密钥时运行满。
  • nodir - (已弃用)不使用目录层次结构。这曾经是 Google Drive 上最有效的布局,直到 Google 引入了文件限制。在 500,000 个密钥时运行满,因此应该避免。直到 v2.0.0 版本,它将保持为默认布局以保持兼容性。

您可以使用 git annex enableremote <remote_name> layout=<new_layout> 在任何时候切换布局。git-annex-remote-googledrive 将开始在新布局中存储新的密钥。它将始终找到现有密钥,无论它们存储在哪种布局中。当访问现有密钥时,将迁移到当前布局。因此,为了使远程仓库处于一致状态,您可以运行 git annex fsck --from <remote_name> --fast

修复满文件夹

自 2020 年 6 月以来,Google 强制对每个文件夹的项数设置限制为 500,000,这使得初始默认布局 nodir 变得不可取。如果您在达到限制之前切换到不同的布局,那么一切都会正常,git-annex-remote-googledrive 将自动迁移。但是,如果您已经达到限制,则需要采取额外步骤。为了使远程仓库重新运行,它需要能够在基础文件夹内创建文件夹,因此我们需要低于限制。实现这一点的最简单方法是

  • 创建一个新文件夹
  • 将远程文件夹移动到新文件夹内
  • 将新文件夹重命名为指定的 prefix。 (或者,如果您已使用 root_id 配置远程仓库,则运行 git annex enableremote <remote_name> root_id=<new_folder_id>

git-annex-remote-googeldrive 可以为您执行这些步骤。为此,您需要发出 git annex enableremote <remote_name> auto_fix_full=yes。下次它由于限制而无法存储新密钥时,它将执行上述步骤以迁移到新布局。

由于 git-annex-remoge-googledrive 能够找到其根文件夹内的任何密钥,它将从这个地方找到剩余的部分。如果您想让它达到一致状态,可以运行 fsck,但这不是强制性的。

Google Drive API 锁定

谷歌已经开始锁定其谷歌驱动API,以便增强用户的安全控制。敦促开发者“转向按文件用户同意模式,使用户能够更精确地确定哪些文件允许应用程序访问”。遗憾的是,他们没有提供一种允许用户访问特定文件夹的方法,因此git-annex-remote-googledrive仍然需要访问整个驱动器才能正常运行。这使得必须由谷歌进行验证。在应用程序被批准之前(如果被批准),OAuth同意屏幕将显示警告(#31),用户需要接受才能继续。

目前还不清楚如果应用程序不被批准会发生什么。可能是仅显示警告屏幕。但也可能是在2020年初git-annex-remote-googledrive被禁止访问谷歌驱动器。如果您想为此做准备,寻找不同的云服务可能是个好主意。然而,似乎rclone已经获得批准,因此如果git-annex-remote-googledrive被禁止,您将能够切换到git-annex-remote-rclone。为此,请按照其README中描述的步骤操作,然后输入git annex enableremote <remote_name> externaltype=rclone rclone_layout=nodir。然而,这不会为export-remotes工作,因为git-annex-remote-rclone不支持它们。

如果您使用git-annex-remote-googledrive与GSuite账户同步,您就处于安全状态。GSuite管理员可以选择哪些应用程序可以访问其驱动器,无论它是否获得谷歌的批准。

问题、贡献

如果您遇到任何问题,请在GitHub上查找问题。请提交拉取请求或为问题或潜在改进创建新问题。

许可

版权所有 2017 Silvio Ankermann。根据GPLv3授权。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

git-annex-remote-googledrive-1.3.2.tar.gz (47.2 kB 查看哈希值)

上传时间

构建分布

git_annex_remote_googledrive-1.3.2-py3-none-any.whl (31.4 kB 查看哈希值)

上传时间 Python 3

由以下支持