使用git子树推送"致命:坏对象"错误

Kod*_*key 13 git subtree

这是一个noob问题,但我正在解决这个问题.我继承了一个奇怪的问题,一个git子树似乎是repo腐败.

这是场景:项目B中正在使用基于git的项目A的子树.部署部署脚本用于将子树推送到项目B的回购:

git subree push -P sub/path/name --squash git@github.com:MyCo/project_b.git projectb_branch

它开始推动提交并失败

"fatal: bad object {sha}" 
Run Code Online (Sandbox Code Playgroud)

我在源代码的git日志中搜索了SHA.它出现在提交中:

git-subtree-dir: app/assets/ui
git-subtree-split: {sha}
Run Code Online (Sandbox Code Playgroud)

目标repo(project_b)确实具有该SHA的提交但源repo没有.我浏览了子树shell脚本,我可以看到它在尝试使用git log查找该对象时失败(在toptree_for_commit函数中调用git log -l --pretty = format:'%T'{sha}).

在这一点上,我在我的头脑中,但渴望寻找解决方案.在我的有限知识允许的情况下,我对此进行了研究,所以我欢迎任何可以让我更接近解决方案的提示,技巧或RTFM.

衷心的感谢!

Kev*_*ker 23

我刚遇到这个问题并且能够通过以下方式解决:

git remote add shared $url
git fetch shared
git subtree push -P $prefix shared $branch
Run Code Online (Sandbox Code Playgroud)

可能对所有人都没有帮助,但却让我不必破解回购结构.

  • 只是为了澄清,对于像我这样的新手$ url,$ prefix和$ branch需要用你自己的正确url,前缀和分支填充. (3认同)

Kod*_*key 3

我已经想通了;我在提交信息中找到了错误sha的引用。

解决这个问题最简单的方法是:

  • 停止使用已创建的子树分割,
  • 将内容移动到不同的子目录,然后
  • 重新分割子树。

有点混乱,但比取消对有问题的提交的提交然后重新应用它们(在对有点类似的问题的回答中建议)更不容易出错。

不漂亮,但它完成了工作。