git rebase

terminal
1
git rebase main
  • main branch와 현재 브랜치가 충돌이 나서 자동 병합이 안될 떄
  • rebase를 톨해 로컬에서 충돌을 해결할 수 있다

npm repo command

  • npm repo 명령으로 연결된 원격 레포 페이지를 브라우저로 바로 열어볼 수 있다
  • 꿀기능이다

조건

package.json
1
2
3
4
5
6
7
{
// ...
"repository": {
"type": "git",
"url": "https://github.com/chinsun9/chinsun9.github.io.git"
}
}
  • package.json에 repository 필드가 존재해야 한다
  • npm init -y명령을 사용하면 알아서 git config를 읽어서 해당 필드들을 채워준다

npm bug

npm bug, npm bugs, npm issue

  • issue 페이지를 바로 열어볼 수 있다!
  • repo와 마찬가지로 bugs 필드가 존재해야 한다

참고

git branch set upstream to

terminal
1
git branch --set-upstream-to=origin/main main
  • 브랜치 리네임을 했을 때, 원격 레포와 로컬 레포에 매핑이 깨질 수 있다
  • 그럴 때 다시 바로잡아주자

빈 브랜치 생성하기 git checkout orphan

terminal
1
git checkout --orphan new-branch
  • 커밋 히스토리가 없는 빈 브랜치를 생성해보자

tip

2022-02-06 추가

  • 근데 빈 브랜치를 생성하고 체크아웃할 때 절망적이다
  • 차라리 새로운 디렉터리와 새로운 브랜치를 생성하고 리모트를 설정하는 게 정신건강에 좋다

참고

git filename too long

  • Filename too long 에러가 나왔다
  • git을 사용할 때 파일 패쓰명 길이에 제한이 있다는 것을 처음 알았다
terminal
1
git config --system core.longpaths true
  • 간단하게 명령어 한 줄로 해결할 수 있었다

TMI

  • 나는 gh-pages를 사용하다가 위 에러를 만났다

참고

git subtree split

클라이언트랑 벡엔드가 함께 있는 레포를 분리해보자

  • git subtree split로 분리할 수 있다
terminal
1
2
# git subtree split -P {디렉터리} -b {브랜치명}
git subtree split -P server -b b-server
  • 위처럼 명령하면, b-server 브랜치가 생성되고, server 디렉터리의 내용들로 채워진다
  • 깃 히스토리도 살아있다
  • git checkout b-server ; b-server 브랜치로 체크아웃한다
  • github에서 새로운 레포를 생성한다
  • git remote add new-server-origin {~.git} ; 새로 생성한 레포를 리모트로 추가해준다
  • git push new-server-origin b-server ; 새로운 리모트로 푸쉬한다
  • git checkout main ; main 브랜치로 돌아온다
  • 독립해버린 server 디렉터리를 삭제해준다

참고

ssh key passphrase 한번만 입력하기

  • 저번에 올린 글 ssh를 사용해 git clone 하기 에서는 ssh키를 생성할 때 비밀번호, passphrase를 따로 생성하지 않고 진행하는 것을 알아보았다
  • 비밀번호 생성을 하지 않은 이유는 비밀번호를 추가로 요구하기 때문이다
  • 하지만 ssh키와 비밀번호까지 사용한다면 더욱 안전하게 사용할 수 있다
  • 이번에는 비밀번호와 함께 ssh키를 생성하고, ssh-agent를 이용해서 암호를 요구하지 않도록 만들어보자!

결과

  • 최초 셸 실행 때 ssh 비밀번호를 입력하면, 앞으로 비밀번호를 묻지 않는다
  • 컴퓨터를 다시 켜면 물어본다

방법

(공식문서) https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/working-with-ssh-key-passphrases

  • 사용하는 터미널에 따라 다른 프로필을 설정해줘야 한다
  • 윈도우와 리눅스 모두 동일한 방법이다
~/.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi

