如何将整个 git 存储库移到其他地方?

Lip*_*pis 3 git

我们在 GitHub 上有很多存储库,我们希望完全切换到另一个提供商。我是 Mercurial 的粉丝,所以我不太熟悉 Git 分支,不幸的是,在克隆 git 存储库时,你必须指定一个分支,否则它将克隆主分支(如果我在这里没有完全错的话)。

为了更具体地举一个例子,我们假设我们有一个名为 的项目hello,它有几个分支(masterab)。我想移动它,然后通过删除原始存储库继续在新存储库中工作。

所以我们有这个存储库:

git@github.com:lipis/hello.git
Run Code Online (Sandbox Code Playgroud)

我们想将其移至:

ssh://lipis@lipis.kilnhg.com/lipis/hello
Run Code Online (Sandbox Code Playgroud)

由于我们有 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
Run Code Online (Sandbox Code Playgroud)

alt*_*ive 5

git clone不会克隆特定分支,它会克隆所有分支,然后检查 master。

最简单的方法是使用 .push 将存储库推送到新位置--mirror。您也可以从另一侧克隆。您也可以只复制该文件夹。

为了详细说明如何工作,假设我们从具有分支、和 的git clone存储库进行克隆。然后在新的存储库中,我们获得分支、、和,并且我们可以像这样进行分支以在该新存储库中获取我们自己的副本。originmasterabmasterorigin/masterorigin/aorigin/bgit branch a origin/aa

从存储库中推送可能很困难github,因此您可能应该使用git clone --mirror(它会自动为我们设置所有引用)。这是假设您拥有对ssh服务器的完全访问权限。如果没有,您应该git clone --mirror从第三台机器然后git push --mirrorssh服务器。

  • @Lipis不,你没有错过任何东西:`git clone --mirror`始终是一个*裸*存储库(即没有工作树)。请参阅 https://exyr.org/2011/git-mirrors/ 作为示例。 (2认同)