我们在GitHub上有很多存储库,我们希望完全切换到另一个提供商。我是一个Mercurial粉丝,所以我不是很熟悉Git分支,不幸的是在克隆git存储库时你必须指定一个分支,否则它将克隆一个分支(如果我在这里没有完全错误)。
更具体地说,我们假设我们有一个名为hello
的项目,它有一些分支(master
,a
,b
)。我想移动它,然后通过删除原始存储库继续在新存储库中工作。
所以我们有这个存储库:
git@github.com:lipis/hello.git
我们希望将其移至:
ssh://lipis@lipis.kilnhg.com/lipis/hello
由于我们有40多个不同的项目,其中很多都有不同的分支,我的问题是如何将每个存储库(包括所有分支)完全移动到另一个存储库而不需要为每个项目拉动和推送单个分支?
如果有某种程序会很好:
$ git clone git@github.com:lipis/hello.git
$ cd hello
# some black git magic that only Linus understands..
# continue working with the newest repository only
答案 0 :(得分:4)
git clone
不会克隆特定分支,它会克隆所有分支,然后检出主分支。
最简单的方法是使用--mirror
将存储库推送到新位置。你也可以从另一边克隆。您也可以只复制该文件夹。
要详细说明git clone
的工作原理,假设我们从具有分支origin
,master
和a
的存储库b
进行克隆。然后在新的存储库中,我们得到分支master
,origin/master
,origin/a
和origin/b
,我们可以像git branch a origin/a
一样分支来获取我们自己的副本{@ 1}}在新的存储库中。
从a
存储库推送可能很困难,因此您可能只需使用github
(它会自动为我们设置所有引用)。这假设您拥有对git clone --mirror
服务器的完全访问权限。如果没有,您应该从第3台计算机ssh
,然后git clone --mirror
到git push --mirror
服务器。