web-dev-qa-db-fra.com

Comment ignorer les modifications locales dans une caisse SVN?

Je voulais soumettre un diff pour examen, pour un projet Open Source.

J'ai eu le code en utilisant SVN (du terminal, Ubuntu). Et j'ai fait des modifications mineures dans quelques fichiers. Maintenant, il n'y a plus qu'un seul changement à soumettre. Le reste des modifications que j'ai apportées étaient destinées au débogage et ne sont plus nécessaires.

J'ai généré diff en utilisant svn di > ~/os/firstdiff.diff

Alors ma question, comment se débarrasser de mes modifications locales?

Existe-t-il un moyen SVN de le faire? Sinon, je devrai aller dans chaque fichier et supprimer toutes mes modifications. Ensuite, je générerais un nouveau diff et le soumettrais.

178
Vinayak Garg

Utilisez simplement la commande svn revert , par exemple:

_svn revert some_file.php
_

Comme toutes les autres commandes svn, il est bien documenté dans la page svnbook resource ou man, ou même avec la commande _svn help_.

229
Cédric Julien

Vous devez annuler toutes les modifications à l'aide de la commande svn revert :

  • Rétablir les modifications dans un fichier: svn revert foo.c
  • Revenir à un répertoire complet de fichiers: svn revert --recursive .
177
Alberto Spelta

Pour ignorer les modifications locales dans un fichier particulier:

$ svn revert example_directory/example_file.txt

Pour ignorer les modifications locales dans un dossier particulier:

$ svn revert -R example_directory/
15
batigolix

Simple svn revert suffisait pour l'affiche originale. Cependant, un simple svn revert ne fera pas dans le cas plus général où vous

  1. avoir les deux modifications que vous souhaitez partager et les modifications que vous ne souhaitez pas partager dans le même fichier ,
  2. avoir des modifications locales que vous souhaitez toujours conserver pour votre bénéfice personnel .

La suggestion de @ ErichBSchulz d'utiliser git add -p est très raisonnable et beaucoup plus généralement applicable dans un tel cas. La réponse manquait simplement de quelques détails. En supposant que votre répertoire actuel soit le répertoire dans lequel vous souhaitez créer le correctif à partager, vous pouvez procéder de la manière suivante:

  1. Vérifier la version originale de Subversion vers un autre répertoire (choisissez un nom de répertoire qui n'existe pas, utilisez ici le sous-répertoire TMP/).

    $ url=$(svn info . | awk '/^URL/ {print $2}')
    $ svn checkout "$url" TMP
    
  2. En utilisant cette base vierge svn checkout comme base, initiez un référentiel git, en ignorant les répertoires .svn; commettez tout dans svn head dans votre dépôt git temporaire

    $ cd TMP                                                     
    $ git init && echo ".svn/" > .gitignore
    $ git add -A && git commit
    $ cd ..
    
  3. Copiez les métadonnées du référentiel git nouvellement préparées dans votre répertoire de travail d'origine. comme le répertoire de sortie immaculé de Subversion n’est pas nécessaire, vous pouvez vous en débarrasser. Votre répertoire de travail est maintenant les dépôts git et Subversion:

    $ mv TMP/.git .
    $ rm -rf TMP/
    
  4. Vous pouvez maintenant utiliser git add -p puissant et pratique pour choisir de manière interactive exactement ce que vous voulez partager et les valider dans votre référentiel git. Si vous devez ajouter des fichiers à la validation, faites aussi git add <file-to-add> avant git commit

    $ git add -p                            
    <interactively select (and edit) the chunks you want to share>
    $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
    $ git commit
    
  5. En utilisant le commit, préparez un patch que vous souhaitez partager. Pour cela, vous pouvez également utiliser git diff HEAD^..HEAD ou git format-patch (ce dernier peut être utilisé pour préparer directement des courriers électroniques à envoyer contenant le ou les correctifs multiples):

    $ git show -p HEAD > my-mighty-patch.patch
    

Pour vous débarrasser des métadonnées git, faites juste rm -rf .git/. Si vous envisagez de continuer à pirater le répertoire de travail d'origine, vous pouvez continuer à utiliser git pour gérer vos modifications locales. Dans ce cas, vous auriez probablement intérêt à investir dans l’apprentissage de l’utilisation de git svn.

Note: Si vous connaissez bien git c'est une chose assez triviale à improviser. Sinon, cela peut sembler un peu brouillon. Vous pouvez généraliser l'approche en écrivant un script en dehors de ces étapes pour implémenter un "commit interactif" ou une "création de patch interactive" pour svn qui pourrait être utilisé sans aucune compréhension de git.

7
FooF

Vous pourriez utiliser

 svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff

Lors de la publication de votre diff, n'oubliez pas d'indiquer la révision par rapport à laquelle vous différez.

Comme d'autres l'ont répondu, vous pouvez également utiliser svn revert avec précaution. Cela dépend si vous souhaitez conserver vos modifications locales pour votre travail futur ou non ...

4
Basile Starynkevitch

Accédez à la racine de ce référentiel et exécutez la commande suivante

svn revert --depth=infinity .
3
Bunty

Vous pouvez utiliser la commande commit sur le fichier que vous voulez placer et utiliser la commande svn revert pour ignorer les modifications locales restantes.

1
jlemos