Me estoy mojando los pies con Git y tengo el siguiente problema:
El árbol fuente de mi proyecto:
/
|
+--src/
+----refs/
+----...
|
+--vendor/
+----...
Tengo un código (actualmente MEF) en mi sucursal de proveedor que compilaré allí y luego moveré las referencias a /src/refs
donde es donde el proyecto los recoge.
Mi problema es que tengo mi .gitignore
conjunto para ignorar *.dll
y *.pdb
. Puedo hacer una git add -f bar.dll
para forzar la adición del archivo ignorado, lo cual está bien, el problema es que no puedo encontrar una lista de los archivos que se ignoran.
Quiero enumerar los archivos ignorados para asegurarme de no olvidar agregarlos.
He leído la página de manual git ls-files
y no puedo hacer que funcione. Me parece que git ls-files --exclude-standard -i
debería hacer lo que quiero. ¿Qué me estoy perdiendo?
git clean
truco) como se demuestra aquí . Además, recomiendo contra el ejemplo "excluir de" en su resumen ya que de hecho no presta atención a ningún archivo .gitignore. Pregunto esto especialmente porque esta página es la principal respuesta de Google.git config --global alias.ls ls-files --exclude-standard
, y eso hace que la respuesta a esta preguntagit ls -i
.Respuestas:
Notas:
git status --ignored
.gitignore
git clean -ndX
trabaja en GITS de más edad, que muestra una vista previa de lo que ficheros ignorados podrían ser eliminados (sin eliminar nada)También interesante (mencionado en la respuesta de qwertymk ), también puede usar el comando, al menos en Unix ( no funciona en una sesión CMD de Windows )
git check-ignore -v
El segundo muestra la regla real
.gitignore
que hace que un archivo sea ignorado en su repositorio de git.En Unix, usando " ¿Qué se expande a todos los archivos en el directorio actual de forma recursiva? " Y un bash4 +:
(o un
find -exec
comando)Nota: https://stackoverflow.com/users/351947/Rafi B. sugiere en los comentarios para evitar el (arriesgado) globstar :
Sin
.git/
embargo, asegúrese de excluir los archivos de la subcarpeta.Respuesta original 42009)
debería funcionar, excepto que su código fuente indica:
exc_given
?Resulta que necesita un parámetro más después de la
-i
lista para realmente enumerar cualquier cosa:Tratar:
(pero eso solo enumeraría su objeto en caché (no ignorado), con un filtro, por lo que no es exactamente lo que desea)
Ejemplo:
En realidad, en mi archivo 'gitignore' (llamado 'excluir'), encuentro una línea de comando que podría ayudarlo:
Entonces....
debería hacer el truco.
Como se menciona en la página de manual de ls-files ,
--others
es la parte importante para mostrarle archivos no almacenados en caché, no comprometidos y normalmente ignorados.--exclude_standard
no es solo un atajo, sino una forma de incluir todas las configuraciones estándar de "patrones ignorados".fuente
git status --ignored
parece que también muestra archivos sin seguimientogit check-ignore -v *
funciona muy bien, ya que muestra dónde se aplicó la configuración. Gracias.shopt -s globstar
después de eso, debería funcionar.git check-ignore -v $(find . -type f -print)
Hay una manera mucho más simple de hacerlo (git 1.7.6+):
Ver ¿Hay alguna manera de decirle a git-status que ignore los efectos de los archivos .gitignore?
fuente
error: unknown option 'ignored'
. Incluso agregar-s
como se sugiere en la publicación vinculada no funcionó.-s
. Puede intentargit status -h
ver si--ignored
es compatiblegit clean -ndX
solución, porque la rara situación en la que uno olvida por error las banderas tendrá un efecto irrevocable en el repositorio, ya que se eliminan los archivos no rastreados. Entonces es peligroso. Por el contrario,git status --ignored
siempre es seguro, incluso cuando se escribe erróneamente y es natural recordarlo.Otra opción que es bastante limpia (sin juego de palabras):
Explicación:
Nota: Esta solución no mostrará los archivos ignorados que ya se han eliminado.
fuente
make clean
y muy útil en un servidor de compilación.git ls-files -o -i --exclude-standard
.git clean -dXn
siempre ha sido lo que quería, pero no muestra los archivos ignorados que ya se han eliminado.git ls-files -o -i --exclude-standard
podría hacer eso. Entonces, eso podría ser lo que está causando la diferencia.n
primera, menos posibilidades de eliminar accidentalmente de esa manera;git clean -ndX
n
, Git por defecto esfatal: clean.requireForce defaults to true and neither -n nor -f given; refusing to clean
. Todavía es bastante seguro, ¡pero escribir eln
primero es aún más seguro! :)Si bien generalmente la solución es correcta, no funciona en todas las circunstancias. Supongamos un directorio de repositorio como este:
y un .gitignore como este:
Esto ignora el
doc
directorio y todos los archivos a continuacióntmp
. Git funciona como se esperaba, pero el comando dado para enumerar los archivos ignorados no lo hace. Echemos un vistazo a lo que git tiene que decir:Observe que
doc
falta en la lista. Puedes conseguirlo con:Observe la
--directory
opción adicional .Que yo sepa, no hay un solo comando para enumerar todos los archivos ignorados a la vez. Pero no sé por qué
tmp/dir0
no aparece en absoluto.fuente
(git ls-files -oi --exclude-standard; git ls-files -oi --exclude-standard --directory) | perl -nle '$seen{$_}++||next;if(-d){system"find",$_,"-type","f"}else{print}'
Git ahora tiene esta funcionalidad incorporada
Por supuesto, puedes cambiar el globo a algo como
**/*.dll
en tu casoReferencia de Git
fuente
git check-ignore **/*
incluir archivos en subdirectoriosDebería ser suficiente para usar
ya que eso cubre todo lo cubierto por
Por lo tanto, este último es redundante.
Puede hacer esto más fácil agregando un alias a su
~/.gitconfig
archivo:Ahora puede escribir
git ignored
para ver la lista. Mucho más fácil de recordar y más rápido de escribir.Si prefiere la visualización más sucinta de la solución de Jason Geng, puede agregar un alias para eso como este:
Sin embargo, la salida más detallada es más útil para solucionar problemas con sus archivos .gitignore, ya que enumera todos los archivos de selección de algodón que se ignoran. Normalmente, canalizaría los resultados
grep
para ver si un archivo que espera ignorar está allí, o si un archivo que no desea ignorar está allí.Luego, cuando solo desea ver una pantalla corta, es bastante fácil de recordar y escribir
(
-s
Normalmente se puede dejar).fuente
git status --ignored
funciona en Debian sid pero puede ser muy nuevo ... pero aparentemente se agregó debido a la demanda popular ;-)Aquí le mostramos cómo imprimir la lista completa de archivos en el árbol de trabajo que coinciden con los patrones ubicados en cualquier lugar de las múltiples fuentes de gitignore de Git (si está usando GNU
find
):Verificará todos los archivos en la rama actual del repositorio (a menos que los haya eliminado localmente).
E identifica las líneas de origen de gitignore particulares, también.
Git continúa rastreando los cambios en algunos archivos que coinciden con los patrones de gitignore, simplemente porque esos archivos ya se agregaron. Útilmente, el comando anterior también muestra esos archivos.
Los patrones negativos de gitignore también se corresponden. Sin embargo, estos son fácilmente distinguibles en la lista, porque comienzan con
!
.Si está utilizando Windows, Git Bash incluye GNU
find
(como lo revelafind --version
).Si la lista es larga (y la tiene
rev
), también puede mostrarlos por extensión (algo):Para más detalles, ver
man find
,man git-check-ignore
,man rev
, yman sort
.El punto de todo este enfoque es que Git (el software) está cambiando rápidamente y es altamente complejo. Por el contrario, los GNU
find
son extremadamente estables (al menos, en sus características utilizadas aquí). Por lo tanto, cualquiera que desee ser competitivo al mostrar su profundo conocimiento de Git responderá la pregunta de una manera diferente.¿Cuál es la mejor respuesta? Esta respuesta minimiza deliberadamente su dependencia del conocimiento de Git, para lograr el objetivo de estabilidad y simplicidad a través de la modularidad (aislamiento de la información), y está diseñado para durar mucho tiempo.
fuente
(extendiendo las otras respuestas)
Tenga en cuenta que
git check-ignore
usa el comprometido.gitignore
y no el que está en su árbol de trabajo. Para jugar con él sin contaminar su historial de git, puede intentar editarlo libremente y luego comprometerse con agit commit --amend
.Este problema ocurre principalmente si necesita una solución alternativa del problema, que git no sigue directorios. Ingrese en
.gitignore
:.keep
debería ser un archivo de longitud cerodirtokeep
.El resultado será que todo lo que en
dirtokeep
serán ignorados, exceptodirtokeep/.keep
, que dará como resultado que también eldirtokeep
directorio será construido sobre clon / salida.fuente
Suponiendo que hay algunos directorios ignorados, ¿por qué no usar "git status node / logs /" que le dirá qué archivos se agregarán? En el directorio tengo un archivo de texto que no es parte de la salida de estado, por ejemplo:
En la sucursal maestra
Su sucursal está actualizada con 'origen / maestro'.
Archivos sin seguimiento:
(use "git add ..." para incluir en lo que se confirmará)
.gitignore es:
*
! .gitignore
fuente