Pregunta ¿Cómo detener el seguimiento e ignorar los cambios en un archivo en Git?


He clonado un proyecto que incluye algunos .csproj archivos. No necesito / me gusta mi local csproj archivos que rastrea Git (o que aparecen cuando se crea un parche), pero claramente se necesitan en el proyecto.

Yo he añadido *.csproj a mi LOCAL .gitignore, pero los archivos ya están en el repositorio.

Cuando escribo el estado de git, muestra mis cambios en csproj que no estoy interesado en seguir o enviar para parches.

¿Cómo elimino el "seguimiento de" estos archivos de mi repositorio personal (pero los guardo en la fuente para que pueda usarlos) de modo que no vea los cambios cuando hago un estado (o creo un parche)?

¿Existe una forma correcta / canónica para manejar esta situación?


1429
2018-06-01 19:08


origen


Respuestas:


Solo llamando git rm --cached en cada uno de los archivos que desea eliminar del control de revisión debería estar bien. Siempre que tus patrones de ignorar locales sean correctos, no verás estos archivos incluidos en el resultado del estado de git.

Tenga en cuenta que esta solución elimina los archivos del repositorio, por lo que todos los desarrolladores necesitarían mantener sus propias copias locales (no controladas por revisión) del archivo.

Para evitar que git detecte cambios en estos archivos, también debe usar este comando:

git update-index --assume-unchanged [path]

Lo que probablemente quieras hacer: (desde abajo @Ryan Taylor respuesta)

  1. Esto es para decirle a Git que quiere su propia versión independiente del archivo o carpeta. Por ejemplo, no desea sobreescribir (o eliminar)   producción / configuración de archivos de etapas.

git update-index --skip-worktree <path-name>

La respuesta completa está aquí en esta URL: http://source.kohlerville.com/2009/02/untrack-files-in-git/


1795
2018-06-01 19:16



Si lo haces git update-index --assume-unchanged file.csproj, git no verificará los cambios de file.csproj automáticamente: eso los detendrá a aparecer en estado de git cada vez que los cambies. Por lo tanto, puede marcar todos sus archivos .csproj de esta manera, aunque deberá marcar manualmente los nuevos que le envíe el repositorio en sentido ascendente. (Si los tienes en tu .gitignore o .git/info/exclude, los que crees serán ignorados)

No estoy del todo seguro de qué son los archivos .csproj ... si son algo así como las configuraciones de IDE (similar a los archivos .eclipse y .classpath de Eclipse), entonces sugeriría que simplemente nunca deberían ser controlados por la fuente en todas. Por otro lado, si son parte del sistema de compilación (como Makefiles) entonces claramente deberían --- y sería útil una forma de recoger cambios locales opcionales (por ejemplo, de un local.csproj a la config.mk) : divida la acumulación en partes globales y anulaciones locales.


223
2018-06-01 19:24



Este es un proceso de dos pasos:

  1. Elimine el seguimiento del archivo / carpeta, pero guárdelos en el disco, utilizando

    git rm --cached 
    

    Ahora no aparecen como "cambiados", pero se muestran como

        untracked files in  git status -u  
    
  2. Agrégalos a .gitignore


135
2017-08-02 14:25



Hay 3 opciones, probablemente quieras # 3

1. Esto mantendrá el archivo local para usted, pero lo eliminará para cualquier otra persona cuando lo extraiga.

git rm --cached <file-name> o git rm -r --cached <folder-name>

2. Esto es para la optimización, como una carpeta con una gran cantidad de archivos, p. SDK que probablemente nunca cambiarán. Le dice a git que deje de revisar esa gran carpeta cada vez que se realicen cambios, ya que no tendrá ninguno.

git update-index --assume-unchanged <path-name>

3. Esto es para decirle a Git que quiere su propia versión independiente del archivo o carpeta. Por ejemplo, no desea sobrescribir (o eliminar) los archivos de configuración de producción / transición.

git update-index --skip-worktree <path-name>

Es importante saber que git update-index  no se propagará con git, y cada usuario tendrá que ejecutarlo de forma independiente.


108
2017-10-26 21:18



La respuesta aceptada todavía no funcionó para mí

solía

git rm -r --cached

git add.

git commit -m "fixing .gitignore"

Encontré la respuesta de aquí 


78
2017-09-18 05:44



¿Olvidó su .gitignore?

Si tiene todo el proyecto localmente pero se olvidó de agregarlo, ignore git y ahora está rastreando algunos archivos innecesarios, use este comando para eliminar todo

git rm --cached -r .

asegúrese de estar en la raíz del proyecto.

Entonces puedes hacer lo usual

Añadir

git add .

Cometer

git commit -m 'removed all and added with git ignore'

empujar

git push origin master

Conclusión

Espero que esto ayude a las personas que tienen que hacer cambios en sus .gitignore o lo olvidé todo junto.

  • Elimina todo el caché
  • Mira tu .gitignore
  • Agrega los archivos que desea rastrear
  • Empuja a su repositorio

37
2017-11-04 10:25



Para ahorrar tiempo, las reglas que agrega a su .gitignore se pueden usar para eliminar múltiples archivos / carpetas, es decir,

git rm --cached app/**/*.xml

o

git rm --cached -r app/widgets/yourfolder/

e.t.c.


20
2017-11-07 13:18