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


77

我有一个远程git存储库,它确实替代了另一个旧SCM中的所有内容。这些年来,许多项目和产品已添加到资源库中。

此存储库中有一个分支,与我感兴趣的产品相对应。我只想从该分支中​​创建一个全新的git存储库,而不必担心丢失历史记录。

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

有什么想法吗?

Answers:


80

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

以下步骤说明了这一点:

  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

此技术使您可以保留现有分支的历史记录。

注意:新存储库实际上是新的远程存储库。如果要使用新的存储库,则必须对其进行克隆。下面将新仓库复制到本地工作目录new_repo

$ git clone ssh://my_host/new_repo

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


10
如果您将定期推送到远程仓库,这可能是一个不错的建议git remote add origin ssh://my_host/new_repo。这样,您就可以执行git push origin [branchname]。使用UNC文件路径时(例如,对于git remote add origin "//server_name/myapp/"
Windowsshares

新存储库可以作为本地目录/存储库访问吗?有没有更新方法可以做到这一点?
Nikos Alexandris

@NikosAlexandris我添加了新信息,希望对您有所帮助。还要注意,新的存储库在远程服务器上并不重要。在示例中,我们使用ssh协议进行推送和克隆;但是我们可以类似地使用该file协议,该协议将在同一文件系统上创建新的存储库。
佩斯特雷拉'18

22

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

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

如果对这种情况有利的话,此方法还会保留您以前的所有更改。


我正在使用ssh访问我的仓库,可以在响应中使用它代替URL吗?
reza 2012年

reza:是的,将ssh URL视为另一种URL。
amcnabb 2012年

所以在git服务器上,我已经发布了git push / home / git / newBranchGIT分支名称...。现在我看到的是一个git repo,它具有我所需的一切,但是唯一的分支现在称为branchname而不是origin或master。我希望分支名称为master。还是有更好的方法呢?
reza 2012年

只需更改名称即可,然后提交。
JustinDoesWork 2012年

21

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

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

2
这将保留原始回购的提交历史吗?
Mike Graf 2013年

18
@MikeGraf:不,正如答案第一句话的第一部分所指出:“如果您不担心失去历史……”
贾斯汀

2
您可能还必须删除/编辑.gitignore,否则上述命令在提交期间将留下潜在的重要文件。
戴夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.