Tuve el mismo problema, luego descubrí que guardé mi archivo .gitignore en una unidad diferente: cara de palma:
Henry Chan
Es una muy mala idea mantener cosas en su repositorio e ignorar los cambios en él.
Yevgeniy Afanasyev
Respuestas:
370
Asegúrese de que .gitignoreestá en la raíz del directorio de trabajo, y en ese directorio ejecute git statusy copie la ruta al archivo desde la salida de estado y péguelo en el .gitignore.
Si eso no funciona, es probable que Git ya haya rastreado su archivo. Puede confirmar esto a través de la salida de git status. Si el archivo no figura en la sección "Archivos no rastreados", Git ya lo ha rastreado e ignorará la regla del .gitignorearchivo.
La razón para ignorar los archivos en Git es para que no se agreguen al repositorio. Si previamente agregó un archivo que desea ignorar, Git lo rastreará y se omitirán las reglas de ignorar que coincidan. Git hace esto ya que el archivo ya es parte del repositorio.
Para ignorar realmente el archivo, debe destrabarlo y eliminarlo del repositorio. Puedes hacerlo usando git rm --cached sites/default/settings.php. Esto elimina el archivo del repositorio sin eliminarlo físicamente (eso es lo que --cachedhace). Después de confirmar ese cambio, el archivo se eliminará del repositorio e ignorarlo debería funcionar correctamente.
¿Qué quiere decir con "raíz del directorio de trabajo"? ¿El directorio donde se encuentra el repositorio '.git'?
Jonathan Leffler
El directorio de trabajo es el directorio en el que .gitse encuentra el directorio y que es la raíz del repositorio. Como cuando clonas un repositorio, /xy/entonces /xy/es tu directorio de trabajo con /xy/.git/inside.
meter
3
A veces, también deberá hacer un git add .after git rm --cachedpara reconstruir correctamente el índice.
Cooper el
La idea de verificarlo en el estado de git fue brillante. Seguí revisándolo en el Git Staging en Eclipse y la ruta era incorrecta. ¡Gracias!
walla
1
Necesitaba agregar el indicador -r (recursivo) ya que también había registrado carpetas anidadas. En mi caso, me mudé a la raíz de mi carpeta git y luego ejecuté el comando git rm --cached -r .vs / Where vs fue la carpeta de nivel superior que quería eliminar del seguimiento.
Devology Ltd el
106
Me encuentro con esto, es una vieja pregunta, pero quiero que ese archivo sea rastreado pero no rastrearlo en ciertas copias de trabajo, para hacerlo puedes ejecutar
Esa es en realidad la respuesta que estaba buscando. Todas las demás respuestas suponen que el archivo se agregó con git add, que no siempre es el caso. Con Acquia Cloud, se supone que el archivo .gitignore ignora settings.php (por ejemplo), pero el archivo se incluye con el primer commit. Desentrañando el archivo, simplemente lo elimina del repositorio, por lo tanto, lo elimina del sitio en vivo ...
PatrickS
También me ayudó - ¡gracias! Votado Sospecho que aunque solo se aplica al repositorio local de git y no persistiría una vez que sea empujado a remoto y clonado por otros desarrolladores.
Ivan
1
Sí, es solo local.
Mescalito
41
.gitignore solo ignorará los archivos que aún no haya agregado a su repositorio.
Si hiciste un git add ., y el archivo se agregó al índice, .gitignore no te ayudará. Tendrá que hacer git rm sites/default/settings.phppara eliminarlo, y luego será ignorado.
gracias.but ¿Cómo elimino el archivo solo del índice y no del directorio de trabajo?
Nick.h
1
git rmdebería hacerlo, pero es posible que le pida que use la opción -f que lo eliminaría del directorio de trabajo. No he descubierto esto más que hacer una copia del archivo, hacer git rm -fy luego restaurar la copia.
jonescb
Mismo hombre. Haga una copia en alguna parte, elimínela, confirme el estado eliminado, vuelva a agregar los archivos y vea cómo se ignoran ahora.
Yevgeniy Afanasyev
18
Por favor use este comando
git rm -rf --cached .
git add .
A veces, los archivos .gitignore no funcionan aunque sean correctos. La razón por la que Git ignora los archivos es que no se agregan al repositorio. Si agregó un archivo que desea ignorar antes, Git lo rastreará y se omitirá cualquier regla de omisión. Git hace esto porque el archivo ya es parte del repositorio.
Hay instancias, por ejemplo, archivos de configuración de aplicaciones, que quiero rastrear en git (por lo que .gitignore no funcionará), pero que necesito cambiar para la configuración local. No quiero que git administre estos archivos o los muestre como modificados. Para hacer esto uso skip-worktree:
git update-index --skip-worktree path/to/file
Puede confirmar que los archivos se omiten enumerando archivos y buscando líneas que comiencen con S para omitidos
git ls-files -v | grep ^S
Si en el futuro desea que git administre el archivo localmente nuevamente, simplemente ejecute:
git update-index --no-skip-worktree path/to/file
Mescalito arriba tuvo una gran respuesta, eso me llevó por el camino correcto pero
git update-index: archivo sin suponer / a / ignore.php
Tiene un contrato con git en el que: el usuario promete no cambiar el archivo y le permite a Git suponer que el archivo del árbol de trabajo coincide con lo que está registrado en el índice.
Sin embargo, cambio el contenido de los archivos, así que en mi caso --skip-worktree es la mejor opción.
Otra posible razón : algunas instancias de clientes git ejecutándose al mismo tiempo . Por ejemplo "git shell" + "GitHub Desktop", etc.
Esto me sucedió, estaba usando "GitHub Desktop" como el cliente principal y estaba ignorando algunas configuraciones nuevas de .gitignore: commit after commit:
Cometes algo.
A continuación, commit: ignora la configuración de .gitignore. Commit incluye muchos archivos temporales mencionados en .gitignore.
Borrar git cache; compruebe si .gitignore es UTF8; eliminar archivos -> confirmar -> mover archivos hacia atrás; omitir 1 commit: nada ayudó.
Motivo : el editor de Visual Studio Code se estaba ejecutando en segundo plano con el mismo repositorio abierto. VS Code tiene control git incorporado, y esto genera algunos conflictos.
Solución : vuelva a verificar múltiples clientes git ocultos y use solo un cliente git a la vez, especialmente al borrar la memoria caché git.
donde repoestá la "raíz" mencionada anteriormente (yo la llamaría la raíz de su árbol de trabajo), y .gitignoresolo contiene sites/default/settings.php, ignorar funciona para mí (y no importa si .gitignorese agrega al repositorio o no). ¿Esto coincide con su diseño de repositorio? Si no, ¿qué difiere?
Sí, es exactamente el mismo que el tuyo. Pero no funciona. Todos los demás patrones funcionan. Como dije, el problema seguramente es relativo a la carpeta settings.php.
Nick.h
Siento que es una muy mala idea mantener cosas en su repositorio e ignorar los cambios en él.
Yevgeniy Afanasyev
@YevgeniyAfanasyev, excepto por cosas como salida de compilación, configuración de usuario IDE, todos los demás archivos temporales generados por su cadena de herramientas ...
Chris F Carroll
Me refería a mantenerme comprometido en el repositorio, no solo en los archivos que se encuentran en la carpeta del proyecto. ¿Por qué necesitarías archivos temporales en el repositorio?
Yevgeniy Afanasyev
0
Por si alguien en el futuro tiene el mismo problema que yo:
Si usas el
*
!/**/
!*.*
truco para eliminar archivos binarios sin extensión, asegúrese de que TODAS las demás líneas de gitignore estén ABAJO. Git leerá desde .gitignore desde la parte superior, por lo que a pesar de que tenía 'test.go' en mi gitignore, fue el primero en el archivo y se convirtió en 'no ignorado' después
Respuestas:
Asegúrese de que
.gitignore
está en la raíz del directorio de trabajo, y en ese directorio ejecutegit status
y copie la ruta al archivo desde la salida de estado y péguelo en el.gitignore
.Si eso no funciona, es probable que Git ya haya rastreado su archivo. Puede confirmar esto a través de la salida de
git status
. Si el archivo no figura en la sección "Archivos no rastreados", Git ya lo ha rastreado e ignorará la regla del.gitignore
archivo.La razón para ignorar los archivos en Git es para que no se agreguen al repositorio. Si previamente agregó un archivo que desea ignorar, Git lo rastreará y se omitirán las reglas de ignorar que coincidan. Git hace esto ya que el archivo ya es parte del repositorio.
Para ignorar realmente el archivo, debe destrabarlo y eliminarlo del repositorio. Puedes hacerlo usando
git rm --cached sites/default/settings.php
. Esto elimina el archivo del repositorio sin eliminarlo físicamente (eso es lo que--cached
hace). Después de confirmar ese cambio, el archivo se eliminará del repositorio e ignorarlo debería funcionar correctamente.fuente
.git
se encuentra el directorio y que es la raíz del repositorio. Como cuando clonas un repositorio,/xy/
entonces/xy/
es tu directorio de trabajo con/xy/.git/
inside.git add .
aftergit rm --cached
para reconstruir correctamente el índice.Me encuentro con esto, es una vieja pregunta, pero quiero que ese archivo sea rastreado pero no rastrearlo en ciertas copias de trabajo, para hacerlo puedes ejecutar
fuente
.gitignore solo ignorará los archivos que aún no haya agregado a su repositorio.
Si hiciste un
git add .
, y el archivo se agregó al índice, .gitignore no te ayudará. Tendrá que hacergit rm sites/default/settings.php
para eliminarlo, y luego será ignorado.fuente
git rm
debería hacerlo, pero es posible que le pida que use la opción -f que lo eliminaría del directorio de trabajo. No he descubierto esto más que hacer una copia del archivo, hacergit rm -f
y luego restaurar la copia.Por favor use este comando
A veces, los archivos .gitignore no funcionan aunque sean correctos. La razón por la que Git ignora los archivos es que no se agregan al repositorio. Si agregó un archivo que desea ignorar antes, Git lo rastreará y se omitirá cualquier regla de omisión. Git hace esto porque el archivo ya es parte del repositorio.
fuente
Yo tuve el mismo problema. Los archivos definidos en
.gitingore
donde se enumeran como archivos sin seguimiento cuando se ejecutangit status
.La razón fue que el
.gitignore
archivo se guardó enUTF-16LE
codificación y no enUTF8
codificación.Después de cambiar la codificación del
.gitignore
archivoUTF8
, funcionó para mí.fuente
Lo que hice para ignorar el archivo settings.php con éxito:
Creo que si hay un archivo comprometido en Git, ignorar no funciona como se esperaba. Simplemente elimine el archivo y confirme. Luego lo ignorará.
fuente
Hay instancias, por ejemplo, archivos de configuración de aplicaciones, que quiero rastrear en git (por lo que .gitignore no funcionará), pero que necesito cambiar para la configuración local. No quiero que git administre estos archivos o los muestre como modificados. Para hacer esto uso skip-worktree:
Puede confirmar que los archivos se omiten enumerando archivos y buscando líneas que comiencen con S para omitidos
Si en el futuro desea que git administre el archivo localmente nuevamente, simplemente ejecute:
Mescalito arriba tuvo una gran respuesta, eso me llevó por el camino correcto pero
git update-index: archivo sin suponer / a / ignore.php
Tiene un contrato con git en el que: el usuario promete no cambiar el archivo y le permite a Git suponer que el archivo del árbol de trabajo coincide con lo que está registrado en el índice.
Sin embargo, cambio el contenido de los archivos, así que en mi caso --skip-worktree es la mejor opción.
El sitio web de Toshiharu Nishina proporcionó una excelente explicación de skip-worktree vs asumir-sin cambios: Ignorar archivos ya administrados con Git localmente
fuente
Otra posible razón : algunas instancias de clientes git ejecutándose al mismo tiempo . Por ejemplo "git shell" + "GitHub Desktop", etc.
Esto me sucedió, estaba usando "GitHub Desktop" como el cliente principal y estaba ignorando algunas configuraciones nuevas de .gitignore: commit after commit:
Motivo : el editor de Visual Studio Code se estaba ejecutando en segundo plano con el mismo repositorio abierto. VS Code tiene control git incorporado, y esto genera algunos conflictos.
Solución : vuelva a verificar múltiples clientes git ocultos y use solo un cliente git a la vez, especialmente al borrar la memoria caché git.
fuente
¡Asegúrate de que el .gitignore no tenga una extensión! No puede ser .gitignore.txt, en Windows simplemente nombra el archivo .gitignore. y funcionará
fuente
Acabo de probar esto con git 1.7.3.1, y me dio una estructura como:
donde
repo
está la "raíz" mencionada anteriormente (yo la llamaría la raíz de su árbol de trabajo), y.gitignore
solo contienesites/default/settings.php
, ignorar funciona para mí (y no importa si.gitignore
se agrega al repositorio o no). ¿Esto coincide con su diseño de repositorio? Si no, ¿qué difiere?fuente
Por si alguien en el futuro tiene el mismo problema que yo:
Si usas el
truco para eliminar archivos binarios sin extensión, asegúrese de que TODAS las demás líneas de gitignore estén ABAJO. Git leerá desde .gitignore desde la parte superior, por lo que a pesar de que tenía 'test.go' en mi gitignore, fue el primero en el archivo y se convirtió en 'no ignorado' después
fuente
Intenté la mayoría de los comandos anteriores en el terminal VS Code y obtuve errores como:
fatal: pathspec '[dir]/[file]' did not match any files
Abrí el proyecto en GitHub Desktop e ignoré desde allí y funcionó.
fuente