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

时间:2015-04-20 12:41:01

标签: git git-clone shallow-clone

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

有关详细信息,请参阅:"Remote rejected" (shallow update not allowed) after changing Git remote URL

3 个答案:

答案 0 :(得分:44)

你可以做一个

git clone <git_url>

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

你可以做一个

git init 

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

这可能不是最好的方法。但这会奏效。希望它有所帮助。

答案 1 :(得分:19)

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


浅层克隆假装拥有完整的历史记录,使用所谓的graft point伪造“第一次”提交的父级。如果我们假设我们有完整的历史记录,我们可以重新解释这个问题:How can I throw away the history before a specific revision?

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

git remote remove <old-remote-name>

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

git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all

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

完成此操作后,您应该能够在新的遥控器中推送现在未播种的历史记录。

答案 2 :(得分:0)

尝试这样的事情:

mkdir -p /tmp/git-copy
cd /tmp/git-copy

# create another copy of your repository
git clone file:///path/to/cloned/repo

cd repo
git rebase -i (first-commit)

# in vim:
# :2,$s/^pick/squash
# :w

# Now wait, it will take a while...

git push --mirror git@github.com:username/new-repo.git

我刚刚在this repository上尝试过。似乎工作 - 没有历史记录,所有子模块都完整无缺。