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.
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
_.
Vous devez annuler toutes les modifications à l'aide de la commande svn revert :
svn revert foo.c
svn revert --recursive .
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/
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
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:
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
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 ..
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/
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
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.
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 ...
Accédez à la racine de ce référentiel et exécutez la commande suivante
svn revert --depth=infinity .
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.