不保留历史记录地克隆git仓库?

61

我想从Github克隆一个代码库。由于该库有很多历史记录,因此我希望在克隆时不要包含任何历史记录。

这是可能的吗?


7
可能是复制Git仓库但不带历史记录的重复问题。 - nwn
3个回答

89

您可以使用值为1的--depth选项来获取浅克隆。

git clone --depth 1 reponame.git

如果您需要更多的提交历史记录,请根据需要增加数值。


4
无法正常工作,当您想要将其镜像到另一个仓库时,仍然会获取历史记录。 - PositiveGuy
对于子模块的浅克隆,您还应传递 --shallow-submodules。来源:https://git-scm.com/docs/git-clone - S. Doe

22
在克隆之后,您可以删除.git目录,然后重新初始化git以生成一个全新的repo。
$ git clone ...
$ cd path/to/repo
$ rm -rf .git
$ git init

1
事实上,这是唯一且完美的回答。没有历史记录是无法克隆的,但您可以在之后擦除历史记录并重新开始。谢谢 :) - viery365
这样做是行不通的,因为您删除了数据库后就无法将其镜像到新的存储库,因为它会失去引用并且无法连接,因此镜像失败。 - PositiveGuy
1
@PositiveGuy 抱歉,你的意思是什么?也许让我更清楚一些:在通过 $ rm -rf .git 删除历史记录后,命令 $ git init 将创建一个全新的纯存储库历史记录,没有旧的遗留问题,这就是 OP 所期望的。但是,如果您希望在删除历史记录后向源存储库发送 PR,则这不是正确的工作流程,因为 git 的 PR 基于历史记录(没有历史记录,PR 将具有混乱的冲突),即,如果您想要发送 PR,则需要保持存储库与原来一样。希望能帮到你。 :) - Kjuly
1
@viery365:这将需要一些时间来下载整个历史记录,而这正是OP想要避免的。 - Dan Dascalescu
1
@DanDascalescu 没错,如果考虑拉取时间成本,被接受的答案会更好。 - Kjuly
@PositiveGuy 镜像的作用与所要求的不同。根据定义(设置远程仓库的镜像),镜像要求包括历史记录。它应该是被复制的仓库的精确副本,并且当远程仓库进行更新时,所有引用都会再次从源头拉取,覆盖远程引用。操作者只是简单地询问如何克隆没有历史记录的git。使用--mirror选项无法实现这一点。使用镜像的一个例子是如果您想在多个位置备份您的repo。 - DubStep

17

使用git clone命令时,可以使用--depth选项:

--depth <depth> 创建一个浅克隆,历史记录将被截断到指定的修订版本数量。

用法:git clone --depth 1 <remote_repo_url>

如果您希望将浅克隆转换为完整克隆,则可以使用以下命令取消浅克隆:

git fetch --unshallow


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接