Ответ 1
Я просто столкнулся с этой проблемой и смог решить:
git remote add shared $url
git fetch shared
git subtree push -P $prefix shared $branch
Возможно, это не поможет всем, кроме как спасти меня от необходимости взломать структуры репо.
Это вопрос о нобе, но я под ружьем разрешаю это. Я унаследовал странную проблему с поддеревом git, который, по-видимому, является повреждением репо.
Здесь сценарий: в проекте B используется поддерево проекта git на основе A. Часть использования развертывания script выталкивает поддерево для репо проекта B:
git поддерево push -P под/путь/имя --squash git @github.com: MyCo/project_b.git projectb_branch
он начинает толкать коммиты и терпит неудачу с помощью
"fatal: bad object {sha}"
Я искал SHA в журнале репо git. Он отображается в фиксации:
git-subtree-dir: app/assets/ui
git-subtree-split: {sha}
Целевое репо (project_b) действительно имеет фиксацию с этим SHA, но исходное репо не делает. Я прошел через оболочку поддерева script Я вижу, что он не работает, когда пытается найти этот объект с журналом git (в функции toptree_for_commit, вызывающей git log -l --pretty = format: '% T' {ша}).
На данный момент я нахожусь на моей голове, но хочу попытаться найти решение. Я изучил это, насколько позволяют мои ограниченные знания, поэтому я приветствую любые советы, трюки или RTFM, которые могут помочь мне немного ближе к решению.
моя искренняя благодарность!
Я просто столкнулся с этой проблемой и смог решить:
git remote add shared $url
git fetch shared
git subtree push -P $prefix shared $branch
Возможно, это не поможет всем, кроме как спасти меня от необходимости взломать структуры репо.
Я понял это; Я нашел ссылку errant sha в информации о фиксации.
Самый простой способ исправить это:
Вид беспорядочного, но гораздо менее склонного к ошибкам, чем отступ, обязывает к проблемному фиксации, а затем повторно применяет их (предлагается в ответ на несколько схожий вопрос).
Не красиво, но он выполнил свою работу.
Я столкнулся с подобной проблемой: git subtree push ...
использовался для работы на компьютере, где я сделал git subtree add ...
, но не работал на втором компьютере:
$ git subtree push --prefix lib [email protected]:lib/lib.git master
...
...
fatal: bad object {sha}
Исправлено - сначала перенести изменения из репозитория (хотя изменений не было):
git subtree pull --prefix lib [email protected]:lib/lib.git master
и даже если он ничего не вытащил, толчок работал отлично:
git subtree push --prefix lib [email protected]:lib/lib.git master
git pull
работал у меня. Если ваша текущая ветка не является удаленной, сделайте ее удаленной веткой, используя
`git push -u origin <branchname>`