Cómo "deshacer" la conversión de un file en svn y / o git

Me pasa todo el time. Accidentalmente versiono un file, no quiero ser versionado (es decir, files de configuration específicos del desarrollador / máquina).

Si confirmo este file, voy a desorderar las routes en todas las otras máquinas de desarrollo; no estarán contentos.

Si elimino el file del control de versiones, se eliminará de las otras máquinas de desarrollo; no estarán contentos.

Si elijo nunca comprometer el file, siempre tengo un pago "sucio"; no estoy contento.

¿Es una forma limpia de "desvertir" un file del control de revisión, que dará como resultado que nadie esté descontento?

editar: tratando de aclarar un poco: ya he enviado el file al repository y solo quiero eliminarlo del control de versiones: específicamente no quiero que se elimine físicamente de todos los que hacen el pago. Inicialmente quería que se ignorara.

Respuesta: Si pudiera aceptar una segunda respuesta, sería esta . Responde mi pregunta con respecto a git: la respuesta aceptada es sobre svn.

SVN versión 1.5 admite la eliminación / eliminación de un file de un repository sin perder el file local

tomado de http://subversion.tigris.org/svn_1.5_releasenotes.html

Nueva opción "keep-local" conserva la ruta después de eliminar ..

Eliminar (eliminar) ahora toma una opción –keep-local para mantener sus destinos localmente, por lo que las routes no se eliminarán, incluso si no se modifican.

En Git, para eliminarlo del tree, pero NO del directory de trabajo, que creo que es lo que quieres, puedes usar el indicador –cached, es decir:

git rm --cached <filename> 

Si accidentalmente 'agregas' un file en svn y no lo has comprometido, puedes revertir ese file y eliminará el agregado.

Sin haberlo probado …

En git, si tus cambios no han sido propagados a otro repository, deberías poder git rm los files afectados, git rebase --interactive para reorderar el compromiso de eliminación justo después del commit en el que accidentalmente has agregado los files ofensivos, y luego aplastar esos dos commits juntos.

Por supuesto, esto no ayudará si alguien más ha retirado sus cambios.

Parece que ya ha agregado y comprometido el file a la subversión (supongo que está utilizando Subversion). Si ese es el caso, solo hay dos forms de eliminar ese file:

  1. Marque el file como eliminado y confirme.
  2. Realice un svnadmin dump , filtre la revisión en la que accidentalmente confirmó el file y realice una svnadmin load .

Créanme, realmente no quieren hacer el número 2. Anulará todas las copys de trabajo del repository. Lo mejor es hacer el número 1, marcar el file como ignorado y disculparse.

Busque svn: ignore y .gitignore: estas características le permiten tener files adicionales en su pago que su RCS ignora (cuando realiza una operación de "estado" o lo que sea).

Para los files de configuration específicos de la máquina, una buena opción es verificar en un file nombrado con una extensión adicional ".sample", es decir. config.xml.sample . Los desarrolladores individuales harían una copy de este file en config.xml y lo modificarían para su sistema. Con svn: ignore o .gitignore, puede asegurarse de que el file config.xml no versionado no se muestre como sucio todo el time.

En respuesta a su edición: si elimina el file del repository ahora, sus desarrolladores tendrán un conflicto la próxima vez que realicen una actualización (suponiendo que todos hayan cambiado el file de su sistema). No perderán sus cambios locales, serán recuperables de alguna parte. Si no han realizado ningún cambio local, su file de configuration se desvanecerá, pero pueden volver a sacar el anterior del control de código fuente y usarlo.

Para eliminar un file completamente de un repository de git (supongamos que ha enviado un file con una contraseña o ha cometido accidentalmente files temporales)

 git filter-branch --index-filter 'git update-index --remove filename' HEAD 

Entonces creo que tienes que comprometer, y presionar -f si está en sucursales remotas (restring que podría molestar a las personas si comienzas a cambiar el historial del repository … y si ya se han desconectado de ti, aún podrían tener el file)

Para eliminar un file que ya está en control de fuente:

 git rm <filename> 

y entonces

 git commit -m ... 

Debe agregar todos los files que desee ignorar al file .gitignore. Además, siempre compruebo el file .gitignore en mi repository, por lo que si alguien revisa el código en su máquina y el file se genera nuevamente, no lo "verá" como "sucio".

Por supuesto, si ya comprometió el file y alguien más obtuvo sus cambios en otra máquina, tendría que modificar cada repository local para modificar el historial. Al less esa es una posible solución con git. No creo que svn te permita hacer eso.

Si el file ya está en el repository principal (git) o ​​en el server (svn), no creo que haya una solución mejor que simplemente borrar el file en otra confirmación.

Para SVN puedes revertir files que aún no has cometido. En TortoiseSVN, simplemente haga clic derecho en el file en la window de confirmación y select Revertir …

En la línea de command use svn revert [file]

No sé sobre GIT ya que nunca lo he usado.

Hasta donde sé, no hay una manera fácil de eliminar un file agregado del control de versiones en svn una vez que se haya confirmado.

Deberá save el file en otro lugar y eliminarlo del control de versión. Que copyr la copy de security de nuevo.

Es un sistema de control de versiones después de todo …;)

Puede excluir files de la subversión con la configuration de ignorar global
http://svnbook.networking-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1.3.2
echa un vistazo a la documentation para más detalles

He escogido nunca comprometer el file, siempre tengo un process de pago "sucio". No estoy contento.

Con respecto a este punto en particular, es posible que desee .gitignore el file como otros han sugerido, o utilizar un esquema como el que se describe en esta respuesta mía.

Dos pasos simples en SVN:
1. Agregue este directory en la propiedad svn: ignore del directory padre:

 svn propedit svn:ignore . 

2. Eliminar el directory:

 svn rm mydir 

3. Cometer

Tenga en count que cuando otros desarrolladores hacen una actualización de svn , ese directory no se eliminará. SVN simplemente lo invierte en su lugar.

Puede desinstalar todos los files en el directory actual con este command. El bit sed invierte el order para que svn pueda procesarlo:

 find . | sed '1!G;h;$!d'| awk '{print "svn rm --keep-local " $1}' 

Como ya se indicó en otras respuestas, el file único no se ha versionado con esto:

 svn rm --keep-local yourFileNameXXX 

En Windows, si lo que está buscando es copyr la carpeta a otra location y eliminarla de git, para que ya no vea los icons, simplemente elimine la carpeta .git. La carpeta .git está oculta, por lo que debe ir a la opción Organizar / Carpeta y Opciones de búsqueda, Mostrar files ocultos, debajo de su carpeta principal. Debería desversionarlo.