- [ISSUE] commit 시점이 뒤에 위치한 Branch2023년 04월 10일
- 조별하
- 작성자
- 2023.04.10.:36
프로젝트 시작단계, 서로 맡은 업무를 진행하며 프로젝트 초기 세팅을 하는 기간이다. 우리는 프로젝트를 시작하며 처음으로 github의 oranization을 통해 repository를 공유받아 해당 repository에서 협업을 진행하게 되었다. 협업의 꽃은 바로 git과 github이지만 한 명의 구성원이라도 숙지를 제대로 하고 있지 않으면 문제에 맞닥드리기 아주 쉽다.우리는 브랜치 전략으로 main브랜치에서 develop와 feature, bugfix, docs, conf 등의 브랜치를 가지는 전략을 취하기로 하였다.
➤ Issue1-올리지 말아야할 파일
처음 main브랜치에 프로젝트 초기 셋팅을 잡아 main브랜치에 push를 하게 되었는데, github에 초기 프로젝트를 처음 올리기 때문에 .gitignore에 추가해야 할 것과 추가하지 말아야 할 것을 구분하지 않고 원격 repository에 전부 올리게 됨.
📌 django 프로젝트에서는 __pycache__파일과 db.sqlite3 그리고. secret 폴더 및 파일이 원격 repository에 올라갈 이유가 없으며 특히. secret파일의 경우는 절대 다른 서버나 공유되는 공간에 올라가면 안 되는 폴더 및 파일이다.
아직 secret_key를 분리하지 않고 올렸기 때문에 새로 secret_key를 생성할 필요가 없었지만 나머지 __pycache__파일과 db.sqlite3 파일은 원격 repository에서 내릴 필요가 있었다. 그래서 새로 브랜치를 생성한 후 필요 없는 파일과 폴더를 브랜치 상에서 제거한 후 push이후에 원격 레포지터리에서 main과 그 새로 생성한 브랜치를 PR을 요청하였다.
➤ Issue 2-git 명령어 숙지 미숙
브랜치 생성 후 add/commit을 하지 않고 push진행, develop계정에 main과 똑같이 필요가 없는 파일들이 올라가는 상황 발생
develop 브랜치는 github에서 예약어와 같은 브랜치이기 때문에 protected가 설정되어 있어 삭제 불가능
➤ Issue 3-git 시점 파악 미숙
develop에서 작업이 불가능하여 새로운 브랜치 conf 로 필요 없는 파일과 폴더를 제거 후 main과 PR작업 진행, main이 develop보다 앞선 시점을 가짐
현재 위와 같이 origin/main과 origin/HEAD는 새로운 브랜치(conf)와 PR작업을 통해 앞선 시점으로 이동하였고 병합 작업을 진행하지 못한 origin/develop와 develop는 main보다 뒤에 시점에 있는 것을 확인할 수 있다.
➤ Issue 해결 시도 1
develop 브랜치에서 원격 repository에 있는 제거해야 할 파일(__pycache__, db.sqlite3 등)의 파일을 제거 후 원격 develop 브랜치로 push 시도
위와 같이 "Protected branch update failed for refs/heads /develop"라는 error문구 발생
기본적으로 Github는 develop라는 브랜치를 예약어와 같이 사용자가 브랜치를 생성하게 되면 옵션에 삭제하지 않게 하는 것이 존재한다. 개발 브랜치이기 때문에 해당 브랜치에 기본적으로 잡히는 or repository 생성자가 제공할 때 해당 옵션을 설정하여 주었던 것 같다. 그렇기 때문에 develop브랜치를 삭제했다가 새로 생성하는 작업은 불가능 하고 develop에서의 파일 삭제도 불가능 한 것으로 보인다.
➤ Issue 해결 시도 2
원격 main 브랜치를 develop 브랜치로 pull request 시도
위와 같이 main 브랜치와 develop브랜치 간에 일치하지 않는 변경사항이 있는지 Can't automatically merge라고 하며 자동으로 merge 시킬 수 없다고 한다.
이 경우 #1 main 브랜치와 develop 브랜치의 내용을 일치시켜 PR작업을 해야 하는데 현재는 원격 develop브랜치에 push가 되지 않는 상황이기 때문에 불가능 판단
➤ Issue 해결 시도 3 (해결한 방법)
마지막으로 시도해본 방법 세 번째는 main과 develop브랜치 외의 다른 브랜치를 생성하여 develop 브랜치에 존재하는 필요 없는 파일과 폴더를 제거 후 원격 repository에 push 하여 PR을 하는 작업이다.
📌 단, #1에서의 작업을 새로 생성할 conf라는 브랜치에서 내용을 일치시켜 develop과 PR작업 후 다시 main과의 PR작업에서Can't automatically merge가 뜨지 않게 해줘야 한다.
위의 git graph 차트는 conf 브랜치를 생성 후 필요하지 않은 파일들을 제거 후에 develop와 동기화 이후에 다시 main 브랜치에 PR작업을 진행한 결과이다.
결론적으로 협업 시 이런 브랜치 전략을 사용할 거야에서 끝나는 것이 아닌 브랜치 별 PR작업의 순서와 중요성을 다시 한번 깨달았다.
main브랜치에서 develop브랜치를 생성을 한 후 feature브랜치 등에서 다른 작업을 시도할 때 반드시 develop브랜치와 PR작업 이후 main과 동기화가 진행이 되어야 하며 그렇게 진행되지 않으면 develop도 다른 feature브랜치와 별반 다를 게 없는 브랜치가 된다.
1. 원격 repository로 push를 진행 시 반드시 내가 add, commit 한 내용을 확인해야 한다.
2. git branch전략에서는 다른 feature브랜치는 반드시 develop브랜치와 PR작업을 진행 후 동기화되어야 한다.
3. develop 브랜치의 경우 github에서 함부로 삭제 및 변경이 되지 않게 막을 수 있는 설정이 있다.
4. 만약 실수로 PR이 순차적으로 진행이 되지 않았을 경우 우회하는 브랜치를 생성하여 PR을 통해서 merge작업을 해줘야 하며, 이때 PR의 기준이 되는 브랜치와 코드를 일치시켜줘야 한다.
위의 4가지를 반드시 상기하며 깃 작업을 진행해야 이번과 같은 Issue가 발생하지 않을 것이다.다음글이전글이전 글이 없습니다.댓글