如何在没有整个历史的情况下克隆种子/启动项目?

ita*_*mar 57 git git-clone shallow-clone

请注意,使用--depth=1参数会阻止您将项目推送到新的存储库.

有关详细信息,请参阅:更改Git远程URL后"远程拒绝"(不允许浅更新)

Aja*_*jay 50

你可以做一个

git clone <git_url>
Run Code Online (Sandbox Code Playgroud)

从您的文件夹中删除.git存储库.这将删除您的所有历史记录.

你可以做一个

git init 
Run Code Online (Sandbox Code Playgroud)

这将为您创建一个全新的git项目.

这可能不是最好的方法.但这会奏效.希望能帮助到你.

  • 它很可能会删除所有子模块. (5认同)
  • @Willa 如果我走这条路线,我还可以将上游项目中的更新合并到我的项目中吗? (3认同)

Sas*_*olf 22

只要你认为完全失去历史是没有问题的,Ajay建议的方法是完全有效的.但是如果你想保持浅层克隆的历史,我有一个不同的建议.


浅克隆假装通过使用所谓的移植点伪造"第一次"提交的父级来拥有完整的历史记录.如果我们假设我们有完整的历史记录,我们可以重新解释一个问题:如何在特定修订版之前丢弃历史记录?

这意味着我们可以使用移植点的组合git filter-branch(如链接问题中所示).但是,您必须注意,这将重写您的完整历史记录,使新的历史记录与我们最初克隆的远程数据库不兼容.因此,我们应该从我们的存储库中删除旧的远程.

git remote remove <old-remote-name>
Run Code Online (Sandbox Code Playgroud)

现在我们可以开始重写了.假设我们想让当前提交为存储库的新根.

git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all
Run Code Online (Sandbox Code Playgroud)

这将重写我们的存储库的完整历史记录,并将当前主提交作为新根.您可以通过删除"备份"引用来完成重写refs/original.此外,您现在可以删除该.git/shallow文件.

完成此操作后,您应该能够在新的遥控器中推送现在未经过移植的历史记录.

  • Git版本&gt; 1.9.0允许从浅表克隆中推送。如果要将完整的历史记录保留在服务器上,而只需要去年的历史记录用于另一台计算机,这将非常方便。唯一的是,我认为您需要在客户端和服务器上均具有git&gt; 1.9.0,才能利用此功能。 (2认同)
  • 参考可以以各种形式存在.删除引用的安全方法是例如`git update-ref -d refs/original/master`(实际上我通常是`git push.:refs/blah`因为我曾经不知道update-ref).有关更详细的说明,请参阅[如何删除旧历史记录的答案](http://stackoverflow.com/a/5985276/260122). (2认同)