3

我在开发服务器上有一个 git clone/repo,但我现在要转移到另一个。我不想将所有本地分支和更改提交到主存储库,那么如何将旧服务器上的所有内容精确复制到新服务器?

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

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

有人说过 x-modes,但是在服务器之间移动文件时如何保留它?

4

3 回答 3

4

如果你想要一个 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 选项?)。(这些类型更改错误到底是什么?)

于 2009-10-27T14:59:27.427 回答
1

我实际上已经这样做了,我所做的只是先将 repo tar 并 scp 结束。我认为 scp -rp 也可以。

“类型更改”通常指的是符号链接成为文件之类的东西,反之亦然。两台服务器是否运行相同的操作系统?

于 2009-10-27T19:42:36.390 回答
1

您可能还想尝试简单的愚蠢解决方案——不要担心类型更改是如何到达那里的,而是让 git 使用重置命令修复它们:

git reset --hard HEAD

仅当 (1) 问题都与签出文件(而不是存储库结构本身)有关并且 (2) 您没有对需要保留的newserver进行任何更改时,这才有意义。

考虑到这些警告,当我发现自己遇到同样的问题时,它对我有用,并且它不需要您考虑 git 的内部结构或文件传输过程保留属性的程度。

于 2010-11-03T18:12:18.460 回答