我已经“浅化”了一个回购协议:
\n\nFIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"\ngit rev-parse ${FIRST_COMMIT} > .git/shallow\ngit fsck --unreachable\ngit gc --prune=now\nRun Code Online (Sandbox Code Playgroud)\n\n现在我尝试推动:
\n\n! [remote rejected] develop -> develop (shallow update not allowed)\nRun Code Online (Sandbox Code Playgroud)\n\n我知道这个限制是由于回购协议很浅造成的。
\n\n如何将浅层仓库转换为普通仓库?
\n\n我不在乎失去旧历史。其实我想丢掉旧历史
\n\n为了澄清这一点:
\n\n简单地删除该.git/shallow文件是行不通的:
\xc2\xbb git push -f --set-upstream myorigin develop\nerror: Could not read d18d4a247bebd32a3b57b2c0e5f9c28749083211\nfatal: revision walk setup failed\nerror: remote unpack failed: eof before pack header was fully read\nerror: failed to push some refs to \'git@somehost:repos/somerepo.git\'\nRun Code Online (Sandbox Code Playgroud)\n\n尝试浅化fetch:
git fetch --unshallow\nRun Code Online (Sandbox Code Playgroud)\n\n仍然留下一个grafted回购协议:
commit bf450342272a94117d78eae34a140a2a39359dad (grafted)\nAuthor: The author\nDate: Thu Nov 29 16:55:05 2018 +0100\n\n Chages by pre-commit hook (!?)\nRun Code Online (Sandbox Code Playgroud)\n
以下命令(git 版本 1.8.3)会将浅克隆转换为常规克隆:
git fetch --unshallow
Run Code Online (Sandbox Code Playgroud)
然后,访问 origin 上的所有分支(感谢评论中的@Peter)
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Run Code Online (Sandbox Code Playgroud)
已经有一个类似(相同?)的问题,有一个非常好的答案,也解决了我的问题。
基本上我需要执行以下操作:
git rev-parse --verify bf450342272a94117d78eae34a140a2a39359dad > .git/info/grafts
git filter-branch -f -- --all
Run Code Online (Sandbox Code Playgroud)
这将使用指定的提交重写历史记录作为新的根。提交元数据不会受到影响(日期、所有者等),只会影响提交哈希以及提交之间的链接,以便新图从指定的根开始。
然后,该存储库将是unshallowed/ ungrafted,并且可以正常推送到新的遥控器,并减少历史记录。