ect/git

[git] Gi&GitHub 실습

숲로 2024. 5. 10. 12:04

Git&GitHub

Git: 분산관리시스템

GitHub: 클라우드 기반의 호스팅 서비스

 


SSH

HTTPS

아이디 포함하고 있어 SSH보다 보안취약

소스코드 참조 보는 목적으로 쓸 때는 ok

 

SSH

암호화해서  전송하기

 

프로토콜?

웹서버-웹클라이언트

https://developer-talk.tistory.com/385#google_vignette

 

 

.

.뒤에 뭐가 붙어있으면 숨김파일

 


실습

 

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ cd ~ #홈디렉토리로 이동

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ pwd #경로확인
/c/Users/NT551

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ mkdir .ssh # 디렉토리 만들기

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ cd ~/.ssh

NT551@DESKTOP-8OUCO9P MINGW64 ~/.ssh
$ pwd
/c/Users/NT551/.ssh

NT551@DESKTOP-8OUCO9P MINGW64 ~/.ssh
$ ls #

$ ssh-keygen -t rsa -b 4096 -C "이메일"
#rsa 암호화방식 #b: 비트수 설정-> 무작정 높이면 처리 속도 느려져 현재 컴퓨팅 속도로 처리하는데 4096정도면 #-C 주석 누가 만든건지
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/NT551/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:


NT551@DESKTOP-8OUCO9P MINGW64 ~/.ssh
$ ls
id_rsa  id_rsa.pub

NT551@DESKTOP-8OUCO9P MINGW64 ~/.ssh
$ cat id_rsa.pub # 공개키


NT551@DESKTOP-8OUCO9P MINGW64 ~/.ssh
$ clip < ~/.ssh/id_rsa.pub
# < redirection 표준입력과 출력 방향을 바꾸는 거
파일에 있는 내용을 표준입력으로 받아라

 

pkc

공개키방식의 암호화

키 두개

하나는 나만가지고 하나는 공개 공인인증기관 

 

cat으로 출력한 공개키 내용을 복사해서 등록하기

 

 

NT551@DESKTOP-8OUCO9P MINGW64 ~/.ssh
$ cd ~

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ mkdir test

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ rm test
rm: cannot remove 'test': Is a directory

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ rm -r test

 

NT551@DESKTOP-8OUCO9P MINGW64 ~
$ cd test

NT551@DESKTOP-8OUCO9P MINGW64 ~/test
$ git init
Initialized empty Git repository in C:/Users/NT551/test/.git/

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ ls

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ ls -al # 숨김파일 확인
total 12
drwxr-xr-x 1 NT551 197121 0 May 10 10:58 ./
drwxr-xr-x 1 NT551 197121 0 May 10 10:58 ../
drwxr-xr-x 1 NT551 197121 0 May 10 10:58 .git/

 

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git config --global user.name "이름"
#

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git config --global user.email "이메일"

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git config --list

 

 

 

>>
ex) $ echo "# Git Test" >> README.md
표준출력을 readme.md라는 파일에 넣어라

<<
ex) $ clip < ~/.ssh/id_rsa.pub
 redirection 표준입력과 출력 방향을 바꾸는 거 파일에 있는 내용을 표준입력으로 받아라


한 개일때 두 개 차이
> 덮어쓰기 새로 만들어
>> 기존에 있는 파일에 덧붙이기 

 

 

 

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

# README입력
NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ echo "# Git Test" >> README.md
# >> 표준출력을 readme.md라는 파일에 넣어라

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ ls
README.md

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md

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

 

 

# add
NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git add README.md

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md
        
 # 로컬레포에 저장
 NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git commit -m "first commit"
[master (root-commit) 50bd16f] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git status
On branch master
nothing to commit, working tree clean


NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git log
commit 50bd16f93f5a2126a53ef989fbdfbabc34098f5a (HEAD -> master)
Author: 5dora <5dorabangs@gmail.com>
Date:   Fri May 10 11:10:34 2024 +0900

    first commit

 
 #remote 레포에 저장

해시함수-단방향

x로 y를 구할 수는 있는데

y로 x를 구할 수는 없음

 

# 브랜치 변경
NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git branch
* master

