tortoise revertir repositorio eliminar crear cambios archivos svn

revertir - ¿Cómo descartar cambios locales en un checkout de SVN?



svn eliminar archivos del repositorio (8)

Quería enviar un diff para revisión, para un proyecto de código abierto.

Obtuve el código usando SVN (desde la terminal, Ubuntu). E hice ediciones menores en algunos archivos. Ahora solo hay un cambio único que deseo enviar. El resto de los cambios que hice, fueron para la depuración y ya no son necesarios.

He generado diff usando svn di > ~/os/firstdiff.diff

Entonces mi pregunta, ¿cómo descartar mis cambios locales?

¿Hay alguna forma de SVN para hacerlo? De lo contrario, tendré que ir a cada archivo y borrar todas mis ediciones. Entonces generaría una nueva diferencia y la enviaría.


Necesitará revertir todos los cambios usando el comando svn revert :

  • Revertir cambios a un archivo: svn revert foo.c
  • Revertir todo un directorio de archivos: svn revert --recursive .

Para descartar cambios locales en un archivo en particular:

$ svn revert example_directory/example_file.txt

Para descartar cambios locales en una carpeta en particular:

$ svn revert -R example_directory/


Podrías usar

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

Cuando publique su diff, no olvide indicar la revisión contra la cual está difiriendo.

Como otros respondieron, también puedes usar svn revert cuidadosamente. Depende si desea mantener sus cambios locales para su futuro trabajo o no ...


Puede usar el comando de confirmación en el archivo que desea colocar y usar el comando svn revert para descartar los cambios locales restantes


Simple svn revert fue suficiente para el póster original. Sin embargo, un simple svn revert no funcionará en el caso más general donde

  1. tener ambas ediciones que desea compartir y editar que no desea compartir en el mismo archivo ,
  2. tenga cambios locales que aún esté interesado en mantener para su propio beneficio privado .

La sugerencia de @ ErichBSchulz de usar git add -p es muy razonable y mucho más aplicable en general en tal caso. La respuesta carecía de algunos detalles. Suponiendo que su directorio actual es el directorio que desea convertir en el parche que se puede compartir, puede hacer algo como esto:

  1. Verifique la versión prístina de la subversión a un directorio diferente (elija un nombre de directorio que no exista, aquí usando el subdirectorio TMP/ ).

    $ url=$(svn info . | awk ''/^URL/ {print $2}'') $ svn checkout "$url" TMP

  2. Usando ese prístino check-out de svn como base, inicie un repositorio git, ignorando los directorios .svn; cometer todo en svn head a tu repositorio git temporal

    $ cd TMP $ git init && echo ".svn/" > .gitignore $ git add -A && git commit $ cd ..

  3. Copie los metadatos del repositorio git recién preparados en su directorio de trabajo original; como el directorio de comprobación de subversión no es necesario, puede deshacerse de él. Su directorio de trabajo ahora es tanto repositorio git como subversion:

    $ mv TMP/.git . $ rm -rf TMP/

  4. Ahora puede usar git add -p potente y conveniente git add -p para elegir de forma interactiva exactamente lo que desea compartir y enviarlos a su repositorio de git. Si necesita agregar archivos a la confirmación, también git add <file-to-add> antes de que 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. Usando el compromiso, prepare un parche que quiera compartir. Para este propósito, también puede usar git diff HEAD^..HEAD , o git format-patch (este último se puede usar para preparar directamente los correos electrónicos que se enviarán con el parche o parches múltiples):

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

Para deshacerse de metadatos de git, simplemente haz rm -rf .git/ . Si planea continuar pirateando con el directorio de trabajo original, puede continuar usando git para administrar sus cambios locales. En este caso, probablemente se beneficiaría de la inversión de aprender a usar git svn .

Nota: Si está familiarizado con git esto es bastante trivial para improvisar. De lo contrario, esto parece un poco complicado. Podría generalizar el enfoque escribiendo un guión fuera de estos pasos para implementar un "compromiso interactivo" o "creación de parche interactivo" para svn que podría usarse sin ningún conocimiento de git.


Simplemente use el comando svn revert , por ejemplo:

svn revert some_file.php

Es (como cualquier otro comando svn) bien documentado en la página man o en el recurso svnbook , o incluso con el comando svn help .


Use Git!

git add -p

le brinda una oportunidad interactiva para seleccionar cambios para comprometerse.


Vaya a la raíz de ese repositorio y ejecute el siguiente comando

svn revert --depth=infinity .