我在开发服务器上有一个git克隆/仓库,但现在要迁移到另一个服务器。我不想将所有本地分支和更改提交到主存储库中,那么我该如何在新服务器上制作旧服务器上的所有内容的精确副本?
我尝试了oldserver:〜$ scp -rp project newserver:〜/project
但是,当在新服务器上尝试执行任何操作时,我只会得到大量的“typechange”错误。
有人提到过x模式,但是在服务器之间移动文件时如何保留它呢?
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选项?)。(这些typechange错误到底是什么?)
你也可以尝试简单的笨办法——不必担心类型更改是如何发生的,而是使用重置命令让 Git 来修复它们:
git reset --hard HEAD
只有在以下两种情况下才有意义:(1) 所有问题都涉及已检出的文件(而不是存储库结构本身),并且 (2) 您没有在 newserver 上进行需要保留的更改。
在满足这些注意事项的情况下,当我遇到同样的问题时,它对我起作用了,并且不需要考虑git的内部工作原理或您的文件传输过程如何保留属性。
我实际上已经做过这个,我所做的就是先将repo打包成tar文件,然后通过scp传输。我认为scp -rp也可以。
“Typechange”通常指的是符号链接变成文件或反之的情况。这两台服务器运行的是相同的操作系统吗?
git status
命令,并得到一堆文件被标记为修改: "typechange filename"。我的用户和组具有相同的名称,并且在 newserver 和 oldserver 上,这些文件具有相同的权限。 - Jacob Rask