Ignorar directorios en repositorios Git en Windows


1106

¿Cómo puedo ignorar directorios o carpetas en Git usando msysgit en Windows?


¿Desea que la carpeta de caché se excluya por completo del repositorio o solo su contenido?
Gareth

1
Supongo que el OP tiene múltiples directorios de caché, cuyo contenido debe ignorarse, pero quiere asegurarse de que esos directorios se creen para cualquier persona que clone el repositorio.
Mark Longair

@Gareth: dado que las carpetas vacías no se rastrean con git, si se ignora el contenido, la carpeta también lo será, ¿no?
eckes

3
Solo mencioné eso porque algunas personas usan archivos ocultos (comúnmente .gitkeep) para indicar un directorio que debe mantenerse
Gareth

2
¿Es /al final lo que lo hace saber que es un directorio que debe ignorar?
Charlie Parker el

Respuestas:


1595

Cree un archivo nombrado .gitignoreen el directorio de su proyecto. Omita los directorios ingresando el nombre del directorio en el archivo (con una barra inclinada adjunta):

dir_to_ignore/

Más información está aquí .


130
En un indicador de cmd de Windows, puede usar 'editar .gitignore' o 'bloc de notas .gitignore' para crear el archivo correcto.
Joey Green

44
O también puede usar 'touch .gitignore' desde el símbolo del sistema de Windows git bash y eso creará el archivo con el nombre correcto que luego puede ser editado por el bloc de notas o similar ...
SGB

39
O simplemente cree un archivo llamado .gitignore. con el explorador y edítelo con el bloc de notas (se eliminará el punto final). De esa manera no tiene que usar el símbolo del sistema.
P. Galbraith

66
O podrías vim .gitignore desde la terminal. :)
MollyCat

34
O, que sorprendentemente no se ha mencionado a pesar de que es la forma más rápida, simplemente escriba "echo folder_to_ignore >> .gitignore" en la consola.
Godsmith

205

De forma predeterminada, el Explorador de Windows se mostrará .gitignorecuando, de hecho, el nombre del archivo sea .gitignore.txt.

Git no usará .gitignore.txt

Y no puede cambiar el nombre del archivo .gitignore, porque Windows Explorer cree que es un archivo de tipo gitignore sin nombre.

Solución sin línea de comando:

Puede cambiar el nombre de un archivo a ".gitignore". , y creará ".gitignore"

46
¿Eso funciona? Siempre le he dicho a la gente que abra el bloc de notas y en el cuadro de diálogo Guardar como escriba el nombre del archivo rodeado de comillas dobles, por ejemplo, ".gitignore"y lo guarda sin agregar automáticamente una extensión.
Arrowmaster

99
Ordenado. Incluir un período final sí funciona. Explorer elimina el último período, dando como resultado un archivo llamado ".gitignore". Sin embargo, creo que el método de las citas es más limpio y es menos probable que genere sorpresas.
Triynko

44
O, en el cuadro de diálogo Guardar como, cambie el tipo de archivo a "Todos los archivos ( . )"; Windows no agregará ninguna extensión.
OsakaWebbie

55
o en git bash simplemente escriba "touch .gitignore" en su carpeta
Rayjax

3
".gitignore."- Este es un gran truco! Siempre tuve problemas con .htaccess...
Obmerk Kronen

105

Parece que para ignorar archivos y directorios hay dos formas principales:

  1. .gitignore

    • Colocando el .gitignorearchivo en la raíz de su repositorio además de la .gitcarpeta (en Windows, asegúrese de ver la extensión de archivo verdadera y luego haga .gitignore.(con el punto al final para hacer una extensión de archivo vacía))
    • Hacer la configuración global ~/.gitignore_globaly ejecutarla git config --global core.excludesfile ~/.gitignore_globalpara agregar esto a su configuración de Git

    Nota: los archivos rastreados antes pueden rastrearse ejecutando git rm --cached filename

  2. Exclusión de repositorio : para archivos locales que no necesitan compartirse, simplemente agregue el patrón de archivo o el directorio al archivo .git/info/exclude. Estas reglas no están comprometidas, por lo que no son vistas por otros usuarios . Más información está aquí .

Para hacer excepciones en la lista de archivos ignorados, vea esta pregunta .


