๐Ÿ“’ ๋ฉ”๋ชจ์žฅ

[๋ฉ”๋ชจ] Git & Bash ํŠœํ† ๋ฆฌ์–ผ

Ardor924 2023. 11. 29. 03:20
ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค์—์„œ ์ง„ํ–‰ํ•˜๋Š” 
AI๋ถ€ํŠธ์บ ํ”„ ๊ต์œก๊ณผ์ •์„ ํ† ๋Œ€๋กœ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ์‰˜(shell)


1.1 ๊ฐœ์š”


์šด์˜์ฒด์ œ์˜ ์ปค๋„๊ณผ ์‚ฌ์šฉ์ž๋ฅผ ์ด์–ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด

1.1.1 ์ข…๋ฅ˜


  • 01 sh(Bourne Shell)
  • 02 csh
  • 03 bash
  • 04 zsh

1.2 ์ปค๋งจ๋“œ


1.2.1 ํด๋”๋‚ด ํŒŒ์ผํ™•์ธ


$ ls

์˜ˆ์‹œ :
$ ls

1.2.2 ๋””๋ ‰ํ† ๋ฆฌ ์ด๋™


$ cd ํด๋”์ฃผ์†Œ

์˜ˆ์‹œ :
$ cd Document

1.2.3 ํด๋”์ƒ์„ฑ


$ mkdir ํด๋”๋ช…

์˜ˆ์‹œ :
$ mkdir dev

1.2.4 ํŒŒ์ผ์ƒ์„ฑ(linuxํ™˜๊ฒฝ : ubuntu, git bash)


$ touch ํŒŒ์ผ๋ช…

์˜ˆ์‹œ :
$ touch sample.py

1.2.5 ํŒŒ์ผ์ƒ์„ฑ(windowํ™˜๊ฒฝ : powershell)


> New-Item ./ํŒŒ์ผ๋ช…

์˜ˆ์‹œ :
New-Item ./sample.py

1.2.6 ํŒŒ์ผ์ด๋™(ํŠน์ •ํด๋”๋กœ)


$ mv ํŒŒ์ผ๋ช… ํด๋”๋ช…/

์˜ˆ์‹œ :
$ mv sample.py dev/

1.2.7 ํŒŒ์ผ์ด๋™(ํŠน์ •ํด๋”๋กœ)


$ cp ๊ธฐ์กดํŒŒ์ผ๋ช… / ๋ณต์‚ฌํ• ํŒŒ์ผ๋ช…

์˜ˆ์‹œ :
$ cp sample.py / sample_copy.py

1.2.8 ํŒŒ์ผ์‚ญ์ œ


$ rm ํŒŒ์ผ๋ช…

์˜ˆ์‹œ :
$ rm newfile.md

1.2.9 ํด๋”์‚ญ์ œ


$ rm -rf ํด๋”๋ช…

์˜ˆ์‹œ :
$ rm -rf temp

1.2.10 ํด๋”์‚ญ์ œ


$ rm ํŒŒ์ผ๋ช…

์˜ˆ์‹œ :
$ rm newfile.md

1.2.11 ํŒŒ์ผ๋‚ด์šฉํ™•์ธ


$ cat ํŒŒ์ผ๋ช…

์˜ˆ์‹œ :
$ cat README.md

2. ๋น”(vim)


2.1 ๊ฐœ์š”


Bill Joy์˜ vi ํ™•์žฅํŒ์œผ๋กœ, CLI ๊ธฐ๋ฐ˜์˜ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์ด๋‹ค.

2.1.1 ๋ชจ๋“œ์ข…๋ฅ˜


01 ์ผ๋ฐ˜๋ชจ๋“œ(normal mode)

  
๋‹จ์ถ•ํ‚ค : (ESC)

02 ํŽธ์ง‘๋ชจ๋“œ(insert mode)

  
๋‹จ์ถ•ํ‚ค : (i)

03 ๋ธ”๋ก์„ค์ •(visual mode)

  
๋‹จ์ถ•ํ‚ค : (v)

04 ์•ก์…˜๋ชจ๋“œ(command-line mode)

  
๋‹จ์ถ•ํ‚ค : (:)

