security/화이트햇

git 사용하기 - github pull/push/pull request

민사민서 2023. 9. 28. 16:42

내 프로젝트를 Github에 업로드하기

- git 초기화하기

git init

- git에 원격 저장소 추가하기

git remote add origin https://github.com/minseo25/vulnhub_analysis.git

- 프로젝트 디렉터리의 모든 파일 staging 및 커밋

git add .
git commit -m "any commit message"

- 해당 브랜치를 원격 저장소의 main branch로 push 한다

git push -u origin main

// github 인증은 token generating 방식으로 하면 된다

 

만약 branch 이름이 main이 아니면 현재 브랜치 이름을 확인하고

git branch

브랜치 이름을 변경한다 (ex. master -> main)

git branch -m master main

 

외부 프로젝트에 대해 Pull Request 보내기

- 대상 프로젝트(ex. https://github.com/gunh0/whitehat-school-vulhub.git)로 이동 후 오른쪽 상단의 Fork 버튼 클릭. 해당 레포지토리가 내 github 계정 아래로 복사됨

- fork한 레포지토리를 로컬에 복제한다

git clone https://github.com/minseo25/whitehat-school-vulhub.git
cd whitehat-school-vulhub

- 원격 저장소를 "upstream" 이라는 이름으로 추가해놓는다

git remote add upstream https://github.com/gunh0/whitehat-school-vulhub.git

- 브랜치를 새롭게 생성 후 해당 브랜치로 전환한다. 여기서 프로젝트 변경 사항을 적용할 것이다

git checkout -b apache_druid_vuln

- 변경사항을 진행한다 (파일 수정, 기타 작업 폴더 복사해오기)

- 변경 사항 staging 및 커밋 진행한다

git add .
git commit -m "CVE-2021-25646 analysis"

- fork한 레포지토리를 로컬에 복제해왔을 때, origin은 기본적으로 clone한 레포지토리의 url을 가리킨다

- 변경 사항을 github의 포크한 저장소에 push한다. 물론 github 인증 필요

git push origin apache_druid_vuln

- 내가 fork한 repository로 이동하면 New pull request 버튼이 표시된다. 클릭 후 제목 및 설명 입력하고 PR 생성한다

 

 

cf) PR 시 수정사항이 서브모듈로 표시될 때

- 서브모듈은 하나의 Git 저장소 안에 다른 Git 저장소를 포함하는 방법이다

- 이렇게 하면 본래의 Git 저장소에서 서브모듈의 내용을 직접 볼 수 없고 사진처럼 서브모듈에 대한 참조만 볼 수 있다

 

* 왜 일반 폴더가 아닌 별개의 Git 저장소(=서브모듈)로 취급이 되는가?

- 해당 폴더 내부에 .git 폴더가 있기 때문이다 (미리 업로드 테스트하느라고 .git이 존재했었다)

rm -rf apache-druid/CVE-2021-25646/.git

이렇게 .git 제거 후 변경사항 commit 후 push 하니까 pr 내용이 자동으로 업데이트 되더라

 

cf) error: 레퍼런스를 ~에 푸시하는데 실패했습니다 현재 브랜치의 끝이 리모트 브랜치보다 뒤에 있으므로 거부되었습니다

- git pull origin apache_druid_vuln 이렇게 리모트 저장소의 최신 변경사항을 현재 로컬 브랜치에 merge 하고

- git push origin apache_druid_vuln 이렇게 다시 push 한다