Useless Github Debugging History


< 목차 >


이번 포스트는 별건 아닌데, 한국 시간으로 2021년 8월 13일쯤부터 터미널에서 git로그인을 통해 push가 안돼서 작성하게 되었다.

How to get Personal Access Token

먼저 원래 간단하게 로그인을 하고 direcotry에서 아래와 같은 커맨드를 입력하는 것으로 푸시가 됐지만

git add .
git commit -m "{commit 멘트}"
git push

이런 오류를 마주하게 됐다.

remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: unable to access "..." : The requested URL returned error: 403

공식 문서를 확인해보면 더이상 cli로 작업할 때 패스워드 로그인 하는걸로는 안된다는 것이고 personal token을 따로 받아야 접근이 가능하다고 한다.

위의 문서에서 하라는대로 하면 간단하게 토큰을 발급받을 수 있는데,

git_token1

이제 이를 사용해서 로그인하면 된다.

MacOS Keychain Access

하지만 여기서 MacOS를 쓰는 유저라면 터미널에서 즉각 사용하기 위해 따로 설정해줘야 할게 있다. 바로 keychain access 설정이다. 아래의 절차를 따라하면 간단하게 접근 설정을 할 수 있다.

git_token2

git_token3

git_token4

이제 행복 push를 하면 된다.

git_token5

Debug (21. 09. 28. 추가)

랩탑을 새로 바꿨더니 keychain에 github가 없는 문제가 있었다 (…?). 아마 최초 push를 안해줘서 그런거 같다. 근데 어센틱 키가 없으면 푸시를 할수가 없잖아요?

그래서 해결한 방법은 다음과 같다. (다시 설치하는거, 출처는 Github Docs : Caching your GitHub credentials in Git)

  • 1.Install Git using Homebrew:
$ brew install git
  • 2.Install GCM Core using Homebrew:
$ brew tap microsoft/git
$ brew install --cask git-credential-manager-core

이렇게 하고 push를 하면 (혹은 위와 같이 설치하고 MacOS keychain 탭에서 github를 검색해서 비밀번호 한번 입력해주면) 아래와 같이 어떤 페이지에서 인증을 하라고 한다.

git_token_bug Fig.

음… 뭐 갑자기 한글버전이 된거같지만 아무튼 잘 된다.

git_token_bug2 Fig.

How to Change Commit Author

git 으로 repo를 관리할 때 다른 사람 이름으로 commit, push를 했을 경우 commit author를 바꾸는 방법에 대한 글이다.

먼저 아래의 명령어로 현재 git의 user configuration을 살펴본다.

git config user.name
git config user.email

필자의 경우 물려받은 서버를 사용해서 작업하다보니 둘 다 다른사람의 정보가 입력되어 되어있었다. 정보를 아래와 같이 바꿔주면 되는데,

git config --global user.name "{바꾸고 싶은 이름}"
git config --global user.name "{바꾸고 싶은 메일}"

문제는 남의 정보로 이미 commit 및 push를 해버린 경우다.

이럴 경우

git log

를 통해 커밋된 정보들을 우선 확인하고

commit a2047d7a41b2aaad82558d0036
Author: {이름} <{이메일}>
Date:   Tue Sep 28 20:39:33 2021 +0900

    inference 코드 수정, README 변경...

commit 81a9531921c7bee90aca87604e
Author: {이름} <{이메일}>
Date:   Mon Sep 27 09:04:48 2021 +0900

    메모리 이슈로 multiprocessing 을 사용...

(임의로 commit hash값을 좀 지웠다.), 해당 커밋 값을 통해서 git rebase라는 커맨드로 정보를 수정해주면 되는데,

git rebase -i {commit hash값}

이 때 {commit hash값}에는 수정을 원하는 Commit의 바로 직전 hash값을 사용해야 한다고 한다.

이렇게 입력을 하면 vim이 뜨는데, 여기서 주석처리된 부분 말고 윗부분에 pick {커밋내용}이 뜬다. 여기서 vim 수정하는 방식과 같이 pick을 edit으로 바꿔주고 wq로 저장해주면 된다.

그리고

git commit --amend --author="{새로운 저자 이름} {새로운 저자 메일}"

이렇게 입력하면 된다.

그럼 git rebase --continue를 할거냐 뭘 할거냐 라고 물어보는데 git rebase --continue 쳐주면 된다. 해당 해쉬값에 커밋 내용이 많을 경우 Successfully ~~ 뜰때까지 git rebase --continue해주면 된다.

그리고 다 끝났으면 해당 브랜치에 푸시해주면된다.

git push -f

Re-init

code 관리를 하다보면 public repo에 민감한 정보가 push 돼서 이런저런 처리를 해도 history가 남을 경우가 생길 수 있다. 그럴 때 그냥 reinit 하는게 속 편할 수 있다.

rm -rf .git
git init
git config --global http.postBuffer 52428800 # increasing buffer size
git add .
git commit -m "refresh"

git remote add origin {github repo URL}
git push --force --set-upstream origin master # or main

Add Upstream

repo를 fork했을 때 원본 repo의 update사항을 계속 follow up하고 싶을 때 사용한다. 원래 repo를 upstream이라는 이름으로 추가해준다.

git clone <fork repo>
cd <fork repo>
git remote add upstream <fork의 원래 repo>

아래처럼 나와야한다.

tmp$ git remote -v
origin	<forked> (fetch)
origin	<forked> (push)
upstream	https://github.com/microsoft/DeepSpeedExamples (fetch)
upstream	https://github.com/microsoft/DeepSpeedExamples (push)
git fetch upstream
git merge upstream/master # master나 main
git push origin master

References