迁移Git仓库

Git仓库迁移而不丢失log的方法

  • 要求能保留原先的commit记录,应该如何迁移呢?

  • 同时,本地已经clone了原仓库,要配置成新的仓库地址,该如何修改呢?

  • 注意:如果使用了代码审核工具Gerrit,那么在进行操作之前需要将Gerrit关掉,等成功恢复后再将Gerrit开户即可

使用git push --mirror
  1. 建立新仓库
    1. 从原地址克隆一份裸版本库,比如原本托管于 GitHub,或者是本地的私有仓库git clone --bare git://192.168.10.XX/git_repo/project_name.git
    2. 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe,亦或是本地的私有仓库,如192.168.20.XX
      su - git
      cd /path/to/path/
      mkdir new_project_name.git
      git init --bare new_project_name.git
    3. 以镜像推送的方式上传代码到 GitCafe 服务器上。 请确保已经添加了公钥到新的机器上cd project_name.git git push --mirror git@192.168.20.XX/path/to/path/new_project_name.git
    4. 到新服务器上找到 Clone 地址,直接Clone到本地就可以了。git clone git@192.168.20.XX/path/to/path/new_project_name.git
    5. 删除本地代码。cd .. rm -rf project_name.git
    这种方式可以保留原版本库中的所有内容。
  2. 切换remote_url
    1. 查看remote的名字git branch -r
    2. remote_git_address更换成你的新的仓库地址,git remote set-url remote_origin_address remote_new_address
    3. 也可以直接更改.git/conf配置文件里的ip地址就行。


  3. windows下的操作命令备忘
    git push --mirror root@47.52.172.211:/home/git/gitrepo/DevicePortal.git
    
    git.exe clone --progress -v "D:\DevicePortalUA" "D:\Repo\DevicePortalUA"
    
    git clone --bare "D:\DevicePortalUA"
    
    git clone --bare 350775.cicp.net:dp.git
    git clone --bare root@350775.cicp.net:dp.git
    
    本地:
    从原地址克隆一份裸版本库,比如原本托管于 GitHub,或者是本地的私有仓库
    1,git clone --bare "D:\DevicePortalUA" "D:\Repo\dpua"
    2,su - git
    cd D:\Repo
    mkdir DevicePortalUA.git
    git init --bare DevicePortalUA.git
    cd D:\\Repo\\dpua
    git push --mirror "D:\Repo\DevicePortalUA"
    
    然后到新的 Git 服务器上创建一个新项目,比如 GitCafe,亦或是本地的私有仓库,如192.168.20.XX
    远程:
    cd /home/git/gitrepo
    tar zxvf DevicePortalUA.git.tar.gz
    
    git clone --bare 350775.cicp.net:dp.git
    git clone --bare root@350775.cicp.net:dp.git
    
    
    1,git clone --bare "F:\Bank_Bridge" "D:\Bank_Bridge_bare"
    2,git init --bare Bank_Bridge.git
    3,cd  bank_Bridge.bare
    4,git push --mirror  "D:\Bank_Bridge.git" 
    
    1,git clone --bare "F:\BankBridge" "D:\BankBridge_bare"
    2,git init --bare BankBridge.git
    3,cd  bankBridge_bare
    4,git push --mirror  "D:\BankBridge.git" 
    
    1,git clone --bare "F:\StrivingNote" "D:\StrivingNote_bare"
    2,git init --bare StrivingNote.git
    3,cd  StrivingNote_bare
    4,git push --mirror  "D:\StrivingNote.git"