2.2 ์ปค๋งจ๋“œ


vim-command

2.2.1 ์ผ๋ฐ˜๋ชจ๋“œ(normal mode)


h j k l - left, down, up, right
i - insert mode
v - visual mode
ESC - back to normal mode
d - delete
dd - delete a line
y - yank
yy - yank a line
p - paste
u - undo
a - append
A - append from end of line
o - open line(under)
O - open line(upper)
H - move to the top of the screen
L - move to the bottom of the screen

2.2.2 ์•ก์…˜๋ชจ๋“œ(command-line mode)


:q - quit
:q! - override and quit
:w - write
:wq - write and quit
:{num} - Go to {num}th line

3. ๊นƒ(git)


3.1 ๊ฐœ์š”


๋ถ„์‚ฐํ˜• ๋ฒ„์ „๊ด€๋ฆฌ ์‹œ์Šคํ…œ

3.2 ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ ์ˆœํ™˜๊ตฌ์กฐ


git-cycle

Tip! : ์ˆ˜์ •์€ ๋˜๋„๋ก์ด๋ฉด push ํ•˜๊ธฐ์ „์— ํ• ๊ฒƒ!,


    
pull ํ•œ๋’ค๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค

3.3 ์ดˆ๊ธฐ์„ค์ •


#  ๊ฐœํ–‰๋ฌธ์ž ์„ค์ • (Window=true, Mac=input)
$  git config --global core.autocrlf true

#  ์ด๋ฆ„ ์„ค์ •
$  git config --global user.name ์‚ฌ์šฉ์ž๋ช…

#  ์ด๋ฉ”์ผ ์„ค์ •
$  git config --global user.email ์‚ฌ์šฉ์ž์ด๋ฉ”์ผ์ฃผ์†Œ

#  ํ…์ŠคํŠธ ์—๋””ํ„ฐํˆด ์„ค์ •
$  git config --global core.editor 'vim'

#  ํ…์ŠคํŠธ ํ™•์ธ์šฉํˆด ์„ค์ •
$  git config --global core.pager 'cat'

3.4 ๊นƒ์‚ฌ์šฉ ์ˆœ์„œ


3.4.1 CLI์šฉ (Linux๊ธฐ๋ฐ˜)


