我有一个本地Git回购,我想把它推到一个新的远程回购(全新的回购设置在Beanstalk上,如果这很重要的话)。 我的本地回购有一些分支和标签,我想保留我的所有历史。

看起来我基本上只需要做一个git推送,但这只上传主分支。

我如何推动所有东西,以便在遥控器上获得本地回购的完整副本?


当前回答

每次我谷歌如何做到这一点,我最终都会读到同样的帖子,但它并没有让我到达我需要的地方,所以希望这对我未来的自己和其他人也有帮助。

我开始了一个新的本地项目,我想把它推到我的回购(比特桶)。以下是我所做的:

导航到本地项目根目录 初始化:git init 使用:git Add添加所有文件。 git commit -m“初始提交” 去我的回购(BitBucket) 创建新的存储库:new_project 回到我的本地项目 add origin git@bitbucket.org:AndrewFox/new_project.git 使用:git Push origin master -f来提交

-f标志用于强制执行,否则它将识别出两个回购是不同的并失败。

其他回答

镜像存储库

创建存储库的裸克隆。

git clone --bare https://github.com/exampleuser/old-repository.git

镜像推送到新的存储库。

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git

删除在步骤1中创建的临时本地存储库。

cd ..
rm -rf old-repository.git

镜像包含Git大文件存储对象的存储库

创建存储库的裸克隆。将示例用户名替换为拥有存储库的个人或组织的名称,并将示例存储库名称替换为希望复制的存储库的名称。

git clone --bare https://github.com/exampleuser/old-repository.git

导航到刚才克隆的存储库。

cd old-repository.git

导入存储库的Git大文件存储对象。

git lfs fetch --all

镜像推送到新的存储库。

git push --mirror https://github.com/exampleuser/new-repository.git

将存储库的Git大文件存储对象推到镜像。

git lfs push --all https://github.com/exampleuser/new-repository.git

删除在步骤1中创建的临时本地存储库。

cd ..
rm -rf old-repository.git

以上说明来自Github帮助:https://help.github.com/articles/duplicating-a-repository/

每次我谷歌如何做到这一点,我最终都会读到同样的帖子,但它并没有让我到达我需要的地方,所以希望这对我未来的自己和其他人也有帮助。

我开始了一个新的本地项目,我想把它推到我的回购(比特桶)。以下是我所做的:

导航到本地项目根目录 初始化:git init 使用:git Add添加所有文件。 git commit -m“初始提交” 去我的回购(BitBucket) 创建新的存储库:new_project 回到我的本地项目 add origin git@bitbucket.org:AndrewFox/new_project.git 使用:git Push origin master -f来提交

-f标志用于强制执行,否则它将识别出两个回购是不同的并失败。

实现目标的主要方法是使用——all和——tags标记。忽略其中任何一个都不能实现你想要的东西。不幸的是,它们不能一起使用(不知道为什么),所以它们必须一个接一个地运行。

git push --all
git push --tags

另一个相关的选项是——prune选项,它删除远程上本地不存在的任何分支/标签。

或者,考虑——mirror选项,因为它基本上等同于——all——tags——prune。

git push --mirror

要推送所有分支,可以使用以下任意一种(将REMOTE替换为远程的名称,例如“origin”):

git push REMOTE '*:*'
git push REMOTE --all

推送所有标签:

git push REMOTE --tags

最后,我认为你可以在一个命令中完成这一切:

git push REMOTE --mirror

然而,除此之外——镜子,也会推动你的遥控器,所以这可能不是你想要的。

要推送分支和标签(但不包括遥控器):

git push origin 'refs/tags/*' 'refs/heads/*'

这相当于结合了git push的——tags和——all选项,而git似乎不允许这样做。