NT551@DESKTOP-8OUCO9P MINGW64 ~/test (master)
$ git branch -M main


# remote 브랜치 설정
git remote add [REMOTE_NAME] [REMOTE_GIT_URL]
#REMOTE NAME local에서 사용하는 이름 # REMOT_Git_URL 자동으로 생성되는
NT551@DESKTOP-8OUCO9P MINGW64 ~/test (main)
$ git remote add origin https://github.com/5dora/test.git #origin이라는 이름으로 쓰겠다



NT551@DESKTOP-8OUCO9P MINGW64 ~/test (main)
$ git remote -v
origin  https://github.com/5dora/test.git (fetch)
origin  https://github.com/5dora/test.git (push)

 

nano config

# 캐시에 등록하고 쓰는 방법

# 등록
$ ssh-add ~/.ssh/Github_key #키명 입력하기(비밀키 등록하기)

# 조회
$ ssh-add -l

# 지우는 방법
ssh-add -D

 

git remote set-url

 

 

eval agent

https://devlog.jwgo.kr/2019/04/17/ssh-keygen-and-ssh-agent/

 

 


clone

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone
$ git clone https://github.com/5dora/test.git
Cloning into 'test'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone
$ ls
test/

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone
$ cd test

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ nano

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ ls -l
total 3
-rw-r--r-- 1 NT551 197121 12 May 10 13:41 README.md
-rw-r--r-- 1 NT551 197121 20 May 10 13:41 helloGit.py
-rw-r--r-- 1 NT551 197121 23 May 10 13:43 helloGit2.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ ls
README.md  helloGit.py  helloGit2.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        helloGit2.py

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

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git add helloGit2.py
warning: in the working copy of 'helloGit2.py', LF will be replaced by CRLF the next time Git touches it

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   helloGit2.py


NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git add helloGit
helloGit.py   helloGit2.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git commit -m "second commit"
[main 5bd9f1f] second commit
 1 file changed, 2 insertions(+)
 create mode 100644 helloGit2.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 321 bytes | 321.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
To https://github.com/5dora/test.git
   a6bdd93..5bd9f1f  main -> main

 


삭제 복구

# 삭제
NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git rm helloGit.py
rm 'helloGit.py'

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ ls
README.md  helloGit2.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    helloGit.py


# 복구
NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ git restore helloGit.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone/test (main)
$ ls
README.md  helloGit.py  helloGit2.py


## add 했을 때 복구
NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git add .

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git restore --staged helloworld.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    helloworld.py

no changes added to commit (use "git add" and/or "git commit -a")

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ ls
README.md  helloGit2.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git commit -m "delete helloworld"
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    helloworld.py

no changes added to commit (use "git add" and/or "git commit -a")

 

 


branch

#브랜치

# 브랜치 확인
NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git branch
* main

#브랜치 만들기
NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git branch feature

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git branch
  feature
* main


NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git log --oneline
3085e93 (HEAD -> main, origin/main, origin/HEAD, feature) helloworld
864bf9f delete helloGit
5bd9f1f second commit
a6bdd93 hello 추가
50bd16f first commit

 

#브랜치 변경 checkout

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git checkout feature
Switched to branch 'feature'
D       helloworld.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ git branch
* feature
  main

 

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ vi README.md

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ git add .

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ git commit -m "change readme"
[feature 3d3262b] change readme
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 helloworld.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ git push
fatal: The current branch feature has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feature

To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.


NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ cat README.md
# Git Test
- Bug fixed

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ cat README.md
# Git Test

# 메인에는 아직 반영x

merge

다른 브랜치에서 작업한 걸 병합

 

병합할브랜치에 와있어야 해!

대상브랜치에 내가 있으면 안됨.ㅇ

main에서 feature 브랜치 병합

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (feature)
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ cat README.md
# Git Test

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ git merge feature
Updating 3085e93..3d3262b
Fast-forward
 README.md     | 1 +
 helloworld.py | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)
 delete mode 100644 helloworld.py

NT551@DESKTOP-8OUCO9P MINGW64 ~/clone2/test (main)
$ cat README.md
# Git Test
- Bug fixed

 


 

 

 


Pull & Request

merge하기전에 확인받는 작업