这个问题可能是基于我对.gits和git仓库在一般情况下的理解不足,但是:
我可以在两台机器之间使用rsync同步我用git init
创建的内容吗?
我在我的笔记本电脑上有一个仓库,唯一的方法是通过scp/rsync将其传输到远程主机,然后再从该主机下载。我能否在这些主机之间同步完整的目录结构?
有几种可能性:
你可以直接使用rsync
命令同步.git
仓库(或者将整个仓库和工作目录一起同步),前提是在同步期间没有对仓库进行任何操作(与使用rsync://
协议的声明相同)。
你可以使用已废弃的rsync
协议克隆或获取仓库(仓库URL/位置看起来像这样:“rsync://host.xz/path/to/repo.git/
”)。请注意,此协议已被弃用,因为如果仓库中有任何活动,您可能会得到损坏的克隆(或获取)。
另外,据我所知,自2007年以来,在存在打包的引用时它就已经无法正常工作了,直到最近才有人注意到。它将在Git 2.8中消失。
或者你可以创建git bundle,将其通过rsync
或scp
发送至其他机器,然后从bundle中进行克隆或获取。
是的,这是可能的。我记得 Git 使用相对路径方法,所以与另一台计算机同步是安全的。
是的,你可以这样做,但最好使用一个裸仓库,如这篇2012年的文章所示:
$ git clone --bare ./projet projet.git
$ rsync -a --stats --delete ./projet.git/ votre.serveur:~/projets/projet.git/
peff
)。
(由Junio C Hamano -- gitster
--在提交9f03176中合并,于2016年2月17日)
事实证明,当源代码库长时间拥有打包引用时,“
git clone
”通过rsync传输是有问题的,但没有人注意到或抱怨过。
提交 0d0bac6 来自 Jeff King (peff
),具体详情请查看。
您可以轻松使用rsync,但如果您有一些使用本地主机名声明的远程地址(即仅存储在/etc/hosts中),那么这些地址显然不起作用。
但是,您不使用git本身来同步内容是否有某些原因呢?
--receive-pack
选项进行git-push
,以及类似的选项用于fetch/pull/clone)。如果您想通过HTTP推送,则只需要具有WebDAV的Web服务器,配置为允许您进行推送访问(不需要服务器上的git)。 - Jakub Narębski.git
的某些内容是否是特定于主机的。 - Sridhar Sarnobatrsync
同步.git
目录是可行的,并将导致完整的存储库克隆。这就是:
> chmod -R 777 /path/of/your/backup/.git
> rm -fr /path/of/your/backup/.git
> rsync /path/of/your/origin/.git /path/of/your/backup/.git
我知道,这很繁琐和愚蠢... 请告诉我是否有更好的方法来做到这一点...
.git
中的树有丝毫不同,它将添加大量数据。 - salotzman rsync
:--delete delete extraneous files from dest dirs
。这将从备份中删除Git的旧对象文件(以及源中已删除的任何其他文件)。您可能还需要使用 --recursive
。 - Mark Haferkamp
rsync://
协议将仅在git 2.8中消失(自2016年3月起,即在被宣布为“已弃用”10年后!) - VonCgit-over-rsync 不再受支持
。 - M.M