36
buen trabajo señalando el git rm --cached <filename>. Absolutamente crítico para los repos que existían ANTES de crear el.gitignore
MaurerPower

2
git rm --cached <filename> solucionó el problema que tenía con .gitignore :)
JeremyFelix

1
Sí, git rm: el nombre de archivo en caché es absolutamente crucial. Me estaba volviendo loco ya que git todavía estaba organizando archivos que claramente dije que se ignorarían (creó gitignore después de la confirmación inicial). ¡Muchas gracias!
Potaito

1
Resuelto mi problema Git estaba rastreando la carpeta del proveedor en mi repositorio laravel a pesar de que había agregado la carpeta del proveedor en gitignore. Muchas gracias.
Jayant

44

Tuve algunos problemas al crear un archivo en el Explorador de Windows con un .al principio.

Una solución alternativa era entrar en el shell de comandos y crear un nuevo archivo usando "editar".


2
o simplemente agregue un extra .al final para que el explorador deje de pensar que .gitignorees la extensión. Luego, en la entrada, ese punto final sin extensión solo se come y te queda .gitignore TL; DR: intenta nombrarlo .gitignore.=> terminas con.gitignore
leerssej

43

Para indicarle a Git que ignore ciertos archivos o carpetas, debe crear el .gitignorearchivo.

Pero en el Explorador de Windows debe proporcionar un nombre para el archivo. Simplemente no puede crear un archivo con solo una extensión. El truco es crear un archivo de texto vacío e ir al símbolo del sistema y cambiar el nombre del archivo a .gitignore:

ren "New Text Document.txt" .gitignore

Ahora abra el archivo con su editor de texto favorito y agregue los nombres de archivo / carpeta que desea ignorar. También puede utilizar comodines como este: *.txt.


15
O simplemente: echo dir_to_ignore /> .gitignore
Oliver

2
O type nul > .gitignorepara crear un archivo vacío
Castro Roy

O simplemente llame al archivo .gitignore.cuando las extensiones de archivo no estén ocultas en su explorador de Windows
Vairis

22

Si desea mantener una carpeta y no los archivos que contiene, simplemente coloque un archivo ".gitignore" en la carpeta con "*" como contenido. Este archivo hará que Git ignore todo el contenido del repositorio. Pero .gitignorese incluirá en su repositorio.

$ git add path/to/folder/.gitignore

Si agrega una carpeta vacía, recibirá este mensaje (.gitignore es un archivo oculto)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Entonces, use "-f" para forzar la adición:

$ git add path/to/folder/.gitignore -f

19

En Windows hay una trampa adicional con barras. Excluyendo un solo directorio en .gitignore con

dir_to_exclude /

posiblemente funcionará, pero excluyendo todos los directorios con

/ /

causa problemas cuando tiene nombres de archivo con espacios (como my file.txt) en su directorio: Git Bash escapa de estos espacios con una barra diagonal inversa (como my\ file.txt) y Git para Windows no distingue entre /y \.

Para excluir todos los directorios, mejor uso:

** /

Dos asteriscos consecutivos significan el contenido del directorio.


15

También en su \.git\infodirectorio de proyectos hay un archivo de exclusión que es efectivamente lo mismo que .gitignore(creo). Puede agregar archivos y directorios para ignorar en eso.


Me gusta este enfoque, simplemente no puedo llevarme bien con la ruta allí, quiero ignorar una carpeta en el repositorio principal, ¿cómo?
Shimmy Weitzhandler

¿Pero no se supone que debes dejar los archivos en .git solo (manipular el contenido a través de medios oficiales)?
Peter Mortensen

13

En caso de que necesite excluir subcarpetas, puede usar el **comodín para excluir cualquier nivel de subdirectorio.

**/build/output/Debug/

12

Para ignorar un directorio completo en Git, la forma más fácil es incluir un archivo .gitignore dentro del directorio de destino que simplemente contiene "*".

Un ejemplo ilustrativo

Sistema de ejemplo

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Objetivo

  • ignorar el contenido de / dirB /

Nivel superior .gitignore (/root/.gitignore)

  • Aquí es donde va tu información estándar de gitignore

