338 votes

Temporairement mis à l'écart uncommited changements dans la Subversion (la "git-stash")

Alors que le logiciel de programmation stockées dans une Subversion repo, j'ai souvent modifier certains fichiers, l'avis que j'aimerais faire quelques préparatoire changement pour mon travail principal. E. g. alors que la mise en œuvre de nouvelles fonctionnalités, je constate que certains refactoring qui pourrait m'aider.

Afin de ne pas mélanger les deux modifications sans rapport, dans ces cas, je voudrais à "ranger" mes modifications, c'est à dire revenir à la version du dépôt, de faire quelques changements, les auteurs de ces, puis "extraire retour" mes modifications.

git-stash permet de faire exactement cela. Est-il possible de faire cela avec Subversion, que ce soit directement ou avec un plugin ou un script. Des plugins Eclipse serait aussi bien.

371voto

Walter Mundt Points 9160

Ce blog conseille d'utiliser diff et patch.

  • git stash environ devient svn diff > patch_name.patch; svn revert -R .
  • git stash apply devient patch -p0 < patch_name.patch

Notez que ce n'est pas la planque de modifications de métadonnées ou (je pense) répertoire crée ou supprime. (Oui, svn pistes séparément du contenu d'un répertoire, à la différence de git.)

207voto

knittl Points 64110

vous pouvez stocker vos modifications en cours avec la commande svn diff dans un fichier de patch, puis revenir votre copie de travail:

svn diff > stash.patch
svn revert -R .

après que vous avez mis en œuvre votre préparatoire fonctionnalité, vous pouvez ensuite appliquer votre patch avec le patch de l'utilitaire:

patch < stash.patch

comme d'autres l'ont noté, cela ne fonctionnera pas avec svn:propriétés et des arbres de l'exploitation (ajouter, supprimer, renommer des fichiers et des répertoires).

les fichiers binaires pourrait également donner des problèmes, je ne sais pas comment patch (ou tortoisesvn dans ce cas, les poignées)

70voto

bendin Points 6651

quand j'en ai les modifications non validées à partir d'une tâche dans ma copie de travail et j'ai besoin de passer à une autre tâche, je fais deux choses:

Découvrez une nouvelle copie de travail pour la seconde tâche.

ou

Démarrer une branche:

workingcopy$ svn copy CURRENT_URL_OF_WORKING_COPY SOME_BRANCH
workingcopy$ svn switch SOME_BRANCH
workingcopy$ svn commit -m "work in progress"
workingcoyp$ svn switch WHATEVER_I_WAS_WORKING_ON_BEFORE

J'ai quelques scripts qui aident à automatiser cela.

44voto

JesperE Points 34356

Le plus simple serait d'utiliser un temporaire de la branche, comme ceci:

$ svn copy ^/trunk ^/branches/tempbranch
$ svn switch ^/branches/tempbranch
$ svn commit -m "Stashed"
$ svn switch ^/trunk
$ ... hack away in trunk ...
$ svn commit -m "..."
$ svn merge ^/branches/tempbranch .
$ svn rm ^/branches/tempbranch
$ ... continue hacking

Cela pourrait (et devrait) être mis dans un script si elle se fait sur une base plus régulière.

9voto

Walter Mundt Points 9160

Je ne connais pas de moyen facile de le faire avec juste svn. Honnêtement, je conseille d'utiliser git-svn faire un repo git qui agit comme un svn copie de travail, et seulement à l'aide de git stash . Il suffit de remplacer git pull avec git svn rebase et git push avec git svn dcommit et vous pouvez effectivement garder 90% de votre workflow git et toujours parler à un serveur svn.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X