Как заставить поддерево перезаписывать удаленные изменения?
мы используем развертывание поддерева lá в этом суть развернуть подкаталог нашего старшина. В нашем случае ветвь называется производства, а не gh-страницы.
это работало отлично до вчерашнего дня, когда сервер Git отклонил команду git subtree push --prefix dist origin production
, сказав
! [rejected] 9fe1683aa574eae33ee6754aad702488e0bd37df -> production (non-fast-forward)
error: failed to push some refs to 'git@gitlab.sdstate.edu:web-and-new-media/graduation2015.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart.
если я переключусь на производственную ветку локально (которая является чистой), git pull
возвращает Your branch is up-to-date with 'origin/production'.
даже если я использую --rebase
выбор.
Я вижу содержимое производственной ветви на сервере через наш веб-интерфейс, и там нет ничего, что не должно быть, просто скомпилированный вывод нашего как я ожидал.
С этой целью кажется, что я должен безопасно иметь возможность принудительно перезаписать эти файлы, но как? git subtree push
нет .
2 ответов
трюк состоял в том, чтобы связать поддерево, разделенное на принудительный толчок:
git push origin `git subtree split --prefix dist master`:production --force
Я получил это из добавления http://clontz.org/blog/2014/05/08/git-subtree-push-for-deployment/, кто на самом деле ссылается этой ответ на переполнение стека. Я просмотрел это раньше, но сообщение Стива Клонца заставило его щелкнуть для меня.
на самом деле есть решение, которое намного проще.
источник:https://gist.github.com/cobyism/4730490#gistcomment-2337463
настройка
$ rm -rf dist
$ echo "dist/" >> .gitignore
$ git worktree add dist gh-pages
изменения
$ make # or what ever you run to populate dist
$ cd dist
$ git add --all
$ git commit -m "$(git log '--format=format:%H' master -1)"
$ git push origin production --force
$ cd ..