2009-03-17 23 views
81

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.¿Cómo haces que Git ignore los archivos sin usar .gitignore?

Respuesta

121

No se olvide, de acuerdo con gitignore, que hay una orden de precedencia en las distintas "fuentes patrón de ignorar" que Git considerar:

  • patrones leídos desde la línea de comandos para los comandos que los apoyan.
  • Los patrones se 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) siendo reemplazados por los archivos de nivel inferior hasta el directorio que contiene el archivo.
  • Patrones leídos de $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:

  • que no se replican a un repositorio distante
  • que pueden tener sus patrones anulado por las otras fuentes

(Vea también esto SO question)


Las otras dos soluciones implican la actualización del índice (git update-index):

Sin embargo, cuando realice el pago otra rama o cuando git pull, que "ignorar" estado posible que se reinicie. De ahí la otra opción:

La diferencia entre los dos se explica en "Git - Difference Between 'assume-unchanged' and 'skip-worktree'".

+0

Puede usar' update-index --assume-unchanged' @see http://stackoverflow.com/a/25253144/292408 –

+1

@ ElijahLynn seguro. También tiene 'update-index --skip-work-tree'. Ya edité la respuesta para agregar algunos enlaces a viejas respuestas mías que ilustran esos dos comandos 'update-index'. – VonC

+0

Sweet, --skip-work-tree es muy útil, ¡gracias! –

90

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

+0

suena como esta es probablemente la mejor opción; vamos a excluir archivos de su repositorio local. – Abizern

+1

¿Cómo funciona esto con los submódulos? No hay directorio '.git' en un submódulo ... – zakdances

+3

@yourfriendzak la carpeta' .git' de un submódulo está en 'parent_repo/.git/modules/submodule_name'. Por lo tanto, debe editar 'parent_repo/.git/modules/submodule_name/info/exclude' –

17

Hay tres maneras de saber qué archivos GIT ignorar:

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

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

Para obtener más información, consulte gitignore(5).

0

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

Desactivar cambios locales en los archivos de orugas: 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. 
1

Si lo que desea es tener algunos archivos locales en el repositorio y la ubicación del subdirectorio son flexibles, puede poner sus archivos en tracked_dir1/tracked_dir2/untracked_dir/ y luego agregar un tracked_dir1/tracked_dir2/untracked_dir/.gitignore con contenidos como:

*

es decir,

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