![在未安装 git-annex 的服务器上托管 Git Annex](https://linux22.com/image/1345022/%E5%9C%A8%E6%9C%AA%E5%AE%89%E8%A3%85%20git-annex%20%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%89%98%E7%AE%A1%20Git%20Annex.png)
机器 A 和 B 拥有一个共同的git 附件存储库。它们都具有git 附件程序已安装,我在两台机器上手动编辑/提交/等内容。A 和 B 不同时连接到互联网,因此它们无法直接同步在一起。
服务器 C 始终处于打开和连接状态(免费且非常安全)。它已安装 git,但我没有管理员权限,因此无法安装 git-annex。
我的问题:我可以使用服务器 C 作为中央枢纽来从 A 和 B 推送和拉取 git-annex 更新,而无需在 C 上安装 git-annex 和整个 haskell ghc 依赖项吗?
我尝试使用 C 中的“目录”或“rsync”特殊遥控器,但这似乎只保存文件,而不是推送/拉取后更新 A 和 B 所需的其余内容。
任何提示都将非常感激!
答案1
通过 git 和 rsync 访问同一台服务器,您可以使用该服务器存储历史记录(通过 git 访问)和附件键值存储(通过 rsync 访问)。这些也可以分离并存储在任意数量的不同服务器上。
看起来您已经了解了所需的所有工具。基本上,您将得到 2 个独立的远程服务器,它们都指向 server-c 上的不同位置。第一个远程服务器 (server-c) 是一个常规 git 远程服务器,用于同步您的历史记录以及直接签入 git repo 的任何内容。第二个远程服务器是一个附件特殊远程服务器。
[remote "server-c"]
url = [email protected]:/path/to/repo.git
fetch = +refs/heads/*:refs/remotes/server-c/*
[remote "server-c-rsync"]
annex-rsyncurl = example.com:/home/user/annex-rsync
annex-uuid = ...
您应该能够按照如下方式进行设置:
git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c-rsync type=rsync rsyncurl=example.com:/home/user/annex-rsync encryption=none
这应该能为您提供所需的基本功能。唯一的缺点是您有两个不同的远程名称,它们实际上指向同一台服务器。特别是,在使用 get、copy 和 move 的 --to= 或 --from= 参数时,您只需记住使用特殊远程 (server-c-rsync)。
也许可以将单个远程服务器指向两个位置,但我不确定这是否真的受支持。以下命令似乎可以创建一个合理的 .git/config。
git init
git annex init "test"
git remote add server-c [email protected]:/path/to/repo.git
git annex initremote server-c type=rsync rsyncurl=example.com:/rsync/user encryption=none
对我来说,这会导致 .git/config 中出现一个远程,其中既有 url=(用于常规 git 操作),也有 annex-rsyncurl=。但是,我还没有对此进行进一步测试,以确保 git annex 在使用附加文件时忽略 url 并仅使用 annex-rsyncurl 条目。