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
用法
-
创建一个git-annex仓库(《教程》)
-
在仓库中,运行
git-annex-remote-googledrive setup
并按照说明使用您的Google帐户进行身份验证。 -
为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
(默认),nodir
,lower
和mixed
。您可以在任何时候切换布局。git-annex-remote-googledrive
将自动迁移。有关详细信息,请参阅 https://github.com/Lykos153/git-annex-remote-googledrive#repository-layouts(从不同的远程迁移时,将自动导入gdrive_layout
或rclone_layout
的现有设置到layout
。)auto_fix_full
- 如果远程应该自动尝试修复满文件夹问题,请设置为yes
。请参阅 https://github.com/Lykos153/git-annex-remote-googledrive#fix-full-foldertransferchunk
- 传输时使用的块大小。这是在连接错误后重新传输时必须重新传输的最小数据。这也影响进度显示。它必须与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 下载文件的同时访问该文件。如果您在此远程上不使用这些功能,您可以忽略此选项。如果您使用它,50MiB
和500MiB
之间的值可能是不错的选择。较小的值意味着对大文件进行存在性检查的 API 调用更多,这可能会大大减慢fsck
、drop
或move
的速度。较大的值意味着在通过git annex inprogress
能够通过下载的文件之前需要等待更长的时间。embedcreds
- 将其设置为yes
以强制将凭证存储在仓库的 git-annex 分支中,并使用与密钥相同的加密方法(none
、hybrid
、shared
、pubkey
、sharedpubkey
)。如果此选项未设置为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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 211b9faf2e8d1ad2b85bb9354c4280fe631c39e738e760f373b4fde776639267 |
|
MD5 | fe0f4752afd4a050621a48a61f2201e2 |
|
BLAKE2b-256 | 7252a68a9d6dad0298b4a5412aa737269bd41ebe9615dd7534b550e6a82965e2 |
git_annex_remote_googledrive-1.3.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 19a149854d8baf78de444e5aca00b4fc4c01a34e4176e2853589adec9b8629a1 |
|
MD5 | 4a14f0341d2607b1082e9e2f513be871 |
|
BLAKE2b-256 | 87b498d53cca937f187d81bc50b622fd0aabb55c5868de7e761644cc6cc41492 |