Hay muchas situaciones que por el tipo de archivo no queremos que Git los siga y almacene en la base de datos git (.git directory)
Para especificar que Git ignore el seguimiento de un archivo debemos crear un archivo en la raíz del proyecto con el nombre (.gitignore)
Dentro de este archivo debemos especificar que archivos no debe procesar Git.
Los casos más comunes donde debemos especificar archivos y o carpetas a ignorar son:
Vamos a crear un proyecto llamado 'proyecto3' con dos archivos con código fuente de Java. Seguidamente vamos a crear un repositorio de Git para el proyecto. Compilamos los archivos java. Para evitar la carga en el repositorio de los archivos compilados (.class) creamos un archivo llamado (.gitignore) y mediante la sintaxis *.class evitamos que Git incorpore al repositorio cualquier archivo con dicha extensión.
El mensaje nos muestra que se incorporaron en el repositorio 3 archivos:
Aplicacion.java Persona.java .gitignore
Tener en cuenta que se carga en el repositorio el archivo .gitignore, pero nos los archivos especificados dentro de dicho archivo.
No seguir todos los archivos que finalicen con alguna vocal:
*.[aeiouAEIOU]
Ignorar el archivo claves.txt localizado en la raíz del proyecto:
/clave.txt
Ignorar el archivo claves.txt localizado en la la carpeta /claves:
claves/clave.txt
Ignorar todos los archivos de la carpeta documentacion:
documentacion/
Como ejemplo de proyectos reales podemos ver el archivo .gitignore del proyecto Git:
/fuzz_corpora /GIT-BUILD-DIR /GIT-BUILD-OPTIONS /GIT-CFLAGS /GIT-LDFLAGS /GIT-PREFIX /GIT-PERL-DEFINES /GIT-PERL-HEADER /GIT-PYTHON-VARS /GIT-SCRIPT-DEFINES /GIT-SPATCH-DEFINES /GIT-USER-AGENT /GIT-VERSION-FILE /bin-wrappers/ /git /git-add /git-add--interactive /git-am /git-annotate /git-apply /git-archimport /git-archive /git-bisect /git-blame /git-branch /git-bugreport /git-bundle /git-cat-file /git-check-attr /git-check-ignore /git-check-mailmap /git-check-ref-format /git-checkout /git-checkout--worker /git-checkout-index /git-cherry /git-cherry-pick /git-clean /git-clone /git-column /git-commit /git-commit-graph /git-commit-tree /git-config /git-count-objects /git-credential /git-credential-cache /git-credential-cache--daemon /git-credential-store /git-cvsexportcommit /git-cvsimport /git-cvsserver /git-daemon /git-diagnose /git-diff /git-diff-files /git-diff-index /git-diff-tree /git-difftool /git-difftool--helper /git-describe /git-env--helper /git-fast-export /git-fast-import /git-fetch /git-fetch-pack /git-filter-branch /git-fmt-merge-msg /git-for-each-ref /git-for-each-repo /git-format-patch /git-fsck /git-fsck-objects /git-fsmonitor--daemon /git-gc /git-get-tar-commit-id /git-grep /git-hash-object /git-help /git-hook /git-http-backend /git-http-fetch /git-http-push /git-imap-send /git-index-pack /git-init /git-init-db /git-interpret-trailers /git-instaweb /git-log /git-ls-files /git-ls-remote /git-ls-tree /git-mailinfo /git-mailsplit /git-maintenance /git-merge /git-merge-base /git-merge-index /git-merge-file /git-merge-tree /git-merge-octopus /git-merge-one-file /git-merge-ours /git-merge-recursive /git-merge-resolve /git-merge-subtree /git-mergetool /git-mergetool--lib /git-mktag /git-mktree /git-multi-pack-index /git-mv /git-name-rev /git-notes /git-p4 /git-pack-redundant /git-pack-objects /git-pack-refs /git-patch-id /git-prune /git-prune-packed /git-pull /git-push /git-quiltimport /git-range-diff /git-read-tree /git-rebase /git-receive-pack /git-reflog /git-remote /git-remote-http /git-remote-https /git-remote-ftp /git-remote-ftps /git-remote-fd /git-remote-ext /git-repack /git-replace /git-request-pull /git-rerere /git-reset /git-restore /git-rev-list /git-rev-parse /git-revert /git-rm /git-send-email /git-send-pack /git-sh-i18n /git-sh-i18n--envsubst /git-sh-setup /git-shell /git-shortlog /git-show /git-show-branch /git-show-index /git-show-ref /git-sparse-checkout /git-stage /git-stash /git-status /git-stripspace /git-submodule /git-submodule--helper /git-subtree /git-svn /git-switch /git-symbolic-ref /git-tag /git-unpack-file /git-unpack-objects /git-update-index /git-update-ref /git-update-server-info /git-upload-archive /git-upload-pack /git-var /git-verify-commit /git-verify-pack /git-verify-tag /git-version /git-web--browse /git-whatchanged /git-worktree /git-write-tree /scalar /git-core-*/?* /git.res /gitweb/GITWEB-BUILD-OPTIONS /gitweb/gitweb.cgi /gitweb/static/gitweb.js /gitweb/static/gitweb.min.* /config-list.h /command-list.h /hook-list.h *.tar.gz *.dsc *.deb /git.spec *.exe *.[aos] *.o.json *.py[co] .build/ .depend/ *.gcda *.gcno *.gcov /coverage-untested-functions /cover_db/ /cover_db_html/ *+ /config.mak /autom4te.cache /config.cache /config.log /config.status /config.mak.autogen /config.mak.append /configure /.vscode/ /tags /TAGS /cscope* /compile_commands.json *.hcc *.obj *.lib *.sln *.sp *.suo *.ncb *.vcproj *.user *.idb *.pdb *.ilk *.iobj *.ipdb *.dll .vs/ Debug/ Release/ /UpgradeLog*.htm /git.VC.VC.opendb /git.VC.db *.dSYM /contrib/buildsystems/out
Hay un repositorio que guarda archivos gitignore de cientos de proyectos: github/gitignore