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
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
):
git update-index --assume-unchanged
: ver "Git: untrack a file in local repo only and keep it in the remote repo".
Se menciona por Elijah Lynn en the comments.- Incluso puede ignorar el contenido de una carpeta: "
git update-index --assume-unchanged
on directory". - Utilice
--no-assume-unchange
para invertir el efecto: consulte "Is it possible togit add
a file currently protected byassume-unchanged
?".
- Incluso puede ignorar el contenido de una carpeta: "
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:
git update-index --skip-worktree
; ver:
La diferencia entre los dos se explica en "Git - Difference Between 'assume-unchanged
' and 'skip-worktree
'".
Si puede modificar .git/info/exclude
puede poner las mismas reglas allí. Pero ese archivo está dentro de su repositorio local solamente.
suena como esta es probablemente la mejor opción; vamos a excluir archivos de su repositorio local. – Abizern
¿Cómo funciona esto con los submódulos? No hay directorio '.git' en un submódulo ... – zakdances
@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' –
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).
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.
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>
Usted puede utilizar el método gitignore global en vez de modificar el uno en el proyecto https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
- 1. ¿Cómo hacer que .gitignore ignore los archivos compilados sin extensión?
- 2. gitignore sin archivos binarios
- 3. ¿Cómo hago un 'estado de git' para que no muestre los archivos sin seguimiento sin usar .gitignore?
- 4. Cómo hacer que Git en Windows ignore los enlaces simbólicos
- 5. Algo así como gitignore pero no git ignore
- 6. .gitignore no ignora los archivos
- 7. .gitignore ignore todos los archivos y luego permita de forma recursiva * .foo
- 8. Cómo usar el comando gitignore en git
- 9. Hacer que Python ignore los archivos .pyc
- 10. ¿Cómo hacer que git ignore un grupo de subdirectorios con el patrón gitignore?
- 11. archivos .gitignore agregados dentro de los submódulos de Git
- 12. ¿Cómo hacer que git ignore los cambios en el caso?
- 13. Git-ignore ciertos archivos en subdirectorios, pero no todos
- 14. Git ignorar archivos siendo rastreado sin eliminarlos
- 15. ¿Puedo hacer que git diff ignore los cambios de permisos?
- 16. Cómo ver los objetos e índices git sin usar git
- 17. ¿Cómo hacer que mercurial ignore todos los archivos ocultos?
- 18. Git global ignore no funciona
- 19. ¿Cómo presiono los archivos especificados en .gitignore?
- 20. ¿Cómo le dices a git que ignore permanentemente los cambios en un archivo?
- 21. Make git ignore rename
- 22. Práctica recomendada para usar varios archivos .gitignore
- 23. ¿Cómo le digo a Git que ignore todo excepto un subdirectorio?
- 24. git agregar todos excepto ignorar archivos en el archivo .gitignore
- 25. ¿Debería comprometer .gitignore en los repositorios Git?
- 26. git no .ignore trabajando en un directorio
- 27. gitignore todos los archivos de extensión en el directorio
- 28. Git: cómo ignorar los archivos ocultos/archivos de puntos/archivos con nombres de archivos vacíos a través de .gitignore?
- 29. Git ignore push solo
- 30. opuesto al archivo .gitignore?
Puede usar' update-index --assume-unchanged' @see http://stackoverflow.com/a/25253144/292408 –
@ 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
Sweet, --skip-work-tree es muy útil, ¡gracias! –