Simple svn revert
fue suficiente para el póster original. Sin embargo, un simple svn revert
no servirá en el caso más general donde
- tiene las ediciones que desea compartir y las ediciones que no desea compartir en el mismo archivo ,
- tenga cambios locales que aún le interese conservar para su propio beneficio privado .
La sugerencia de @ ErichBSchulz de usar git add -p
es muy razonable y mucho más generalmente aplicable en tal caso. La respuesta simplemente carecía de algunos detalles. Suponiendo que su directorio actual es el directorio que desea hacer el parche que se puede compartir, podría hacer algo como esto:
Verifique la versión original de Subversion 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
Usando ese pago prístino de svn como base, inicie un repositorio git, ignorando los directorios .svn; compromete todo en svn head a su repositorio temporal de git
$ cd TMP
$ git init && echo ".svn/" > .gitignore
$ git add -A && git commit
$ cd ..
Copie los metadatos del repositorio git recién preparado en su directorio de trabajo original; como no se necesita el directorio prístino de subversión, puede deshacerse de él. Su directorio de trabajo ahora es el repositorio git y subversion:
$ mv TMP/.git .
$ rm -rf TMP/
Ahora puede usar de manera poderosa y conveniente git add -p
para elegir interactivamente exactamente lo que desea compartir y enviarlos a su repositorio git. Si necesita agregar archivos a la confirmación, hágalo también git add <file-to-add>
antesgit 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
Usando el commit, 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 los metadatos de git, solo hazlo rm -rf .git/
. Si planea continuar hackeando con el directorio de trabajo original, puede continuar usándolo 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 algo trivial improvisar. De lo contrario, esto puede parecer un poco desordenado. Puede generalizar el enfoque escribiendo una secuencia de comandos a partir de estos pasos para implementar una "confirmación interactiva" o una "creación interactiva de parches" para svn que podría usarse sin comprender Git.