์ˆœ์„œ    ๋‚ด์šฉ ์ฝ˜์†” ๋ช…๋ น์–ด
1 ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ [์ƒ์„ฑ] None
2 ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ [ํด๋ก ] $ git clone ์ฃผ์†Œ
3 .gitignore ์ƒ์„ฑ๋ฐ์„ค์ • https://www.toptal.com/developers/gitignore/
4 pre-commit ์„ค์ • (https://pre-commit.com/)
5 ํŒŒ์ผ์ƒ์„ฑ[blob] $ touch ํŒŒ์ผ๋ช…
6 ํŒŒ์ผ ๋กœ์ปฌ๋“ฑ๋ก[tree] $ git add ํŒŒ์ผ๋ช…
7 ํŒŒ์ผ์ปค๋ฐ‹์ฐฝ ์—ด๊ธฐ(vim) $ git commit
8 vim์—์„œ ์ปค๋ฐ‹๋‚ด์—ญ์ž‘์„ฑ iํŽธ์ง‘-> ESC-> : wq๋กœ ์ €์žฅ
9 ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— [์—…๋กœ๋“œ] $ git push origin ๋ธŒ๋žœ์น˜๋ช…

๊ฐ ๋‹จ์œ„ ์ž‘์—…๋งˆ๋‹ค 4~6๋ฒˆ ๋ฐ˜๋ณต
์›๊ฒฉ ์—…๋กœ๋“œ์‹œ 7๋ฒˆ์ˆ˜ํ–‰

๐Ÿšฅ์ฐจ์ด์ ์€ ํ˜•๊ด‘ํŽœ ํ‘œ์‹œํ•จ

3.4.2 vsCode์šฉ (Window๊ธฐ๋ฐ˜ : powershell)


์ˆœ์„œ    ๋‚ด์šฉ ์ฝ˜์†” ๋ช…๋ น์–ด
1 ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ [์ƒ์„ฑ] None
2 ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ [ํด๋ก ] $ git clone ์ฃผ์†Œ
3 .gitignore ์ƒ์„ฑ๋ฐ์„ค์ • https://www.toptal.com/developers/gitignore/
4 pre-commit ์„ค์ • (https://pre-commit.com/)
5 ํŒŒ์ผ์ƒ์„ฑ New-Item ./ํŒŒ์ผ๋ช…
6 ํŒŒ์ผ ๋กœ์ปฌ๋“ฑ๋ก[tree] $ git add ํŒŒ์ผ๋ช…
7 ํŒŒ์ผ์ปค๋ฐ‹์ฐฝ ์—ด๊ธฐ(vim) $ git commit
8 vsCode์—์„œ ์ปค๋ฐ‹๋‚ด์—ญ์ž‘์„ฑ None
9 ์›๊ฒฉ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— [์—…๋กœ๋“œ] $ git push origin ๋ธŒ๋žœ์น˜๋ช…

๊ฐ ๋‹จ์œ„ ์ž‘์—…๋งˆ๋‹ค 4~6๋ฒˆ ๋ฐ˜๋ณต
์›๊ฒฉ ์—…๋กœ๋“œ์‹œ 7๋ฒˆ์ˆ˜ํ–‰

๐Ÿšฅ์ฐจ์ด์ ์€ ํ˜•๊ด‘ํŽœ ํ‘œ์‹œํ•จ

3.5 ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜ ๊ทœ์น™


3.5.1 ์–‘์‹


{type} : ์„ค๋ช… ์ž‘์—…๋‹จ์œ„ ์ถ•์•ฝ
fix!: resolve issue with login page

{body} : ์ž‘์—… ์ƒ์„ธ ๊ธฐ์ˆ 
This commit fixes an issue with the login page that prevented users from logging in.

{footer} ๋ถ€๊ฐ€์ •๋ณด
BREAKING CHANGE: since current version, drop social login support

3.5.2 ๋ถ„๋ฅ˜


๐ŸŸฅ feat: ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๊ด€๋ จ

๐ŸŸง fix: ์˜ค๋ฅ˜ ๊ฐœ์„  ํ˜น์€ ๋ฒ„๊ทธ ํŒจ์น˜

๐ŸŸจ docs: ๋ฌธ์„œํ™” ์ž‘์—…

๐ŸŸฉ test: test ๊ด€๋ จ

๐ŸŸฆ conf: ํ™˜๊ฒฝ์„ค์ • ๊ด€๋ จ

๐ŸŸช build: ๋นŒ๋“œ ์ž‘์—… ๊ด€๋ จ

โฌœ style: ์ฝ”๋“œ ํฌ๋งคํŒ… ๊ด€๋ จ

3.6 ํ”„๋ฆฌ์ปค๋ฐ‹(Pre-commit)


3.6.1 ๊ฐœ์š”


commit ์ˆ˜ํ–‰ ์ „ ์ฒดํฌํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์„ ์ž๋™ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ
URL : https://pre-commit.com/

3.6.2 ์ˆœ์„œ


1 pre-commit์„ค์น˜(์ „์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—)

2 ๋ฒ„์ „ํ™•์ธ

3 .pre-commit-config.yaml ์ƒ์„ฑ

4 pre-commit ์„ค์น˜(ํ˜„์žฌํ”„๋กœ์ ํŠธ์—)

5 pre-commit ์‹คํ–‰

# ์ฝ”๋“œ 

$ pip install pre-commit (or $ pip3 install pre-commit)
$ pre-commit --version
$ touch .pre-commit-config.yaml

# after setting configuration
$ pre-commit install
$ pre-commit run --all-files

3.7 ๋ธŒ๋žœ์น˜


3.7.1 ๊ฐœ์š”


๋ถ„๊ธฐ์ ์„ ์ƒ์„ฑํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก
๋„์™€์ฃผ๋Š” ๋ชจ๋ธ

๋ธŒ๋žœ์น˜ํƒ€์ž„๋ผ์ธ