我在本地计算机上有各种Git项目。我有一台服务器要用作远程Git存储库。如何保持本地历史记录完整无缺,将本地Git存储库(项目)移到服务器上?
谢谢!
编辑:感谢所有伟大的答案。对于我有限的GIT知识,我选择的答案很有意义。
编辑#2:我注意到我原来的答案选择没有复制我的标签。git push --mirror <path>复制标签。
Answers:
在您的服务器上,将git仓库创建为裸仓库
git init --bare repo.git
然后,推送本地存储库的提交
git push --mirror ssh://yourserver/~/repo.git
git init --bare repo.git创建一个名为repo.gitgit的文件夹。我为什么要那个?我想我想要一个文件夹“ repo”,里面有一个“ .git”文件夹,就像我过去使用过的100多个仓库一样。如果我这样做,git init --bare repo/.git我会得到带有“ .git”的“ repo”。但是后来我开始努力。在服务器上,我收到了一个无法使用的回购协议,其中包含许多fatal: This operation must be run in a work tree“正确答案”。
首先,在服务器上创建一个git repo
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
fatal: This operation must be run in a work tree如果我尝试执行任何操作,则远程回购协议会收到各种错误
git branch --set-upstream-to=origin/master master
Ralf Wernders博客上有一个很好的教程。假设您知道如何在服务器上创建存储库,或者已经完成:
git remote add <remote> <url>
要将远程添加到本地存储库。<remote>是远程服务器的名称(通常是“来源”)。<url>是具有写访问权的存储库的URL(例如git @ ...)
git push <remote> <branch>
将提交移至原点。<branch>是您要推送的分支(通常是“主”)。
在服务器上创建一个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。
如果您有一个独立的本地工作树存储库(其中带有“ .git”文件夹的文件夹),则要将远程添加到:
在本地存储库中,将新的远程设置为源:
cd localrepo
git remote add origin REMOTEURL#(使用git remote -v验证)
将所有本地分支推送到远程,并设置每个本地分支以跟踪相应的远程分支:
git push --all --set-upstream origin#(通过git branch -vv验证)
将所有本地标签推送到远程:
git push-标签起源
此时,本地存储库的行为将与从远程克隆中复制的一样。
如果您有一个裸露的本地存储库(名称以.git结尾的文件夹),而您只想复制到远程服务器上:
在本地存储库中,将其所有分支推送到远程
cd localrepo.git
git push --all REMOTEURL
将所有本地标签推送到远程:
git push --tags REMOTEURL
如果您想要一个普通的(例如:不裸)存储库,只需复制它即可。没有什么特别的需要做。
如果要在服务器上使用裸存储库,只需在服务器上对其进行初始化,然后将其添加为“本地”副本上的远程存储,然后推送至该存储库即可。(git push --mirror一切都会通过。)
mkdir somefolder; cd somefolder; git init。论地方文化git push --mirror ssh://remote/somefolder。结果remote: error: refusing to update checked out branch: refs/heads/master
我有一个带有提交日志的本地仓库。我想将其添加到一个新的github远程存储库中,并保留所有提交日志。方法如下:
在github上创建远程仓库。然后从“克隆或下载”绿色按钮获取仓库URL,例如 https://github.com/mhisoft/eVault.git
如果本地回购附加到旧的原始文件。首先将其删除
git remote remove origin
从命令行添加现有存储库
git remote add origin https://github.com/mhisoft/eVault.git
git push -u原始主机