如何将我的本地Git存储库移动到远程Git存储库

我有我的本地机器上的各种Git项目。 我有一个服务器,我想用作我的远程Git存储库。 如何将我的本地Git存储库(项目)移动到我的服务器,同时保持历史logging不变?

谢谢!

编辑:感谢所有伟大的答案。 我select的答案对我有限的GIT知识是有意义的。

编辑#2:我注意到我原来的答案select没有复制我的标签。 git push --mirror <path>不会复制标签。

在你的服务器上创buildgit仓库作为裸仓库

 git init --bare repo.git 

然后推送你本地仓库的提交

 git push --mirror ssh://yourserver/~/repo.git 

首先,在你的服务器上创build一个git仓库

 git init --bare /path/to/repo 

然后将远程回购添加到您的本地

 git remote add origin ssh://server/path/to/repo 

最后,推

 git push origin master 

Ralf Wernders博客上有一个很好的教程。 假设您知道如何在服务器上创build存储库,或者已经完成:

 git remote add <remote> <url> 

将远程添加到您的本地存储库。 <remote>是远程(通常是“起源”)的名称。 <url>是你的版本库的写入权限(比如git @ …)

 git push <remote> <branch> 

将提交移动到原点。 <branch>是你推动的分支(通常是“主”)。

如果你想要一个正常的(例如:不是空的)存储库,只需复制它。 没有什么特别的事情需要去做。

如果要在服务器上使用裸存储库,只需在服务器上初始化该存储库,将其作为远程“本地”副本添加,然后推送到该服务器。 ( git push --mirror会让所有的东西通过。)

在服务器上创build一个git仓库(你可以使用gitolite / gitosis或只是一个普通的用户帐户+ pubkey ssh auth),使用服务器添加到你的本地git仓库

 git remote add name url 

并使用git push -u name master-u将当前分支标记为跟踪,因此您可以将git pull改为git pull name master )。

在服务器端(基于Debian的系统):

 adduser --system --home /home/git --bash /bin/bash git su - git mkdir .ssh cat yourkey.pub > .ssh/authorized_keys 

现在,为每个本地资源库使用创build一个新的裸仓库

 mkdir projectName cd projectName git init --bare 

之后,该url将是git@yourserver:projectName

如果您有一个独立的本地工作树资料库(里面有一个“.git”文件夹的文件夹),您想要添加一个远程工具:

  1. 在远程中创build一个新的空存储库。
  2. 在本地存储库中,将新的远程设置为原点:

    CD localrepo

    git remote add origin REMOTEURL#(用git remote -vvalidation)

  3. 将所有本地分支推送到远程,并设置每个本地分支来跟踪相应的远程分支:

    git push –all –set-upstream origin#(用git分支validation-vv)

  4. 将所有本地标签推送到远程:

    git push – 标签的来源

在这一点上,本地存储库的行为就像从远程克隆的一样。


如果您只有一个裸露的本地存储库(名称以.git结尾的文件夹),您只需将其复制到远程:

  1. 在远程中创build一个新的空存储库。
  2. 在本地存储库中,将其所有分支推送到远程

    cd localrepo.git

    git push –all REMOTEURL

  3. 将所有本地标签推送到远程:

    git push – 标签REMOTEURL

也许这是“倒退”,但我一直这样做

 git clone --bare localrepo localrepo.git scp -r localrepo.git remoteserver:/pathTo mv localrepo localrepo-prev git clone remoteserver:/pathTo/localrepo 

certificate新的回购是好的,与GIT状态/日志等,使我感觉更好

将不在版本控制下的任何文件从-prev移动到新的localrepo

 rm -rf localrepo.git localrepo-prev