usando gitignore para ignorar (pero no eliminar) files

Tengo un directory tmp en mi informe de git que me gustaría seguir existiendo, pero me ignorarán. Lo agregué a .gitignore , pero el git status todavía me dice acerca de los cambios a los files en ese directory. Intenté git rm -r --cached , pero eso lo quita del repository remoto. ¿Cómo puedo dejar de seguir los cambios en este directory, pero todavía permitir que exista? También necesito hacer esto para 1 file, pero los cambios a eso también aparecen en el git status después de que los .gitignore . ¿Que debería hacer?

En lugar de .gitignore , puede actualizar el repository local de git ejecutando el siguiente command:

 git update-index --assume-unchanged <file> 

En este caso, se realiza un seguimiento de un file en el repository de origen. Puede modificarlo en su repository local y git nunca lo marcará como cambiado. Lee mas en:

Ignorar los cambios realizados en los files mientras permite que existan es el propósito exacto de .gitignore . Entonces, agregar los files (o directorys) a .gitignore es lo único que tienes que hacer.

Pero su problema es que git ya está rastreando los files que desea ignorar y .gitignore no se aplica a los files rastreados. La única forma de detener este rastreo es decirle a git que los elimine. Al usar git rm --cached , git rm --cached que git elimine tus files locales, pero cualquier otro repository que obtenga los cambios aplicará la eliminación. No creo que haya una manera de evitar eso desde su propio repository. Debe hacer algo en los otros repositorys, o aceptar que los files serán eliminados.

Para evitar la eliminación en otro repository, puede:

  • (obviamente) haga una copy de security de los files en algún lugar, extraiga los cambios y restaure los files,
  • o también git rm --cached los files y confirmar antes de tirar de los cambios. Git combinará muy bien las dos eliminaciones sin tocar los files que ya no se han rastreado.

Coloque un / al final del nombre del directory en su file .gitignore , es decir,

 tmp/ 

Si ha rastreado files dentro de ese directory, necesita decirle a git que se olvide de ellos primero (antes de agregar el directory a la list de ignorar). Asumiendo que no tienes nada vital allí (es decir, que puedes rascarlo):

 git rm -rf ./tmp/ git commit -m "untrack tmp dir" mkdir tmp echo tmp/ >> .gitignore git add .gitignore ; git commit -m "add tmp/ to ignore list" 

Los nuevos files en ese directory no serán rastreados.

La opción --cached a git rm solo funciona en el índice (cambios pendientes más o less). No tiene ningún efecto en el tree de trabajo o el estado de lo que se ha rastreado o no.

.gitignore no tiene ningún efecto en los files rastreados.

Lo que desea es establecer el bit de asumir sin cambios en los files en el directory tmp /. Hay una buena explicación sobre cómo hacerlo aquí: Git: destraba un file en el repository local únicamente y manténlo en el repository remoto

Además, one-liners para establecer assume-sin cambios en todos los files en un directory – git update-index –assume-unchanged en el directory .

Parece que estás intentando rastrear un file (por ejemplo, index.php ), agregarlo a un repository remoto, luego dejar de seguir su seguimiento, mientras mantienes el file en el control remoto (es decir, mantener index.php sin cambios en el repository remoto mientras se cambia localmente).

Por lo que entiendo, git no puede hacer esto. Puede rastrear un file, o no. Si realiza un seguimiento de un file, existe en el repository remoto y cambia cuando se realizan cambios en él. Si no rastrea un file, no existe en el repository remoto.

Debido a que no es posible hacer exactamente lo que quiere con git, existen otras soluciones potencialmente, dependiendo de su situación exacta. Por ejemplo, ¿por qué no quieres que index.php cambie en remoto cuando lo cambias localmente? ¿Hay configuraciones específicas del usuario en el file? Si este es el caso, puede hacer:

 cp index.php index_template.php git rm --cached index.php 

Ahora edita index_template.php para que sea como quieras que aparezca en el repository remoto. Agregue algo a su file README para decirle a las personas que utilizan su repository que una vez que lo clonan, deben copyr index_template.php en index.php y editarlo para que se ajuste a sus necesidades.

 git add index_template.php git add README git commit -m 'added template index.php file' git push 

Cuando alguien clona su repository, debe crear su propio index.php . Ha hecho que sea más fácil para ellos: simplemente copie index_template.php en index.php y index_template.php con configuraciones específicas de la computadora.