Git 하위 디렉터리를 새 저장소로 분리하는 방법
먼저 git-filter-repo를 설치합니다. 의존성이 없는 파이썬 스크립트입니다.
설치는 아주 간단합니다. 스크립트를 PATH에 포함된 경로에 넣어주기만 하면 됩니다. 제 경우에는 다음과 같이 했습니다:
curl "https://raw.githubusercontent.com/newren/git-filter-repo/main/git-filter-repo" -o ~/.local/bin/git-filter-path주의할 점은 git-filter-repo가 저장소의 다른 모든 파일을 subdir에 있는 파일로 대체한다는 것입니다. 데이터 손실을 방지하려면 저장소의 새로운 복사본에서 작업해야 합니다.
저장소가 다음과 같이 구성되어 있다고 가정해 보겠습니다
🦄 ls -l
.rw-r--r-- ellie staff 0 B Mon Jul 29 14:13:39 2024 LICENSE
.rw-r--r-- ellie staff 0 B Mon Jul 29 14:13:34 2024 README.md
drwxr-xr-x ellie staff 64 B Mon Jul 29 14:13:35 2024 src/
drwxr-xr-x ellie staff 64 B Mon Jul 29 14:13:43 2024 subdir/이제 subdir의 내용을 별도의 저장소로 만들고 싶습니다.
다음 명령어를 실행하면 됩니다
git filter-repo --subdirectory-filter subdir커밋 메시지 다시 쓰기
저는 보통 컨벤셔널 커밋을 따르기 때문에 다음과 같이 스코프가 지정된 커밋이 많았습니다
feat(subdir): do a thing이제 subdir가 별도의 저장소가 되었으니 이런 커밋은 조금 어색하게 느껴집니다. 깔끔하게 정리해 보겠습니다!
git filter-repo --message-callback '
return re.sub(b"\(subdir\)\n", b"", message, flags=re.MULTILINE)
'글을 무작위로 읽기