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

时间:2012-09-18 23:05:03

标签: git subtree

这是一个菜鸟问题,但我正在解决这个问题。我继承了一个奇怪的问题,即git子树出现是回购损坏。

这是场景:项目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}" 

我在源代码的git log中搜索了SHA。它出现在提交中:

git-subtree-dir: app/assets/ui
git-subtree-split: {sha}

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

此时我已经超越了我的脑袋但渴望找到解决方案。在我的有限知识允许的情况下,我对此进行了研究,所以我欢迎任何可以让我更接近解决方案的提示,技巧或RTFM。

衷心的感谢!

4 个答案:

答案 0 :(得分:23)

我刚遇到这个问题并且能够解决:

git remote add shared $url
git fetch shared
git subtree push -P $prefix shared $branch

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

答案 1 :(得分:4)

我遇到了类似的问题:git subtree push ...曾经在计算机上工作,我在git subtree add ...工作,但在第二台计算机上无法工作:

$ git subtree push --prefix lib git@github.com:lib/lib.git master
...
...
fatal: bad object {sha} 

修复是首先从存储库中提取更改(即使没有更改):

git subtree pull --prefix lib git@github.com:lib/lib.git master

即使它没有拉动任何东西,推动工作正常:

git subtree push --prefix lib git@github.com:lib/lib.git master

答案 2 :(得分:3)

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

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

  • 停止使用已创建的子树分割
  • 将内容移至其他子目录,然后
  • 重新分配了子树。

有点乱,但更不容易出错,比退出提交有问题的提交然后重新应用它们(建议回答一个类似的问题)。

不漂亮,但完成了工作。

答案 3 :(得分:0)

git pull为我工作。如果您当前的分支不是远程分支,请使用

将其设置为远程分支
`git push -u origin <branchname>`