我有我的本地机器上的各种Git项目。我有一台服务器,我想用作我的远程Git存储库。如何将我的本地Git存储库(项目)移动到我的服务器,同时保持历史记录不变?如何将我的本地Git存储库移动到远程Git存储库
谢谢!编辑: 感谢您的所有伟大的答案。我选择的答案对我有限的GIT知识是有意义的。
编辑#2: 我注意到我原来的答案选择没有复制我的标签。 git push --mirror <path>
确实复制标签。
我有我的本地机器上的各种Git项目。我有一台服务器,我想用作我的远程Git存储库。如何将我的本地Git存储库(项目)移动到我的服务器,同时保持历史记录不变?如何将我的本地Git存储库移动到远程Git存储库
谢谢!编辑: 感谢您的所有伟大的答案。我选择的答案对我有限的GIT知识是有意义的。
编辑#2: 我注意到我原来的答案选择没有复制我的标签。 git push --mirror <path>
确实复制标签。
在您的服务器创建一个Git仓库裸仓库
git init --bare repo.git
然后,把你的本地仓库的提交
git push --mirror ssh://yourserver/~/repo.git
如果您想要一个正常的(例如:不是裸露的)存储库,只需复制它。没有什么特别的事情需要去做。
如果要在服务器上使用裸存储库,只需在服务器上初始化它,将其作为远程“本地”副本进行初始化,然后将其推送到该服务器。 (git push --mirror
将打通了一切。)
这并不适用于工作我。在远程,'mkdir somefolder; cd somefolder; git init'。在本地'git push --mirror ssh:// remote/somefolder'。结果'远程:错误:拒绝更新检出分支:refs/heads/master' – gman
有一个很好的教程在Ralf Wernders blog。假设您知道如何在服务器上创建存储库或已经完成的存储库:
git remote add <remote> <url>
将远程添加到本地存储库。 <remote>
是远程(通常是“起源”)的名称。 <url>
是url与写访问你的仓库(如Git @ ......)
git push <remote> <branch>
要通过原点移动提交。 <branch>
是你推动的分支(通常是“主人”)。
在服务器上创建一个Git仓库(可以使用gitolite/Gitosis的,或只是一个普通用户帐号+ PUBKEY SSH AUTH),将服务器添加到使用
git remote add name url
,并使用git push -u name master
本地git仓库( -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
后,每个本地资源库,网址是[email protected]:projectName
。
它要求输入密码,所以我必须使用什么密码? – Fawwad
首先,你的服务器上创建一个混帐回购协议
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
如果你有一个独立的本地工作树仓库(里面一个“git的”文件夹中的文件夹),您要添加一个遥控器:
在本地存储库,设置新的远程为原点:
cd localrepo
git remote add origin REMOTEURL #(verify with git remote -v)
推送所有本地分支机构的远程,并设置每个本地分支跟踪相应的远程分支:
git push --all --set-upstream origin #(verify with git branch -vv)
推送所有本地标签远程:
git push --tags origin
在这一点上,本地存储库的行为就像从远程克隆的一样。
如果你有一个裸露的本地存储库(与git的结尾的名称的文件夹),你只是想复制到远程:
在本地资源库,推动其所有分支机构的远程
cd localrepo.git
git push --all REMOTEURL
推送所有本地标签远程:
git push --tags REMOTEURL
也许这是 “倒退”,但我一直都这么做
git clone --bare localrepo localrepo.git
scp -r localrepo.git remoteserver:/pathTo
mv localrepo localrepo-prev
git clone remoteserver:/pathTo/localrepo
证明了新的回购协议是好的,用git状态/日志等,以让我感觉更好
举动不在版本控制下的任何文件从 - 上一页新localrepo
rm -rf localrepo.git localrepo-prev
如果我这样做,任何人都可以克隆我的回购?(如果他们知道地址) –
@sliders_alpha:如果他们具有SSH访问您的服务器并且存储库具有适当的权限,那么是的。 – knittl
有这么多狗屎。感谢最好的和简单的方式! – Tobias