usar una omitir funciona excluir example crear como comando carpeta archivo git version-control

una - gitignore no funciona



¿Cómo haces que Git ignore los archivos sin usar.gitignore? (7)

Hay tres formas de decirle a GIT qué archivos ignorar:

  • archivos .gitignore
  • $ GIT_DIR / .git / info / exclude
  • Archivos apuntados a través de la configuración core.excludesfile

Los dos últimos puntos podrían resolver su problema.

Para más información, ver gitignore .

Debido a restricciones extrañas externas, no puedo modificar el .gitignore de mi repositorio. ¿Hay alguna manera de ignorar los archivos y directorios que no sean la modificación de .gitignore? Incluso si se trata de una solución global como una configuración global que se aplicará a todos mis repositorios.


He estado en situaciones similares, así que estoy agregando mi solución preferida que no veo mencionada. El problema con git update-index --assume-unchanged en este caso es que no puedes hacer eso para un archivo sin seguimiento. Tu dijiste

No puedo modificar el .gitignore de mi repositorio.

Voy a suponer que lo que quieres decir es que no puedes presionar ningún cambio en .gitignore al origen. Si ese es el caso, lo que puede hacer es agregar el archivo sin .gitignore a su .gitignore local, luego hacer git update-index --assume-unchanged .gitignore para que su cambio a .gitignore nunca sea presionado. Ahora está ignorando el archivo (posiblemente) no .gitignore y no afecta el archivo .gitignore remoto.


Ignore los cambios locales en los archivos rastreados: git update-index --assume-unchanged my-file.php

Desactivar los cambios locales en los archivos rastreados: git update-index --no-assume-unchanged my-file.php

fuente: git help update-index

--[no-]assume-unchanged ... This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.


No olvide, según gitignore , que hay un orden de precedencia en las diferentes "fuentes de patrones ignorados" que Git considera:

  • Patrones leídos desde la línea de comando para aquellos comandos que los admiten.
  • Los patrones leen desde un archivo .gitignore en el mismo directorio que la ruta, o en cualquier directorio padre, con patrones en los archivos de nivel superior (hasta la raíz) que son reemplazados por aquellos en archivos de nivel inferior hasta el directorio que contiene el archivo.
  • Patrones leídos desde $GIT_DIR/info/exclude .
  • Patrones leídos del archivo especificado por la variable de configuración core.excludesfile .

Los dos últimos pueden ser una solución para su problema pero:

  • no se replican para un repositorio distante
  • pueden tener sus patrones anulados por las otras fuentes

(Ver también esta pregunta SO )

Las otras dos soluciones implican actualizar el índice ( git update-index ):

  • git update-index --assume-unchanged : vea " Git: destraba un archivo en el repositorio local solamente y guárdelo en el repositorio remoto ".
    Lo menciona Elijah Lynn en los comentarios .
    • Incluso puede ignorar el contenido de una carpeta: " git update-index --assume-unchanged on directory ".
    • Utilice --no-assume-unchange para invertir el efecto: consulte " ¿Es posible git add un archivo actualmente protegido por assume-unchanged ? ".

Sin embargo, cuando pague en otra sucursal o cuando git pull , ese estado de "ignorar" podría restablecerse. De ahí la otra opción:

  • git update-index --skip-worktree ; ver:
    • " ignore mis cambios en los archivos, pero no los elimine del representante remoto " y
    • " Preservar git: archivos sin cambios entre las cajas de las sucursales ".

La diferencia entre los dos se explica en " Git - Diferencia entre '' assume-unchanged '' y '' skip-worktree '' ".



Si puede modificar .git/info/exclude puede poner las mismas reglas allí. Pero ese archivo está dentro de su repositorio local solamente.


Si solo desea tener algunos archivos locales en el repositorio y la ubicación del subdirectorio es flexible, puede colocar sus archivos en tracked_dir1/tracked_dir2/untracked_dir/ y luego agregar tracked_dir1/tracked_dir2/untracked_dir/.gitignore con contenidos como:

*

Es decir

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore * <Ctrl+D>