.gitignore o cómo evitar que ciertos ficheros se añadan a tu repositorio Git

gitignore para proyecto python

Aprovechando una entrada anterior en la que explicaba cómo gestionar las ramas en Git mediante un flujo de trabajo, he creído conveniente crear también este post. En él te mostraré para qué sirve el fichero .gitignore.

No sé si te habrá pasado, pero a lo largo de los años he visto un error muy común que muchas veces pasamos por alto y nos puede traer sorpresas desagradables. Además de la pérdida de tiempo que supone tener que arreglar algo que se podía haber evitado fácilmente.

Me refiero a recursos que añadimos a un repositorio Git y que no deberían estar ahí.

No todos los recursos son aptos para Git

Te voy a poner un ejemplo de por qué debes evitar subir a un repositorio todos los recursos relacionados con tu proyecto que se generan durante el desarrollo.

Voy a suponer que usas un IDE para programar. Normalmente, los IDEs, como pueden ser PyCharm, VSCode o Eclipse, generan un directorio que contiene ficheros de configuración de tu proyecto y de tu espacio de trabajo. Es muy común que en estos ficheros haya referencia a rutas relativas y absolutas de tu sistema. Pues bien, si subes este directorio de configuración al repositorio común y otra persona en tu equipo (o incluso tú si usas un ordenador diferente) actualiza su repositorio y usa el mismo IDE, vais a entrar en una guerra de conflictos en la que continuamente estaréis rompiendo el proyecto y arreglando estas diferencias.

Otro ejemplo: Cuando ejecutas un programa Python, el intérprete genera código precompilado en bytecode. Este código se guarda en un directorio llamado __pycache__, creándose un directorio de este tipo en cada una de las carpetas de nuestro proyecto en la que haya código Python. Sin embargo, estos recursos no forman parte del proyecto de desarrollo, por lo que deberías evitar subirlos al repositorio.

¿Para qué sirve .gitignore?

Todos los ejemplos del apartado anterior (y muchos otros) son fácilmente evitables. Para ello, Git pone a tu disposición una herramienta llamada .gitignore. En realidad, .gitignore no es más que un fichero que añadimos en la raíz de nuestro proyecto en el que indicamos, por medio de expresiones regulares, qué ficheros no hay que tener en cuenta para el control de versiones.

.gitignore para proyectos Python 🐍

Podemos editar el fichero .gitignore según nuestras necesidades, configuración del sistema o requisitos del proyecto. Aquí te dejo un ejemplo de partida de un fichero .gitignore válido para cualquier tipo de proyecto Python. Eres libre de añadir y/o quitar lo que quieras/necesites.

👇🏻👇🏻👇🏻

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# celery beat schedule file
celerybeat.pid
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# IDEs project files
.idea
.vscode
rest-client.env.json

# Folder view configuration files
*.DS_Store
Desktop.ini

# Thumbnails
._*
Thumbs.db

 

¿Quieres ser expert@ en Python? Recibe trucos Python y las últimas novedades del blog

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos y scripts Python y las últimas novedades del blog

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y las novedades del blog

¿Quieres dominar Python?

Python, Guía para ser un Pythonista

El curso con el que aprender el lenguaje desde cero. Con mi soporte y ayuda.

OFERTA BLACK FRIDAY

35% de descuento