python / python/cpython

venv overwrites existing .gitignore

Open
#135,604 26 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

3.13 3.14 3.15 docs stdlib topic-venv
Dominant language
Python
Stars
77.2k
Forks
35.9k
PR merge metrics
PR metrics pending

Description

Bug report

Bug description

I cloned a github project with an existing .gitignore file.
I created a new python venv inside the cloned project using python3 -m venv .venv .
After creating the new venv, I see that the .gitignore file has been modified.

diff --git a/.gitignore b/.gitignore
index d0258704..f514b74c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,2 @@
-.dev
-.idea/
-.hypothesis/
-__pycache__/
-db.sqlite3
-*.sw*
-*.pyc
-venv/
-.venv/
-environment_settings.py
-elm-stuff/
-.coverage
-media
-docker/.env
-node_modules
-package-lock.json
-.sass-cache
+# Created by venv; see https://docs.python.org/3/library/venv.html
+*

I found this documentation on the mentioned url added to the .gitignore file:

Changed in version 3.13: venv now creates a .gitignore file for Git by default.

Environment

  • Arch linux 6.14.9
  • Python 3.13.3

Expected behaviour

I would expect it to not overwrite an existing .gitignore file, so it only creates it if it isnt present already.

Update

Using python3 -m venv .venv works as expected, but I did python3 -m venv .venv . (trailing dot) which creates a folder with a new venv named .venv, but also creates a venv inside the existing folder ., and that's when it overwrites the .gitignore

Please let me know if I'm missing some details or you need further testing for triage the issue.

CPython versions tested on:

3.13

Operating systems tested on:

Linux

Linked PRs
  • gh-139130

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the behavior with python3 -m venv .venv . in a project that already contains a .gitignore, then compare it with python3 -m venv .venv. Trace the python3 -m venv entry point and verify that creating the environment does not replace an existing .gitignore; confirm the behavior on Python 3.13.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.