2011-11-17 5 views
9

Je sépare un repo git en 3. J'ai utilisé Detach (move) subdirectory into separate Git repository pour séparer le dossier et les ai poussés avec succès vers de nouveaux dépôts git. Sur le existant repo, j'ai utilisé la commande suivante pour effacer les répertoires déplacés.git push après git filter-branch rejeté

git filter-branch -f --index-filter "git rm -q -r -f --cached --ignore-unmatch lib/xxx/$REPO" --prune-empty HEAD 

Maintenant, quand je fais git st sur le repo d'origine, je reçois:

# On branch 1.5.0 
nothing to commit (working directory clean) 

Quand j'essaie de git push, je reçois:

! [rejected]  1.5.0 -> 1.5.0 (non-fast-forward) 
error: failed to push some refs to '[email protected]:/xxx/.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

Je pense à utiliser -f : git push -f origin <branch> mais je souhaite m'assurer que cela va modifier mon repo existant.

Répondre

8

Votre utilisation de la branche de filtrage a rendu votre référentiel différent de la télécommande. Alors que vous observez, la télécommande rejette votre poussée avec un avertissement à ce sujet. Dans ce cas, vous avez l'intention de modifier de force le référentiel pour qu'il corresponde à votre version filtrée afin que vous puissiez aller de l'avant et pousser avec le drapeau de force. Vous ne devriez pas changer les dépôts publiés comme ceci - mais vous pouvez si vous voulez. Gardez à l'esprit toute personne qui a un clone a besoin de notifier - mais s'il n'y en a pas d'autres - alors allez-y.

Si vous voulez être vraiment prudent - faites un autre clone de l'original maintenant. Alors faites votre poussée. Si quelque chose finit mal - car vous pouvez toujours le forcer en utilisant push --mirror depuis le dépôt de sauvegarde.