unset env
  • 윈도우에서는 git bash를 이용한다
  • vi ~/.bashrc 명령해 vi 에디터로 위 내용을 추가해준다
  • i키를 눌러 입력 모드로 가서 위 내용을 붙여 넣고,
  • esc키를 눌러 입력 모드에서 나와서 :wq를 입력해 저장하고 나온다
  • 터미널에 source ~/.bashrc 명령해 터미널을 새로고침 한다
  • ssh 비밀번호를 요구하는데, 이때 한번 인증을 하면 이후에 비밀번호를 입력하지 않아도 된다

참고

ssh를 사용해 git clone 하기

깃허브에서 클론 할 수 있는 방법 2가지(ssh, pat)를 정리한다

ssh로 클론

ssh key 생성

  • git bash를 실행하여 진행한다
git bash terminal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
# 새로운 ssh 키 생성
# 생성할 때 파일명과 비밀번호를 지정해 줄 수 있다
# 비밀번호는 입력하지 않는다 (엔터키로 스킵)
# 비밀번호까지 지정해주고 싶으면 아래 링크를 참고하자
# https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/working-with-ssh-key-passphrases
# -C 옵션 뒤에는 자신의 이메일 등 적고 싶은 문구를 적는다
# ssh-keygen -t ed25519 -C "chin_sung@naver.com"
ssh-keygen -t ed25519 -C "안녕하세요요요요요"

cd ~/.ssh
# 공개키 내용을 전부 복사한다
cat id_ed25519.pub
# output: ssh-ed25519 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx chin_sung@naver.com
  • 나는 기본값으로 생성했다
  • ~/.ssh/id_ed25519
  • ~/.ssh/id_ed25519.pub
  • .pub 파일이 이제 깃허브에 등록해야 하는 공개키이다
  • cat 명령으로 읽어서 복사해두자

ssh key 등록

참고

PAT으로 클론

terminal
1
2
# git clone https://{pat}@github.com/{username}/{repo}
git clone https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@github.com/chinsun9/my-private-repo.git
  • personal access token으로도 클론 할 수 있다. 자세히

github action practice

깃허브 액션~!
내 프로젝트가 다른 환경에서도 잘 동작하는지 확인해보자

.github/workflows/github-actions.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
name: github actions practice

on:
workflow_dispatch:
branches: [master]

jobs:
test:
runs-on: ${{matrix.os}}

strategy:
matrix:
os: [ubuntu-latest, macos-latest] # https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
node-version: [10.x, 11.x, 12.x, 13.x, 14.x, 15.x, 16.x]

steps:
- uses: actions/checkout@v2 # 레포 클론할 때 필요

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2 # 노드
with:
node-version: ${{ matrix.node-version }}

- name: Install Rest Dependencies
run: npm install

- name: Initiate Test
run: npm test
  • name ; 원하는 이름을 설정해준다
  • on ; 워크플로를 트리거하는 이벤트를 지정한다 (실행 조건)
    • on: push ; 이렇게 단일 값을 지정해 줄 수 있다
    • on: [push, pull_request] ; 배열 값으로 지정해 줄 수도 있다
    • 나는 workflow_dispatch를 사용했는데, 이거를 사용하면 수동으로 워크플로우를 시작해야 한다. 깃허브 액션은 사용량 제한이 있어서 일단 아끼고 본다
  • jobs.<job_id>.strategy.matrix ; 워크플로를 실행할 환경을 설정한다
  • jobs.<job_id>.setps[*].uses ; actions/checkout@v2, actions/setup-node@v2를 사용했다. actions/checkout@v2은 현재 레포를 테스트 환경으로 클론 할 때 필요한 것이고, actions/setup-node@v2는 노드 버전을 구성하는데 권장하는 방법이라고 한다
  • jobs.<job_id>.steps[*].run ; 원하는 cli를 설정할 수 있다
  • jobs.<job_id>.steps[*].name ; 각 단계에 이름을 붙여줄 수 있다. 깃허브 액션 페이지에서 로그를 식별할 때 도움을 준다

참고