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

时间:2012-01-23 21:12:47

标签: git

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

谢谢!

编辑: 感谢所有的好答案。我选择的回答对我有限的GIT知识有意义。

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

9 个答案:

答案 0 :(得分:61)

在您的服务器上创建git存储库作为裸存储库

git init --bare repo.git

然后,推送本地存储库的提交

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

答案 1 :(得分:56)

首先,在您的服务器上创建一个git仓库

git init --bare /path/to/repo

然后将远程仓库添加到本地仓库(ssh://或https://)

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

并推送文件/提交

git push origin master

最后,推送标签

git push origin --tags

答案 2 :(得分:10)

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

git remote add <remote> <url>

将遥控器添加到本地存储库。 <remote>是遥控器的名称(通常是“原点”)。 <url>是具有写访问权限的存储库的URL(如git @ ...)

git push <remote> <branch>

将提交移至原点。 <branch>是您正在推动的分支(通常是“主人”)。

答案 3 :(得分:4)

在服务器上创建一个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

现在,使用

为每个本地存储库创建一个新的裸存储库
mkdir projectName
cd projectName
git init --bare

之后,网址将为git@yourserver:projectName

答案 4 :(得分:3)

如果您想要一个普通的(例如:非裸)存储库,只需复制它。没有什么特别需要做的。

如果要在服务器上使用裸存储库,只需在服务器上初始化它,将其作为远程添加到“本地”副本,然后推送到它。 (git push --mirror将完成所有事情。)

答案 5 :(得分:1)

如果您有一个独立的本地工作树存储库(里面有“.git”文件夹的文件夹),您想要将遥控器添加到:

  1. 在遥控器中创建一个新的空存储库。
  2. 在本地存储库中,将新远程设置为源:

      

    cd localrepo

         

    git remote add origin REMOTEURL#(使用git remote -v验证)

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

      

    git push --all --set-upstream origin#(使用git branch -vv验证)

  4. 将所有本地标签推送到遥控器:

      

    git push --tags origin

  5. 此时,本地存储库的行为就像它从遥控器克隆一样。

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

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

        

      cd localrepo.git

           

      git push --all REMOTEURL

    3. 将所有本地标签推送到遥控器:

        

      git push - 标记REMOTEURL

答案 6 :(得分:0)

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

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

证明新的回购是好的,使用git status / log等让我感觉更好

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

rm -rf localrepo.git localrepo-prev

答案 7 :(得分:0)

我有一个带有提交日志的本地仓库。我想添加一个新的github远程存储库,保留所有提交日志。方法如下:

  1. 在github上创建远程仓库。并从“克隆或下载”绿色按钮获取repo URL,例如https://github.com/mhisoft/eVault.git

  2. 如果本地仓库附加到旧的orgin。先删除它

      

    git remote remove origin

  3. 从命令行添加现有存储库

      

    git remote add origin https://github.com/mhisoft/eVault.git

         

    git push -u origin master

答案 8 :(得分:0)

我尝试了前两个最受好评的答案。但它会引发各种错误。也许是因为“git”中的内容已更新。 这就是我所做的。 如果您尝试过任何其他方法,请通过“rm -rf ./.git”删除“.git”文件夹,如果您创建了远程存储库,请删除它以重新开始。

#。在您的本地存储库中启动 git。

git init

#。添加文件(如果您想忽略某些文件或文件类型或文件夹,您可以创建一个 .gitignore 文件,这是可选的)。

git add .

#。进行第一次提交

git commit -m "First commit"

#。现在在 bitbucket/github 中创建一个 empty 存储库 登录到 bitbucket/github 并创建一个没有自述文件或 .gitignore 的新存储库。如果有任何文件 tnere 或 commit,它将产生问题。还有其他程序。

In BitBucket

In Github

#。在 BitBucket/Github 中将此存储库添加为本地存储库的“远程”。转到本地存储库目录的根目录。

git remote add origin Remote_URL_Of_the_Repo

#。 Remote_URL 看起来像 https://UserName@bitbucket.org/UserName/RepositoryName.git

#。将本地文件推送到远程仓库

git push origin master

#。完成后,您将看到本地文件、master 分支、远程提交。