我正在使用 git-subtree (https://github.com/apenwarr/git-subtree) 来管理我项目中的供应商存储库。
不久前,我重新设计了项目的布局,其中一部分涉及删除一些供应商代码并使用 git-subtree 从供应商 repo 的新副本中读取它。供应商 repo 的新副本是相同的代码,但是因为我从头开始重新创建它,所以没有常见的提交。
以下是相关的提交(从下到上阅读):
commit df47ba0d6437737473aba206fdc9f2b902fbb073
Merge: 4bc6a27 80b6bb7
Author: User <user@user.com>
Date: Fri Dec 2 01:48:30 2011 -0500
Merge commit '80b6bb7ae01fdda2fe7e0c545004136724cbf059' as 'External/Libraries/stlsoft'
commit 80b6bb7ae01fdda2fe7e0c545004136724cbf059
Author: User <user@user.com>
Date: Fri Dec 2 01:48:30 2011 -0500
Squashed 'External/Libraries/stlsoft/' content from commit 03149e3
git-subtree-dir: External/Libraries/stlsoft
git-subtree-split: 03149e3a4c3289b5a88fc3f7ae17fb11c44c4d68
# Repo containing 6324cb1724fcdf87294b2e4f438dedf5920a3156 is deleted, External/Libraries/stlsoft
# is deleted and re-'git subtree add'ed from a new repo in the commits above.
commit e235b6c46d10b83c56d5c9f70d2b00df1137fbb3
Merge: 98ee319 79b7a31
Author: User <user@user.com>
Date: Mon Apr 11 16:09:54 2011 -0400
Merge commit '79b7a31fe4bc2d5beaca64cd6be0be4d0c971e4a' as 'External/Libraries/stlsoft'
commit 79b7a31fe4bc2d5beaca64cd6be0be4d0c971e4a
Author: User <user@user.com>
Date: Mon Apr 11 16:09:54 2011 -0400
Squashed 'External/Libraries/stlsoft/' content from commit 6324cb1
git-subtree-dir: External/Libraries/stlsoft
git-subtree-split: 6324cb1724fcdf87294b2e4f438dedf5920a3156
现在,如果我尝试将“git subtree push”返回到供应商存储库(包含 03149e3a4c3289b5a88fc3f7ae17fb11c44c4d68 的“新”存储库),我会收到以下错误:
$ git subtree push -P "External/Libraries/stlsoft/" /f/vendor/stlsoft mod2
git push using: f:/vendor/stlsoft mod2
fatal: bad object 6324cb1724fcdf87294b2e4f438dedf5920a3156
Couldn't push, 'git subtree split' failed.
因为 git-subtree-dir 与我给定的前缀匹配,但不再有任何提交 6324cb1724fcdf87294b2e4f438ddf5920a3156 并且我无法获取它,因为该 repo 不再存在。
关于如何解决这个问题的任何建议?我现在可以看到两个选项: 1. 在新目录下重新添加(原则上我真的不想这样做)。2. 手动删除导致损坏的先前提交中的子树数据(一般不建议这样做,但我认为在这种情况下我可以摆脱它,因为这个 repo 的其他副本并不多) .