
(하아.... 😭😭😭) Git....
Git에 대해서 개념 및 어떻게 사용해야하는지에 대해서 다시 한번더 정리를 하겠지만.. 내가 경험해본 위험성에 대해서 공유 하고 정리를 해보려고 한다.
회사에서 같이 협업을 해서 웹 개발을 진행중이였으며, Git으로 형상 관리를 하고 있었다. 우리는 이미 많은 커밋과 푸시를 했으며 작업이 어느정도 진행된 상태였다. 나는 커밋된 특성 작성자의 변경이 필요했고 해당 부분에 대한 내용을 찾기 시작했다.
검색을 해본 결과 일괄로 저장하는 스크립트를 찾아서 적용을 했다. 스크립트는 아래와 같다.
git filter-branch -f --env-filter '
WRONG_EMAIL="체크할 이메일"
NEW_NAME="변경할 사용자명"
NEW_EMAIL="변경할 이메일"
if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
해당 스크립트의 경우, branch에 있는 내용중 스크립트내용처럼 filter를 해서 특정 사용자명과 이메일을 변경을 해준다.
저 부분에서 중요하게 봐야할 옵션은 "-f "옵션이다.
해당 옵션을 사용한 뒤 나는 git push -f 명령어를 통해서 git server에 해당 내용을 올렸다.
git push -force
로컬 변경사항들이 원격 변경 사항들과 호환되지 않는 경우 사용자가 변경사항을 push하는 유일한 방법이다...⚡⚡
해당 명령어를 통해서 나는 원격 저장소에 나의 변경된 내용을 push 했고 원격 저장소에는 멀티버스가 생성되었다..ㅠㅠ


우리는 이미 많은 브랜치를 따고 각각의 작업이 되어있어서 선이 여러개 있었지만 나의 push로 인해서 동일한 내용이지만 동일하지 않은 내용이 원격 저장소에 올라가 버렸다..(등에서 식은땀이 났다...😰😰😰)
해당 푸쉬에 대한 내용을 돌릴수 있는 방법에 대해서 여러 방면으로 찾았지만 이미 강제로 원격 저장소에 push를 해버린 이상 방법이 없다는 것을 깨달았다...
다행이 git 메인 서버와 별도로 백업 서버에 메인 git 서버에 있는 내용들을 전부 미러링 해놨고, 하루 단위로 백업이 되도록 설정을 해놓았었기 때문에 해당 백업 프로젝트를 기준으로 다시 작업을 진행 하였다...
아마 나처럼 이렇게 같이 개발하는 프로젝트의 원격 저장소를 건드리는 사람은 없을것이다. 나 또한 따로 프로젝트를 빼서 저장소를 새로 만들고 테스트를 진행 하던 도중 원본 프로젝트 bash창인줄 모르고 명령어를 입력했고 해당 이슈가 발생했었다.
커밋된 내용을 변경을 하게 되면 무조건 PID(리비전 번호)가 새로 생성이 되게 된다. 이렇게 되면 같이 공동 작업을 하는 다른 사람의 경우 pull을 하게 되면 해당 내용을 다르다고 인지를 하게 되고 병합 하는 과정에서 트러블이 발생하게 될 가능성이 존재하게 된다.
해당 실수를 바로잡기 위해서 git의 구조 부터 git의 여러 명령어에 대해서 찾아볼수 있는 계기가 되었다
다시 한번 느끼는거지만 백업은 무조건 해야한다...!!
'CS' 카테고리의 다른 글
| [CS] 오토 박싱 & 오토 언박싱에 대한 내용 및 성능 정리 (0) | 2023.02.19 |
|---|---|
| [CS] 업캐스팅 & 다운 캐스팅에 대한 내용 정리 및 사용 이유 (1) | 2023.01.24 |
| 네트워크에 대한 기본 개념 정리 (0) | 2022.10.12 |
| HTTPS 개념 및 내용 정리 (1) | 2022.10.08 |
| 프로세스와 스레드에 대한 내용 정리 (0) | 2022.10.06 |