如何从现有的git存储库创建一个新的git存储库

时间:2012-03-23 17:48:41

标签: git

我有一个远程git存储库,它真正取代了我们在另一个旧SCM中所拥有的一切。多年来,许多项目和产品已添加到存储库中。

此仓库中有一个分支,对应于我感兴趣的产品。 我想只从这个分支创建一个全新的git存储库,而不是真正关心历史的丢失。

git remote是否添加解决方案?我希望这两个存储库都在同一台服务器上。

思想?

3 个答案:

答案 0 :(得分:63)

为了从现有存储库创建新的Git存储库,通常会创建一个新的 bare 存储库,并将一个或多个分支从现有存储库推送到新存储库。

以下步骤说明了这一点:

  1. 创建新存储库。它必须才能推送到它。

    $ mkdir /path/to/new_repo
    $ cd /path/to/new_repo
    $ git --bare init

    注意:确保可以从现有存储库访问新存储库。有很多方法可以做到这一点;我们假设您已通过ssh://my_host/new_repo访问它。

  2. 从现有存储库中推送分支。例如,假设我们要从现有存储库中推送分支topic1,并在新存储库中将其命名为master

    $ cd /path/to/existing_repo
    $ git push ssh://my_host/new_repo +topic1:master
  3. 此技术允许您保留现有分支的历史记录。

    注意:新存储库实际上是一个新的远程存储库。如果要使用新存储库,则必须克隆它。以下内容将新repo克隆到名为new_repo的本地工作目录中:

    $ git clone ssh://my_host/new_repo
    

    在此示例中,当您克隆新存储库时,您将看到master分支是旧存储库的topic1分支的副本。

答案 1 :(得分:17)

如果您不担心丢失历史记录,请执行git checkout mybranch,然后将目录内容复制到另一个文件夹。在该文件夹中,删除.git文件夹,然后:

git init; git commit -a -m "Imported from project Y"

答案 2 :(得分:17)

像平常一样下拉分支,然后将分支推送到您使用git init创建的新存储库。您将使用类似于以下内容的代码:

git push url:///new/repo.git TheBranchFolder

此方法还会保留您之前的所有更改,如果这是对情况的加分。