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 posiblegit add
un archivo actualmente protegido porassume-unchanged
? ".
- Incluso puede ignorar el contenido de una carpeta: "
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
'' ".
Puede utilizar el método global de gitignore en lugar de modificar el del proyecto https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
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>