我正在使用git-subtree(https://github.com/apenwarr/git-subtree)来管理我项目中的供应商回购。
前段时间我重新设计了我的项目布局,其中一部分涉及删除一些供应商代码并使用git-subtree从供应商仓库的新副本中读取它。供应商仓库的新副本是相同的代码,但因为我从头开始重新创建它没有共同的提交。
以下是相关提交(从下到上阅读):
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 subree 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匹配我给定的前缀,但是不再提交任何提交而且我无法获取它,因为该repo不再存在。
有关如何解决此问题的任何建议?我现在可以看到两个选项: 1.在新目录下重新添加(原则上我不想这样做)。 2.手动擦除上一次提交中导致破坏的子树数据(不建议一般这样做,但我认为在这种情况下我可以侥幸使用它,因为这个repo没有很多其他副本)