[Python] Git 프로젝트 별 venv 사용법 정리

ChatGPT가 다음과 같이 정리 답변한다.

✅ Git 프로젝트마다 venv 만드는 법

예를 들어 my-awesome-project라는 Git 프로젝트가 있다고 가정하면:

1. 해당 프로젝트 디렉토리로 이동

cd ~/projects/my-awesome-project

2. 가상환경 만들기

python3 -m venv .venv
  • venv는 그냥 관례적으로 많이 쓰는 이름이야. 숨김 폴더가 돼서 깔끔하고, .gitignore에 넣기도 좋아.

3. 가상환경 활성화

source .venv/bin/activate
  • 프롬프트에 (venv) 또는 (.venv)처럼 표시가 붙을 거야.
  • 이 상태에서 pip install 하면 이 프로젝트 안에서만 설치돼.

4. 필요한 패키지 설치

pip install black requests flask

5. requirements.txt 만들기 (필요할 때)

pip freeze > requirements.txt
  • 다른 사람이 이 프로젝트를 클론한 다음,
pip install -r requirements.txt
  • 이렇게 하면 똑같은 환경을 바로 세팅 가능해.

✅ .gitignore 설정

venv 디렉토리는 Git에 굳이 올릴 필요 없어. 아래처럼 .gitignore에 추가해두면 좋아:

.venv/

✅ 프로젝트 폴더마다 적용 구조 예시

my-awesome-project/
├── .venv/ ← 가상환경
├── app.py
├── requirements.txt
└── README.md

🔁 다음에 다시 작업할 때는?

cd ~/projects/my-awesome-project
source .venv/bin/activate

작업 끝났으면:

deactivate

✅ VS Code 사용자라면 (추가 팁)

  • .venv를 자동으로 인식하게 하려면 .vscode/settings.json에 다음 설정 추가:
{
  "python.defaultInterpreterPath": ".venv/bin/python"
}

[git] @{ } 표기법

Git에서는 @{} 표기법을 사용하여 다양한 브랜치 및 커밋 참조를 지정할 수 있습니다. 여기서 몇 가지 일반적으로 사용되는 표기법을 설명하겠습니다:

  1. @{u} 또는 @{upstream}: 현재 브랜치의 upstream 브랜치를 가리킵니다. 예를 들어, main 브랜치의 upstream 브랜치가 origin/main인 경우, main@{u} 또는 main@{upstream}origin/main을 가리킵니다.
  2. @{1} 또는 @{2} 등의 숫자: 브랜치의 이전 위치를 가리킵니다. 예를 들어, main@{1}main 브랜치의 바로 이전 커밋을 가리킵니다.
  3. @{yesterday} 또는 @{1.week.ago}와 같이 시간 범위를 지정할 수도 있습니다. 이를 통해 특정 시점의 커밋을 가리킬 수 있습니다.
  4. @{commit-hash}: 직접 커밋 해시(해당 커밋의 고유 식별자)를 지정하여 특정 커밋을 가리킬 수 있습니다.
  5. @{branch-name}: 특정 브랜치의 위치를 가리킬 수 있습니다.

이러한 표기법을 사용하면 Git에서 다양한 상황에서 브랜치, 커밋 및 이력을 참조할 수 있으며, 특정 시점이나 이전 위치에 대한 정보를 쉽게 얻을 수 있습니다.

[git] 추가된 파일이지만 변경은 무시하고 싶은 경우

git에서 repository에 파일은 추가해서 두고 싶지만 해당 파일이 빌드 중 변경되는 등의 이유로 변경은 무시하고 싶은 경우가 있다. 이런 경우 .gitignore에 추가해도 repository에 추가된 파일이므로 변경을 계속 추적하게 된다. 이 변경을 무시하고 싶다면 다음 명령을 주면 된다.

git update-index --assume-unchanged <file>

위 명령을 주면 해당 파일은 변경되어도 git status를 해도 나오지 않고 무시된다. 그러므로 주의해야 한다. 해당 파일을 다시 추적하고 싶다면 다음 명령을 입력한다.

git update-index --no-assume-unchanged <file>