我有一个本地Git仓库,我想推送到一个新的远程仓库(在Beanstalk上设置全新的仓库,如果这很重要).我的本地仓库有一些分支和标签,我想保留我的所有历史记录.看起来我基本上只需要执行git push,但只上传master分支.如何推送所有内容,以便在遥控器上获得我当地仓库的完整副本?
cmc*_*nty 819
要推送所有分支,请使用(将REMOTE替换为远程名称,例如"origin"):
git push REMOTE '*:*'
git push REMOTE --all
Run Code Online (Sandbox Code Playgroud)
推送所有标签:
git push REMOTE --tags
Run Code Online (Sandbox Code Playgroud)
最后,我认为您可以在一个命令中执行以下操作:
git push REMOTE --mirror
Run Code Online (Sandbox Code Playgroud)
但是,此外--mirror,还会推送你的遥控器,所以这可能不是你想要的.
Dan*_*iel 142
在像我这样的情况下,你获得了一个回购,现在正在将远程原点切换到另一个回购,一个新的空回购......
所以你有你的repo和里面的所有分支,但是你仍然需要检查那些分支以获得git push --all命令以实际推送它们.
你应该在推动之前执行此操作:
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
Run Code Online (Sandbox Code Playgroud)
其次是
git push --all
Run Code Online (Sandbox Code Playgroud)
Pie*_*eed 86
这是对我所处的情况更好的另一种看法.它解决了你有多个遥控器的问题,想要将远程的所有分支克隆source到远程,destination但不必事先检查它们.
(我在Daniel的解决方案中遇到的问题是,source如果我之前已经检查过它,它将拒绝从远程检出跟踪分支,即在推送之前它不会更新我的本地分支)
git push destination +refs/remotes/source/*:refs/heads/*
Run Code Online (Sandbox Code Playgroud)
注意:如果您不使用直接CLI,则必须转义星号:
git push destination +refs/remotes/source/\*:refs/heads/\*
这将把远程的所有分支推source送到一个头部分支destination,可能会进行非快速推送.您仍然需要单独推送标签.
Fri*_*977 15
我最喜欢(也是最简单)的方式
git clone --mirror OLD_GIT_URL
cd NEW_CREATED_FOLDER
git remote add NEW-REMOTE NEW_GIT_URL
git push NEW-REMOTE --mirror
Run Code Online (Sandbox Code Playgroud)
scy*_*scy 13
该联机帮助页git-push值得一读.结合这个网站,我在我的网站上写了以下内容.git/config:
[remote "origin"]
url = …
fetch = …
push = :
push = refs/tags/*
Run Code Online (Sandbox Code Playgroud)
该push = :手段"推动任何'匹配’分支(即已经存在于远程仓库,并有当地合作即分行)",而push = refs/tags/*表示"推动所有标签".
所以现在我只需要运行git push以推送所有匹配的分支和所有标签.
是的,这不是OP想要的(所有分支都必须已经存在于远程端),但是对于那些在搜索"我如何在同一时间推送分支和标签"时发现这个问题的人可能会有所帮助时间".
Pra*_*tik 12
运行以下命令将现有存储库移动到包含所有分支和标签的新远程存储库:
cd existing_repo
git remote rename origin old-origin
git remote add origin git@<repo-url.git>
for remote in `git branch -r `; do git checkout --track remotes/$remote ; done
git push -u origin --all
git push -u origin --tags
Run Code Online (Sandbox Code Playgroud)
ta.*_*.is 11
如果目的地为空,这是我找到的最简洁的方法.切换到空文件夹,然后:
# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v
git clone --bare https://your-source-repo/repo.git .
git push --mirror https://your-destination-repo/repo.git
Run Code Online (Sandbox Code Playgroud)
替换https://...为file:///your/repo等中的.
小智 9
在我的情况下,有用的是什么.
git push origin --all
Run Code Online (Sandbox Code Playgroud)
我发现上面的回答还有一些不清楚的地方,会误导用户。首先,可以肯定的是git push new_origin --all,git push new_origin --mirror不能复制所有的原始分支,它只是将您本地现有的分支复制到您的 new_origin。
以下是我测试过的两种有用的方法:
1,通过克隆裸回购复制。git clone --bare origin_url,然后进入该文件夹,git push new_origin_url --mirror。通过这种方式,你也可以使用git clone --mirror origin_url,无论是--bare和--mirror将下载的裸回购,不包括工作区。请参考这个
2、如果你通过 using 有一个 git repo git clone,这意味着你有裸 repo 和 git 工作区,你可以使用git remote add new_origin new_origin_url, 然后git push new_origin +refs/remotes/origin/\*:refs/heads/\*, 然后git push new_origin --tags
通过这种方式,您将获得一个额外的头部分支,这是没有意义的。
镜像存储库
创建存储库的裸克隆。
git clone --bare https://github.com/exampleuser/old-repository.git
Run Code Online (Sandbox Code Playgroud)
镜像推送到新存储库。
cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
Run Code Online (Sandbox Code Playgroud)
删除您在步骤1中创建的临时本地存储库。
cd ..
rm -rf old-repository.git
Run Code Online (Sandbox Code Playgroud)
镜像包含Git大文件存储对象的存储库
创建存储库的裸克隆。将示例用户名替换为拥有存储库的人员或组织的名称,然后将示例存储库名称替换为要复制的存储库的名称。
git clone --bare https://github.com/exampleuser/old-repository.git
Run Code Online (Sandbox Code Playgroud)
导航到刚克隆的存储库。
cd old-repository.git
Run Code Online (Sandbox Code Playgroud)
引入存储库的Git大文件存储对象。
git lfs fetch --all
Run Code Online (Sandbox Code Playgroud)
镜像推送到新存储库。
git push --mirror https://github.com/exampleuser/new-repository.git
Run Code Online (Sandbox Code Playgroud)
将存储库的Git大文件存储对象推送到镜像。
git lfs push --all https://github.com/exampleuser/new-repository.git
Run Code Online (Sandbox Code Playgroud)
删除您在步骤1中创建的临时本地存储库。
cd ..
rm -rf old-repository.git
Run Code Online (Sandbox Code Playgroud)
以上说明来自Github帮助:https : //help.github.com/articles/duplicating-a-repository/
推送分支和标签(但不推送远程):
git push origin 'refs/tags/*' 'refs/heads/*'
Run Code Online (Sandbox Code Playgroud)
这相当于组合--tags和--all选项git push,而 git 似乎不允许这样做。
我正在从一个版本控制服务切换到另一个版本控制服务,需要克隆所有存储库,包括所有分支、标签和历史记录。
为了实现上述目标,我接下来做了:
git push origin '*:*'用于将所有分支检出到本地存储库的 .sh 脚本:
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
git branch --track ${branch#remotes/origin/} $branch
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174518 次 |
| 最近记录: |