请注意,使用--depth=1
parameter可以防止您将项目推送到新的存储库。
Answers:
你可以做一个
git clone <git_url>
从文件夹中删除.git存储库。这将删除您的所有历史记录。
你可以做一个
git init
这将为您创建一个全新的git项目。
这可能不是最好的方法。但这会起作用。希望能帮助到你。
只要您认为完全没有历史记录就没问题,Ajay建议的方法就完全正确。但是,如果您想保留浅表克隆的历史记录,我有不同的建议。
浅表克隆通过使用所谓的嫁接点伪造“第一次”提交的父级来假装具有完整的历史记录。如果假设我们拥有完整的历史记录,则可以改写以下问题:在特定的修订版本之前,如何丢弃历史记录?
这意味着我们可以结合使用嫁接点和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
文件。
完成此操作后,您应该可以将当前未移植的历史记录推送到新的遥控器中。
git rev-parse --verify master >> .git/info/grafts
,我首先签出了新的嫁接点,然后使用了提交引用:git rev-parse --verify 9133eece0 >> .git/info/grafts
。然后我做了git filter-branch -- --all
。我不需要删除.git/shallow
文件,因为它已经消失了。我不太了解如何删除“中的“备份”引用refs/original
,我猜这就是为什么嫁接的仓库仍然是68M的原因。但是,在推送到新的上游仓库之后,我又在本地重新克隆了,结果是一个112,000克隆,这正是我所期望的
rm -rf .git/refs/original
。;)
git update-ref -d refs/original/master
(实际上我通常是git push . :refs/blah
因为我曾经不知道update-ref)。有关更详尽的解释,请参见“如何删除旧历史记录”的答案。
尝试这样的事情:
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
我刚才在此存储库中尝试过。似乎可以正常工作-没有历史记录,所有子模块均完好无损。
depth
参数总是会使克隆变浅,而这正是OP所要的,我的用例也是如此。filter-branch
正如Zeeker所说,正确的答案是必需的。
--depth=N
而不是1呢?“浅层更新”仍然被拒绝,只是这样做rm -r .git
而git init
不会削减它。我将尝试整个“非嫁接”魔术,并且如果它适用于一般情况(深度N),则应为已接受(也是最受推崇的;))答案。