将Git推送/克隆到新服务器

132

我正在学习Git,有些事情让我无法解决。在我的Mac本地创建和使用git存储库后,我是否可以将其复制到其他服务器上?很遗憾,我在防火墙后面,所以无法从其他机器上运行git clone

5个回答

141
  1. git remote add name url
  2. git push name branch
git remote add origin git@github.com:foo/bar.git
git push origin master

请查看 git push 的文档 -- 你可以将某个分支的远程库设置为默认远程库;如果不这样做,origin 是一个特殊的名字。只执行 git push 命令会和执行 git push origin thisbranch 相同(对于你所在的任何分支)。


7
为了更接近“推送克隆”而不仅仅是推送分支的效果:git push -u --all,我们可以省略origin,因为它是默认的推送名称,并且-u也将跟踪远程分支。 - cregox
14
在服务器上使用命令 git init --bare /foo/bar.git 创建一个空的裸仓库,然后将本地仓库推送到那里(就像这个回答中所示),这样应该已经足够了。你不需要使用压缩文件将任何内容传输到服务器上。 - OderWat
1
赞同OderWat的观点。例如,在远程(即git@github.com)登录后执行“git init --bare foo/bar.git”,然后“remote origin”将有一个目标可以推送到。对于github示例,我认为您可以使用github的Repository/Add Web界面,然后遵循它提供的“从命令行推送现有存储库”的建议。Github建议使用“-u”来引用跟踪。 - Dave X
1
这种方法可能是规范的,但它很晦涩,使得git的可用性降低了。我喜欢使用git,但天哪,它确实有一些用户界面问题。 - Ross Rogers
我冒昧地删除了原问题中添加的“EDIT”段落,这使得该过程看起来有些可疑。我认为它不是,而且它本来应该是一个评论,而不是一个问题编辑。 - August Lilleaas
显示剩余2条评论

77
您可能想要做的第一步是,在本地计算机上制作一个仓库的裸克隆。
git clone --bare /path/to/repo /path/to/bare/repo.git  # don't forget the .git!

现在,使用tar/gzip或您喜欢的任何归档工具将新的repo.git目录归档,然后将归档复制到服务器上。
在服务器上解压缩repo。接下来,您需要在本地仓库上设置远程连接:
git remote add repo-name user@host:/path/to/repo.git #this assumes you're using SSH

您随后将能够使用以下命令将代码推送到远程仓库并拉取代码:

git push repo-name branch-name
git pull repo-name branch-name

4
你能解释一下“别忘了 .git!”这个评论的意思吗?在文件夹末尾添加 .git 有什么作用?我应该在什么时候这样做?这只是一个惯例吗? - lumbric
5
“.git” 只是识别裸的 Git 仓库的非官方标准。 - Grant Limberg
4
我不理解这个想法... 这难道不会破坏设置git服务器并实际“传输/复制/保持同步/备份”而不是“压缩”和使用其他方法的整个目的吗? - cregox
4
@Cawas,您只需手动压缩/复制/提取一次存储库。之后,您只需要使用git push和git pull即可。 - sparebytes
1
当我使用 git status 命令时,出现了以下错误提示:fatal: Not a git repository - laplasz
显示剩余6条评论

9

移动仓库有很多方法,如果网络不够稳定,git bundle是个好方法。由于Git仓库只是一个文件夹里的文件,你可以通过复制.git文件夹的方式来“克隆”仓库。

效率最高的方法是使用外部仓库(如GitHubGitosis),然后使用git push命令进行推送。


8
remote server> cd /home/ec2-user
remote server> git init --bare --shared  test
add ssh pub key to remote server
local> git remote add aws ssh://ec2-user@<hostorip>:/home/ec2-user/dev/test
local> git push aws master

我喜欢你回答的简洁明了,但我不确定它是否符合我的需求。我在GitHub上有一个现有的GIT仓库,并且现在也想将其推送到我们安装有GIT的Ubuntu服务器上的实时文件。您能否添加一些注释以使该过程更清晰? - Dave Everitt

2

您可以将分支推送到远程服务器,例如github。您首先需要进行初始项目设置,然后克隆您的项目并执行以下操作:

git push <remote repo> <your branch>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接