rsync .git目录

svr*_*ist 24 git rsync

这个问题可能是基于我对.gits和git存储库的作用缺乏了解,但是:

我可以使用我git init在机器之间创建的内容来同步一个目录吗?

我的笔记本电脑上有一个存储库,唯一的方法就是将scp/rsync移到远程主机上,我可以从中再次下载它.我可以同步这些主机之间的完整目录结构吗?

Jak*_*ski 28

有几种可能性:

  • 您可以只rsync使用.git存储库(甚至整个存储库以及工作目录),前提是您在存储期间没有任何活动rsync(与使用rsync://协议相同的免责声明).

  • 您可以使用不推荐使用的 rsync协议克隆或获取(其中存储库URL /位置如下所示:" rsync://host.xz/path/to/repo.git/").请注意,不推荐使用此协议,因为如果存储库中存在任何活动,则可能会损坏克隆(或获取).

    另外,正如我所听到的那样,自2007年以来,它在包装裁判的存在下无法正常工作,直到最近才有人注意到.它会(它确实)在Git 2.8中消失.

  • 或者你可以在其他机器上创建git bundle,rsync它或者scp克隆或从bundle中获取.

  • 正如我在[在下面的回答中](http://stackoverflow.com/a/1398041/6309) 所指出的,git `rsync://` 协议将*最终* 仅在 git 2.8 中消失(2016 年 3 月,启动后 10+被宣布为“已弃用”!) (2认同)

Ikk*_*kke 10

是的,这是可能的.IIRC,git使用相对方法.因此将它与另一台计算机同步是安全的.


Mil*_*kov 6

你可以没有任何问题rsync,但如果你有一些遥控器声明与机器本地的主机名(即只存储在/ etc/hosts中)那么那些显然是行不通的.

但是,有什么理由不使用git本身同步内容?


Von*_*onC 5

是的,你可以,但你应该使用裸存储库,如本主题所示.

$ git clone --bare ./projet projet.git
$ rsync -a --stats --delete ./projet.git/ votre.serveur:~/projets/projet.git/
Run Code Online (Sandbox Code Playgroud)

注意:6年以后,git 2.8(2016年3月)将正式弃用并完全删除git rsync协议!

请参阅Jeff King()提交0d0bac6(2016年1月30日).(由Junio C Hamano合并- -提交9f03176,2016年2月17日)peff
gitster

事实证明,git clone当源存储库已经打包了很长时间的引用时,rsync传输已被破坏,没有人注意到也没有抱怨它.

来自Jeff King(peff)的提交0d0bac6具有所有细节.

  • 您也可以将rsync用于完整存储库.如果使用rsync,裸存储库没有什么特别之处. (3认同)
  • 只有当您想要推送到该回购时才需要裸存储库.如果你每次只复制回购,你可以用一个完整的回购做. (2认同)