Подтвердить что ты не робот

Ошибка "Fatal: bad object" с использованием git поддерева push

Это вопрос о нобе, но я под ружьем разрешаю это. Я унаследовал странную проблему с поддеревом 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, которые могут помочь мне немного ближе к решению.

моя искренняя благодарность!

4b9b3361

Ответ 1

Я просто столкнулся с этой проблемой и смог решить:

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

Возможно, это не поможет всем, кроме как спасти меня от необходимости взломать структуры репо.

Ответ 2

Я понял это; Я нашел ссылку errant sha в информации о фиксации.

Самый простой способ исправить это:

  • прекратите использование разделенного поддерева, которое было создано,
  • переместите содержимое в другой подкаталог, а затем
  • resplit поддерево.

Вид беспорядочного, но гораздо менее склонного к ошибкам, чем отступ, обязывает к проблемному фиксации, а затем повторно применяет их (предлагается в ответ на несколько схожий вопрос).

Не красиво, но он выполнил свою работу.

Ответ 3

Я столкнулся с подобной проблемой: 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

Ответ 4

git pull работал у меня. Если ваша текущая ветка не является удаленной, сделайте ее удаленной веткой, используя

`git push -u origin <branchname>`