¿Cómo puedo agregar un file a mi .gitignore sin borrarlo?

Tengo un file de configuration en mi proyecto que es específico del server, por lo que no desea ser incluido en Git ya que cada vez que lo implementamos sobrescribe la configuration del server. Para resolver este problema, el file se eliminó de Git … buena idea, pero ahora, cada vez que se implementa el proyecto, se elimina el file de configuration de los serveres.

Así que ahora estoy atascado con un problema. Lo que realmente quería era que el file estuviera en .gitignore y nunca se agregó al proyecto, pero una vez que se agregó, no veo una manera de eliminarlo del proyecto sin que se active una eliminación en el file existente con cada implementación. .

¿Hay alguna forma de que pueda eliminar un file de un proyecto sin eliminarlo? ¿Efectivamente ignorando retrospectivamente un file que ya fue agregado?

Use git log --oneline para imprimir una list de loggings de confirmación y active una git reset 'head' para dejar de grabar los files. Luego puede aplicar la plantilla .gitignore correcta antes de confirmar el file. Si aún no ha confirmado los files, puede usar git rm –cached para dejar de grabar los files. Puede encontrar una colección de templates gitignore en esta página de github https://github.com/github/gitignore

La diferencia entre "el file nunca se registró y se ignora" y "el file se registró pero se rm-ed y desde entonces se ha ignorado" es menor de lo que se infiere. Si nunca ha agregado el file y lo ha colocado .gitignore hubiera funcionado como se esperaba, y luego de haber eliminado el file, puede colocarlo en .gitignore y, después de posiblemente una ronda de dificultad, debería comenzar a funcionar.

(Ese sería el caso, por ejemplo, si usa git pull para actualizar el server. La extracción de la confirmación que eliminó el file podría eliminar el file, aunque debería aparecer como un conflicto. Sin embargo, las siguientes ejecuciones ignorarían el file. , especialmente si ya lo ha agregado a .gitignore. Pero estoy divagando, y he cubierto mi confusión aquí en los comentarios …)

Así que la pregunta era cómo eliminar un file del historial como si nunca se hubiera agregado, y aunque dudo que lo ayude, así es como puedes hacerlo:

Tienes que "reescribir" la confirmación (o confirmaciones) que introdujo el file, así como cualquier confirmación que se haya derivado de dicha confirmación. Si se trata de un repository compartido, luego de la reescritura, todos tendrán que hacer la transición a la reescritura, lo que se logra más fácilmente haciendo que todos descarten su repository actual y vuelvan a clonar. Esto significa que debe coordinar una window de "no cambio"; si alguien realiza un cambio después del corte al comienzo de esa window, deberá volver a basarse en el tree reescrito.

Ahora bien, si el file se agregó recientemente y no existe mucho historial después de la confirmación que lo introdujo, este podría ser un process relativamente simple e incluso puede tomar algunos accesos directos. Pero la solución general es usar git filter-branch o BFG Repository Cleaner.

De los dos, BFG es más fácil y más rápido (ya que esta es una de las tareas para las que está específicamente diseñado). Su autor cree que el único procedimiento seguro es eliminar manualmente el file de las confirmaciones actuales, probar que todo en la confirmación actual funciona como se espera, y luego usar BFG para limpiar el historial. Creo que esto es demasiado pedante y le he explicado por qué, pero él persiste; por lo que tendrías que conformarte.

Si opta por usar filter-branch , debería usar un filter de índice; es uno de los ejemplos de stock en la documentation del filter git, así que simplemente lo busco allí.

La manera fácil y segura de abordar esto es agregar los files que desea excluir a .gitignore .

Si el file ya está siendo rastreado (previamente agregado y confirmado), también deberá eliminarlo del repository. Esto se puede hacer sin eliminar el file local que desea conservar diciéndole a git que solo elimine la versión rastreada.

git rm --cached <file> es el command que hará esto. Cuando compromete ese cambio junto con la actualización de .gitignore , el repository detendrá el rastreo y comenzará a ignorar ese file.

Puede especificar los files innecesarios en el file .gitignore . Para que Git ignore cualquier cambio en los files especificados.

Si no tiene el file .gitignore , simplemente puede crearlo y escribir el nombre del file que desea ignorar. Tenga en count que deberá enviar el file .gitignore una vez que lo haya agregado al repository. Esto indicará que Git ignorará los files especificados dentro del file .gitignore .

En palabras cortas y simples. Usted crea un file llamado .gitignore en su repository en funcionamiento y enumera el nombre o patrón del file para que coincida, por ejemplo, si queremos ignorar todos los files .sql . En .gitignore lo siguiente:

 *.sql 

Si queremos ignorar solo un file, digamos lib/util.php . Entonces el .gitignore se verá así:

 lib/util.php 

Puede especificar múltiples nombres de file en .gitignore como lo desee.

documentation de gitignore

Tenga en count que esto funcionará solo en caso de que el file nunca haya sido rastreado en el repository, como lo indicaron @Mark Adelsberger y @torek correctamente.