처음에 SVN을 한 1년 사용하고 부터는 꾸준히 Git 을 사용하면서 Git 의 장점을 많이 느끼고 있다.
SVN 은 Commit 을 하게되면 바로 저장소에 반영이 된다. 그렇다는 것은 다른 사용자와 충돌이 날 가능성이 매우 높다는
것이다. 실제 전 회사에서도 많이 겪은 상황이다. 일을 2번 해야되는 상황이 발생한다.
Git 은 Commit 을 해도 Local 저장소에 반영이 되며, Push 를 통해 원격 저장소에 반영이 된다. 그 작업 전에 Fetch 와
Pull 등으로 Merge 를 할 수 있다.
이런 기능 외에도 아주 다양하며, 아주 좋은 형성관리이다.
하지만 최근 Git 때문에 골치가 아프다.. 아니 정확히 말하면 Git 서버를 구성했는데 그 녀석이 말썽이다.
바로 Git 서버 Disk 가 맛이 갔기 때문에다. Git 을 백업 해두었으나 그 녀석들도 망가져있었다.
망가져있다는게 무슨 상태이냐하면.. 몇몇 Project 들이 Git Clone 이 불가능하게 되었다.
분석을 해본 결과 왜 Clone 이 불가능 하냐면, 실제 packfile 이 손상이 되었다.
pack 이란 우리가 git add commit push 등을 하며, 생긴 object 그리고 여러 branch 들의 데이터 주소를 가지고 있는
데이터베이스 이다. 그런데 서버 디스크가 손상되면서 하필 일부 packfile 이 손상이 되어버린것이다.
git fsck --full 을 통해서도 검사가 가능하다. pack 이 손상되었다면 손상된 pack 의 object 의 정보를 나열해준다.
pack 이 정상적이라면 git verify-pack verify-commit 를 통해 pack 안에 존재하는 여러 데이터를 볼 수 있다.
안을 들여다 보면 실로 꽤 재미있다. 우리가 작업한 tree binary 데이터 들이 전부 들어가있다.
다시 돌아와서, 어떻게든 최소한의 손실로 복구를 하기위해 생각한 것은 손상된 Pack 제거를 통해 나머지 Pack 을 살려
최소한 데이터 손실을 통해 정상적인 상태로 돌리자 였다. 하지만 그 결과, master 가 가르키는 Pointer 를 잃어버리는 상
황이 발생되었다. 즉, 손실된 Pack 이 최근 작업내용이며 Master Branch 또한 손실된 것이다. 그럼 Master Branch 를 정
상적인 녀석으로 Pinting 하면 되는것 아니냐,.. 그렇게 해보았으나 그것또한 실패하였다.. Master 가 가르키는 녀석을 변
경해도 그 밑에 데이터가 연관성있게 줄지어서 손실이 된것같다는 결론이 나왔다. pack 을 지움으로써 관련된 데이터들
이 같이 증발해버린것이다.
결국 새 Repository 를 만들어 로컬에 있는 데이터를 push 하여 작업 공간을 새로 만들었다..
하지만 문제는 history 가 필요한 Repository 의 경우 이것이 해결책이 아니라는 것이다.
이 부분에 대해서는 계속 고민 진행 중이다.. TODO
'Git' 카테고리의 다른 글
Git status 상태 확인 (0) | 2020.11.29 |
---|---|
Git bash 를 해보자 (1) | 2020.05.06 |