[잡담] WSL vscode extension 에러, 그에따른 백업

telnet turtle·2022년 12월 23일
0

WSL 고쳐보기

목록 보기
1/2
post-thumbnail

WSL2 Ubuntu에서 사용중인 vscode에서 extension 에러가 발생해서 사용이 불가능해졌다. 재부팅도 재설치도 소용없기에 wsl을 지웠다가 다시 설치해야겠다 마음먹었다.

장애물은 그동안 wsl에서 코딩한 작업물들이었다. 어느 게 백업되어있고 어느 게 백업되어있지 않은지 구분할 수가 없어서 25개정도 되는 폴더들을 찾아다니며 git 로그를 확인했다.

백업여부 확인방법

나는 Windows 컴퓨터와 WSL 내부, 맥북에서 작업을 하니까 3개의 작업 공간이 있다. 여러 군데에서 확인하기가 번거로우므로 나는 주로 private git repo를 이용해서 백업해왔다. 그리고 각 작업공간의 작업물은 최신 코드인지 확신하기 어렵다. 마지막에 작업한 공간의 작업물이 최신일 확률이 높기 때문이다. 따라서 나는 다음 방법으로 백업여부와 최신화여부를 판단하였다.

  1. 워킹디렉토리가 git 리포지토리에 연동되어 있는가?
  2. git origin이 최신 커밋인가?
    1. 이 때 main, master 외 브랜치 여부를 확인해야 한다.

VScode 익스텐션이 고장났으므로 평소 git graph GUI로 확인하던대로 편리하게 확인할 수 없다. 따라서 예전에 사용하던 CLI 명령어들을 이용해서 확인키로 했다.

git remote 존재여부 확인하기

$ git remote -v

git remote -v 명령어를 써서 리모트를 확인할 수 있다.

위의 사진처럼 나올텐데, origin은 원격 저장소의 이름이고, 뒤는 주소이다. 이 때 주소는 주로 https나 git 프로토콜로 시작하게 된다. https면 웹브라우저로 접속 가능하겠지만 git:// 은 무엇일까? GitHub만 사용하는 사람이라면 아마 자신의 리포지토리 중에 주소와 동일한 이름의 저장소가 있을테니 찾아보면 된다. (사설 git 서버나 내부 서버를 사용하고 있다면 이 글은 읽을 필요가 없다.)

git log로 커밋그래프 확인하기

원격 저장소가 있다면 원격과 워킹디렉토리 중 어떤 커밋이 최신인지 비교해봐야 한다. push하지 않은 몇개의 커밋을 날려버릴 가능성을 없애기 위함이다.

$ git log --graph --oneline --all -n 20

git log 명령어에 --graph 옵션을 붙이면 커밋그래프를 출력해준다. --oneline 옵션은 1커밋을 한줄로 표현해달라는 뜻이다. --all 옵션은 모든 커밋을 다 보여주기 때문에 "어떤 브랜치로 switch해서 확인해봐야 하지" 고민을 날려준다. 마지막으로 -n 20은 최신 20개의 커밋만 표시하라는 뜻이다. 나는 붙여서 쓰지 않지만 500개짜리 커밋이 터미널에 출력되면 귀찮을 수도 있으니, 혹시 모르니 넣어서 쓰면 된다.

위와 같이 구름 자리에 커밋 ID가 나오게 되고, 오른쪽에 브랜치와 커밋 메시지가 표시된다. 왼쪽을 잘 보면 그래프가 그려져 있음을 볼 수 있다.

GitHub에 publish하기

VScode에선 편하게 커밋했지만 CLI로는 조금 번거롭다.

Git 저장소가 아니라면 git init으로 저장소로 만들 수 있다.

$ git init
Initialized empty Git repository in /fake/path/name/foo/.git/

git status로 현재 저장소의 status를 확인할 수 있다.

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        11.js
        15.js
        152.js

nothing added to commit but untracked files present (use "git add" to track)

git add --all로 현재 워킹디렉토리의 모든 파일을 stage할 수 있다.

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   11.js
        new file:   15.js
        new file:   152.js

git commit으로 커밋할 수 있다. -m 옵션으로 커밋메시지를 추가할 수 있다.

 git commit -m "First commit"
[master (root-commit) [commit-id]] First commit
 3 files changed, 116 insertions(+)
 create mode 100644 11.js
 create mode 100644 15.js
 create mode 100644 152.js

다시 git log 명령어로 커밋그래프를 확인해보자.

$ git log --graph --oneline
* [commit id] (HEAD -> master) First commit

git branch -m main으로 브랜치 이름을 main으로 바꿀 수 있다.

이제 github에 publish해보자. 먼저 github.com에 가서 빈 원격 저장소를 생성하자.

저장소 이름도 짓자. orbit이라고 적은 곳이 이름을 쓰는 곳이다. public과 private을 선택해서 공개 저장소나 남들이 보지 못하는 저장소 어떤 것을 만들지 선택할 수 있다.

빈 저장소를 만들면 위처럼 보인다. Push 프로토콜로 https와 ssh를 선택할 수 있는데 https를 써보자. ssh를 사용하는 방법은 이 글에서 설명하진 않을것이다. 이 문서를 읽어보자: SSH를 통한 GitHub 연결 - GitHub Docs

사진에서 HTTPS 버튼을 누르고 "https://github.com/telnturtle/orbit.git"와 같은 링크가 표시되면 오른쪽끝 버튼을 눌러 복사한다.

$ git remote add origin https://github.com/telnturtle/orbit.git

git remote add를 사용해서 로컬 git 저장소에 원격 저장소를 등록한다. 그 후

git push -u origin main
Username for 'https://github.com': ^C
$ git remote add origin git@github.com:telnturtle/orbit.git
fatal: remote origin already exists.
$ git remote remove origin
$ git remote add origin git@github.com:telnturtle/orbit.git
$ git push -u origin main
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 12 threads
Compressing objects: 100% (13/13), done.
Writing objects: 100% (13/13), 5.22 KiB | 5.22 MiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To github.com:telnturtle/orbit.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

HTTPS를 써서 원격저장소에 push하려 했지만, Username과 password를 입력하라고 떴다. 이미 등록된 SSH key를 이용하기 위해서 remote를 제거하고 SSH 주소를 다시 등록했다. 그 후 push하면 github의 origin에 업로드된다.

마무리

오랜만에 CLI를 사용해서 git을 조작해봤다. 그동안 편하게 사용하게 해준 vscode에게 고마움을 느끼며, 백업을 마무리하고 WSL을 재설치해볼 것이다. WSL을 재설치할 때 이슈가 생기면 그 주제로 포스팅을 올려보겠다.

profile
프론트엔드 엔지니어

0개의 댓글