Directorio ignorado .gitignore (/root/dirB.gitignore)

  • ¡Este archivo solo se lee como '*' y el directorio se ignora por completo, en sí mismo y en todos los archivos!

Y es así de simple :)


10

Cuando todo lo demás falla, intente editar el archivo

/.git/info/exclude

y agregando los directorios que desea al final del archivo, así:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

Agregué las carpetas "activos" y "compiladas" a la lista de archivos y directorios para ignorar.


1
Estoy usando Atom en Windows 10. ¡Está funcionando! Gracias amigo
Putu De

Probé todos los demás con mi configuración actual y esta fue mi respuesta definitiva definitiva.
Xedret

10

Puede crear el archivo ".gitignore" con el contenido:

*
!.gitignore

Esto funciona para mi.


2
Esta es la mejor respuesta, también trae beneficios adicionales en la implementación y mantenimiento del proyecto.
Nitin ...

¿Quién es "simple" ?
Peter Mortensen

9

En Unix:

touch .gitignore

En Windows:

echo > .gitignore

Estos comandos ejecutados en una terminal crearán un .gitignorearchivo en la ubicación actual.

Luego simplemente agregue información a este .gitignorearchivo (usando Notepad ++, por ejemplo) qué archivos o carpetas deben ignorarse. Guarda tus cambios. Eso es :)

Más información: .gitignore


8

He tenido algunos problemas para que Git recoja el .gitignorearchivo en Windows. Sin $GIT_DIR/info/excludeembargo, el archivo siempre parece funcionar.

Sin embargo, la desventaja de este enfoque es que los archivos en el $GIT_DIRdirectorio no se incluyen en el registro y, por lo tanto, no se comparten.

ps $GIT_DIRes generalmente la carpeta oculta llamada.git


Sí, git en Windows es realmente quisquilloso con .gitignore, aunque el archivo de exclusión local hace lo que necesito. ¡Gracias!
andersop

6

Supongo que el problema es que su árbol de trabajo es como:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... con lo .gitignoreque describes. Esto te dará git statusresultados como:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... si los index.htmlarchivos aún no se han agregado al repositorio. (Git ve que hay archivos no ignorados en los directorios de caché, pero solo informa los directorios). Para solucionar esto, asegúrese de haber agregado y confirmado los index.htmlarchivos:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... y tu git statusvoluntad se verá así:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Obviamente, usted también quiere comprometerse .gitignore. Solo estaba siendo flojo con este caso de prueba).


1
Es probable que no quiere comprometerse .gitignore sobre todo porque es muy probable que desee realizar un seguimiento de los cambios a la misma, y también lo es su equipo (si está trabajando con una). Ver stackoverflow.com/a/767213/123033
Dave Everitt

2
@Dave Everitt: Esa es exactamente la razón por la que dije "Obviamente tú también quieres cometer .gitignore".
Mark Longair

6

En Windows y Mac, si desea ignorar una carpeta llamada Flower_Data_Folder en el directorio actual, puede hacer lo siguiente:

echo Flower_Data_Folder >> .gitignore

Si es un archivo llamado data.txt:

echo data.txt >> .gitignore

Si es una ruta como "Data / passwords.txt"

echo "Data/passwords.txt" >> .gitignore. 

2

Tuve problemas similares. Trabajo en una cadena de herramientas de Windows con un repositorio compartido con chicos de Linux, y felizmente crean archivos con los mismos nombres (excepto los casos) en una carpeta determinada.

El efecto es que puedo clonar el repositorio e inmediatamente tengo docenas de archivos 'modificados' que, si me registrara, crearían estragos.

Tengo Windows configurado para mayúsculas y minúsculas y Git para no ignorar mayúsculas y minúsculas, pero todavía falla (aparentemente en las llamadas a la API Win32).

Si gitignore los archivos, entonces debo recordar no rastrear el archivo .gitignore.

Pero encontré una buena respuesta aquí:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html


El enlace parece estar roto (primero redirige a la versión 'https'): "Falló la conexión segura. Se produjo un error durante una conexión a archive.robwilkerson.org. PR_END_OF_FILE_ERROR"
Peter Mortensen

0

Simplemente cree el .gitignorearchivo en la carpeta de su proyecto y luego agregue el nombre de la carpeta en él, por ejemplo:

frontend/node_modules
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.