这是一个菜鸟问题,但我正在解决这个问题。我继承了一个奇怪的问题,即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。
衷心的感谢!
答案 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>`