代码之家  ›  专栏  ›  技术社区  ›  Jacob Rask

将git repo移动到另一个服务器

  •  3
  • Jacob Rask  · 技术社区  · 15 年前

    我在开发服务器上有一个git clone/repo,但现在我要转到另一个。我不想把我所有的本地分支和变更都提交给主存储库,那么我怎样才能精确地将每件事情的副本复制到主目录?

    我试过 oldserver:~$ scp -rp project newserver:~/project

    但当我尝试在newserver上做任何事情时,我只会得到大量的“typechange”错误。

    有人说了X模式,但如何在服务器之间移动文件时保存呢?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Cascabel    15 年前

    如果您想要git解决方案,可以尝试

    git clone --mirror <oldurl> <newurl>
    

    尽管这只适用于裸存储库。

    如果这是一个非裸机回购协议,您还可以执行正常的克隆,然后执行如下操作:

    git fetch origin
    git branch -r | grep '^ *origin/[^ ]*$' |
        while read rb; do git branch --no-track ${rb#*/} $rb; done
    git remote rm origin
    

    中间步骤当然可以用5000种不同的方式来完成,但那就是一个!(请注意,在bash中的管道之后不需要续行-它知道它需要更多的输入)

    最后,我建议使用rsync而不是scp(可能有-avz选项?)如果你想直接复制。(这些类型更改错误到底是什么?)

        2
  •  1
  •   ebneter    15 年前

    我实际上已经做到了,我所做的就是先把回购协议加起来,然后再把它处理掉。我想scp-rp也可以。

    “typechange”通常指的是符号链接变成文件或相反。两台服务器是否运行相同的操作系统?

        3
  •  1
  •   Eric Anderson    14 年前

    您可能还想尝试简单的哑解决方案——不要担心typechanges是如何实现的,但是让git使用reset命令修复它们:

    git reset --hard HEAD
    

    只有当(1)问题都与签出的文件(而不是存储库结构本身)有关,并且(2)您没有对 新服务器 你需要保存。

    考虑到这些注意事项,当我发现自己遇到同样的问题时,它对我很有用,而且不需要考虑git的内部结构,也不需要考虑您的文件传输过程在保留属性方面有多好。