Nous utilisons un déploiement de sous-arborescence a lá this Gist pour déployer un sous-répertoire de notre projet Yeoman . Dans notre cas, la branche est appelée production , pas gh-pages .
Cela a fonctionné parfaitement jusqu'à hier lorsque le serveur Git a rejeté la commande git subtree Push --prefix dist Origin production
, en disant
! [rejected] 9fe1683aa574eae33ee6754aad702488e0bd37df -> production (non-fast-forward)
error: failed to Push some refs to '[email protected]:web-and-new-media/graduation2015.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart.
Si je passe à la branche de production localement (qui est propre), git pull
Retour Your branch is up-to-date with 'Origin/production'.
même si j'utilise le --rebase
option.
Je peux voir le contenu de la branche de production sur le serveur via notre interface utilisateur Web et il n'y a rien là qui ne devrait pas être, juste la sortie compilée de notre répertoire dist
comme je m'y attendais.
À cette fin, il semble que je devrais pouvoir en toute sécurité forcer l'écrasement de ces fichiers, mais comment? git subtree Push
n'a pas de --force
option.
L'astuce consistait à enchaîner le sous-arbre divisé en une poussée forcée:
git Push Origin `git subtree split --prefix dist master`:production --force
Je l'ai obtenu de l'addendum de http://clontz.org/blog/2014/05/08/git-subtree-Push-for-deployment/ , qui fait référence à this réponse sur Stack Overflow. J'avais effleuré celui-ci plus tôt mais le post de Steve Clontz l'a fait cliquer pour moi.
Il existe en fait une solution beaucoup plus simple.
Source: https://Gist.github.com/cobyism/4730490#gistcomment-233746
$ 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 ..