chanyong's notepad

[Github] fork한 레포지토리 수정하기 및 troubleshooting 본문

개발 일지, etc/git, github

[Github] fork한 레포지토리 수정하기 및 troubleshooting

chanyongp 2024. 10. 11. 17:01

 

GitHub에서 오픈 소스 프로젝트에 기여하거나 개인 프로젝트를 관리할 때 자주 사용하는 기능이 fork입니다.

fork는 원본 프로젝트를 내 계정으로 복사해 수정하고 실험할 수 있는 유용한 방법입니다.

본 글에서는 포크한 레포지토리를 수정하고 푸시할 때 발생할 수 있는 문제와 그 해결 방법을 정리해 보겠습니다.

 

1. fork한 레포지토리 수정 후 push하기

1) fork한 레포지토리 clone하기

 

GitHub에서 포크한 레포지토리를 로컬로 클론합니다. 이 과정은 내 컴퓨터에서 코드를 수정할 수 있도록 합니다.

git clone https://github.com/your_username/repo_name.git
cd repo_name

 

2) 코드 수정하고 commit하기

수정하고 싶은 파일을 편집한 후, 변경 내용을 커밋합니다.

git add .
git commit -m "파일 수정 내용"

 

3) push하기

커밋을 완료한 후 원격 저장소에 푸시합니다.

git push origin main

 

2. 인증 문제 해결: Personal Access Token 설정

이때, 아래와 같은 인증 관련 에러가 발생할 수 있습니다.

Missing or invalid credentials.
Error: connect ECONNREFUSED

 

이 에러는 GitHub에서 인증이 필요하기 때문에 발생하는 문제입니다. 최근 GitHub는 암호 대신 Personal Access Token(PAT)을 사용하기 때문에 발생합니다.

 

GitHub는 보안을 강화하기 위해 기존의 비밀번호 인증 대신 Personal Access Token을 사용하도록 변경했습니다. 푸시 시 인증 문제가 발생하면 Personal Access Token으로 문제를 해결할 수 있습니다.

 

1) Personal Access Token 생성하기

1. GitHub에 로그인 후, Settings > Developer settings > Personal access tokens > **Tokens (classic)**로 이동합니다.

2. Generate new token을 클릭한 후 필요한 권한(예: repo)을 선택하고 토큰을 생성합니다.

3. 생성된 토큰을 복사합니다.

 

2) Git 리모트 URL 변경하기

이제 로컬 저장소의 원격 URL을 생성한 Personal Access Token으로 업데이트합니다.

git remote set-url origin https://<your_username>:<your_token>@github.com/your_username/repo_name.git

 

3) 다시 푸시하기

이제 다시 푸시를 시도합니다.

git push origin main

 

3. 민감한 정보 포함으로 인한 push 차단: Secret Scanning 해결

푸시를 시도할 때 GitHub의 secret scanning 기능에 의해 푸시가 차단될 수 있습니다. 이 기능은 코드에 API 키나 비밀번호 같은 민감한 정보가 포함된 경우 푸시를 차단합니다.

 

1) 민감한 정보 제거하기

에러 메시지에서 OpenAI API 키 등의 민감한 정보가 포함되어 있다는 경고가 뜬다면, 해당 키를 코드에서 제거하거나 환경 변수로 관리하는 방식으로 변경합니다.

# global_methods.py 예시
import os
openai_api_key = os.getenv("OPENAI_API_KEY")  # 환경 변수로 관리

 

2)  커밋에서 민감한 정보 완전히 삭제하기

이전 커밋에 민감한 정보가 포함된 경우, Git 기록에서 해당 정보를 완전히 삭제해야 합니다. 이를 위해 Git rebase를 사용할 수 있습니다.

git rebase -i HEAD~n  # n은 수정할 커밋 수

 

3) 커밋 삭제

위 방법들로도 해결되지 않는다면, 이전에 문제가 되었던 커밋들을 삭제할 수도 있습니다.

git reset HEAD^

 

 

위 과정들을 통해 Git 히스토리에서 민감한 정보를 완전히 삭제한 후 다시 푸시할 수 있습니다.

이때 푸시 과정은 아래와 같습니다.

git commit --amend // 기존 commit에 이어서 진행하기
git rebase --continue
git push --force-with-lease

 

4. 정리

GitHub에서 포크한 레포지토리를 수정하고 푸시하는 과정은 간단해 보이지만, 인증 문제나 민감한 정보의 유출 때문에 종종 푸시가 차단될 수 있습니다. 특히, GitHub의 secret scanning 기능은 프로젝트 보안을 위해 매우 중요하므로 API 키 등의 민감한 정보를 안전하게 관리해야 합니다.

 

References : 

https://engineerinsight.tistory.com/234

 

[Git] upstream: 개념, 사용 방법, 명령어, 주의사항

💋 인트로 깃허브의 upstream은 다른 개발자의 원격 저장소에 있는 변경사항을 가져오는 기능입니다. 이를 통해 협업하고 있는 프로젝트의 최신 업데이트를 받아올 수 있습니다. 💋 개념 깃허브

engineerinsight.tistory.com

https://algoroot.tistory.com/28

 

[Git, Github] error: src refspec main does not match any 완벽 해결

오랜만에 깃헙에 소스 좀 push 하려고 하는데 또 이러네.. 저번에도 마주한 오류 문구라 똑같은 방법으로 했지만 되지 않았다. 그 이후에도 폭풍 구글링으로 여러 방법을 써보았다. 내가 시도해본

algoroot.tistory.com

 

https://abled.tistory.com/13

 

#11 깃(Git) - 커밋을 삭제하고 취소하기 (reset)

안녕하세요! 에이블디 입니다! 오늘은 지난 시간에 이어 커밋을 취소하는 방법에 대해 알아볼 건데요, 이번 시간에는 커밋을 삭제하고 취소하는 방법에 대해 알아보겠습니다! 지난 시간에 abled.t

abled.tistory.com

 

 

반응형