리눅스, 깃 허브 총정리

2023. 6. 2. 10:58깃허브

반응형

리눅스 정리

pwd
> 현재 위치의 경로를 나타냄

ls 
> 현재 디렉터리에 어떤 파일이나 디렉터리가 있는지 확인할 때 ls 명령을 사용
파일과 디렉터리의 상세 정보까지 보려면 ls -l을 입력하고 숨긴파일과 디렉터리를 
표시하려면 ls -a를 입력한다. 둘다 보려면 ls -la를 입력한다. ls -r은 파일의 정렬 
순서를 거꾸로 표시
ls -t는 파일 작성 시간순으로(내림차순) 표시한다.

cd
> 디렉터리 사이를 이동하는 명령어. cd .. 을 입력하면 상위 디렉터리로 이동. ls 명령어를
통해 현재 디렉토리에 어떤 디렉토리가 있는지 확인하고 cd 특정 디렉터리 이름을 입력하면
해당 디렉터리로 이동한다.  cd ~를 입력하면 홈 디렉터리로 이동

mkdir 디렉터리 이름
> 현재 디렉터리 안에 하위 디렉터리를 만들 때 사용.

rm
> 디렉터리를 삭제할 때 사용하고 -r 옵션을 붙이면 디렉터리 안에 디렉터리와 파일까지 함께 삭제된다.

vim 파일이름
> 현재 디렉터리에 파일을 만들기 위해 vim 명령어를 입력한다. vim 뒤에 입력한 파일이름의 파일이
없으면 새로운 파일을 만든 다음에 열리고 파일이 기존에 있다면 그 파일을 연다. 열린 파일은 ex모드와 입력모드가 
있다. 처음에 열리면 ex모드인데 i나 a를 누르면 입력모드가 되어서 파일을 수정할 수 있다. esc를 누르면 
입력모드에서 ex모드로 전환이 되고 :w를 입력해 저장할 수 있고 :q를 입력해 나가기를 할 수 있다. 
:wq를 누르면 저장 및 나가기가 된다. :q!는 문서를 저장하지 않고 나간다.

cat 파일이름
> 텍스트 문서의 내용을 확인할 수 있는 명령어로 
cat 파일1, 파일2, 파일3 ..... > 새파일 
를 입력하면 여러개의 파일을 차례로 연결하여 새로운 파일을 만든다.
cat 파일1 >> 파일2
파일1의 내용을 파일2 끝에 연결한다.


==================================================================

깃 정리

~
깃 배시를 실행하고 보면 맨 끝에 물결 표시가 있는데 현재 홈 디렉터리에 있다는 의미

git
> 깃 설치됐는지 확인 가능

git config --global user.name "이름"
git config --global user.email "이메일"
> 깃에서 사용자 정보를 설정하려면 git config 명령을 이용한다. --global 옵션을 통해 현재 컴퓨터에
있는 모든 저장소에서 같은 사용자 정보를 사용하도록 설정

git init
> 현재 디렉터리에 저장소를 만든다. 디렉터리의 숨김파일을 ls -a를 통해서 보면 .git 파일을 볼 수 있다.

깃 저장소(.git)
> 깃 저장소는 스테이지, 저장소로 이루어져 있다. 
스테이지는 버전으로 만들 파일이 대기하는 곳이다(git add를 통해 스테이지에 넣음). 저장소는 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳이다(git commit을 통해 저장).

작업 트리
> 작업 트리는 파일 수정, 저장 등의 작업을 하는 디렉터리로 작업 디렉터리라고 한다.  


git status
> 깃 상태를 확인 할 수 있다.

git add 파일이름
> 작업 트리에서 파일을 만들거나 수정했다면 스테이지에 수정한 파일을 추가한다.  

 
git commit 
> 스테이지에 있는 파일을 버전으로 만들 수 있다. 이렇게 버전으로 만드는 걸 커밋이라고 한다. 
커밋할때 어떠한 변경 사항이 있었는지 확인 하기 위해 메시지를 함께 기록해 두는데 
git commit -m "메시지 여기 작성" 와 같이 명령어를 입력해 스테이지에 있는 것들을 
버전으로 저장소에 저장한다.
git commit -am "메시지" 를 입력하면 add 와 commit을 한번에 할 수 있다. 단, 한번이라도 
커밋한 적이 있는 파일만 가능하다.

git log 
> 저장소에 저장된 버전들을 확인할 때 사용한다. 
커밋해시, 작성자, 버전 만든 날짜, 커밋 메시지를 확인 할 수 있다.
커밋해시는 엉문과 숫자로 긴 문자열이 나타나는데 이것을 커밋 해시라고 한다. 커밋을 구별하는
아이디라고 생각하면 된다. 
커밋 해시 옆에 HEAD -> master 가 있는데 이 버전이 가장 최신이라는 표시이다.
커밋에 관련된 파일까지 함께 보려면 git log --stat 명령어로 확인한다.

git diff
> 수정한 파일이 저장소에 있는 최신 버전의 파일과 어떻게 다른지 확인

tracked 파일과 untracked 파일
> 이미 커밋했던 파일을 수정했으면 git status로 봤을때 
'Changed not staged for commit'이라고 되어있고 기존에 커밋하지 않은 파일을 새로 생성하고
git status를 보면 Untracked files를 볼 수 있다.

즉, 커밋을 한번이라도 했던 파일은 추적되고 있는 tracked 파일이고 한번이라도 커밋한적이 없는 새로운 파일은 untracked 파일이다.

.gitignore
버전 관리 중인 디렉터리에서 버전 관리를 하지 않을 특정 파일 또는 디렉터리가 있으면 vim으로 
.gitignore 파일을 만들어 그 파일 안에 버전관리 하지 않을 파일과 디렉터리 이름을 작성하면 
제외된다.

git commit --amend
> 가장 최근에 커밋한 커밋 메시지를 수정 할 수 있다.

git checkout -- 파일이름
> 파일을 수정한 내용을 취소하고 가장 최신 버전 상태로 되돌릴 때 사용.

git reset HEAD 파일이름
> git checkout -- 파일이름은 파일의 수정을 취소하고 원래대로 되돌렸는데 git reset HEAD 파일이름은 add해서 
스테이징 된 상태를 취소하는 방법이다(수정된 파일들을 git add . 으로 모두 스테이징 상태가 되었다. 여기서 일부 파일을 스테이징 취소하고 커밋 하고싶으면 git reset HEAD 파일이름으로 add된 상태를 취소해주면 된다. )

git reset HEAD^
> 수정된 파일을 스테이징하고 커밋까지 했을 때, 가장 마지막에 한 커밋을 취소하는 방법이다.
옵션에는 3가지가 있다
-- soft HEAD^ 는 최근 커밋을 하기 전 상태로 작업 트리를 돌린다.(커밋 취소)
-- mixed HEAD^ 는 최근 커밋과 스테이징을 하기 전 상태로 되돌린다. 옵션 없이 git reset 명령을 사용할
경우에 이것이 작동된다.(커밋 취소, 스테이징 취소)
-- hard HEAD^ 는 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 되돌린다.  이 옵션으로 되돌린 내용은
복구할 수 없다.(커밋 취소, 스테이징 취소, 내용 삭제)

git reset --hard 커밋해시
> git log를 치면 각 커밋마다 숫자와 영어로 된 커밋 해시를 볼 수 있다. 가장 최근의 커밋 상태가 아닌
특정 커밋 상태로 되돌리고 그 이후의 버전은 삭제하고 싶으면 이 커밋해시를 복사해 
git reset --hard 복사한 커밋해시를 입력하면 된다.

git revert 커밋해시
> 커밋해시의 커밋한 버전을 취소하고 해당 커밋을 되돌릴 때 사용한다. 

참고)

https://www.devpools.kr/2017/02/05/%EC%B4%88%EB%B3%B4%EC%9A%A9-git-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0-reset-revert/

위에 설명 아주 잘 돼있음

 

git branch
> 깃의 브랜치를 만들거나 확인하는 명령어.  git branch를 치면 현재 브랜치가 출력됨
git branch 새로운브랜치이름을 치면 새로운 브랜치 이름으로 브랜치가 생성된다. 
생성 후 git branch로 확인하면 브랜치 목록이 뜨고 현재 브랜치 앞에 * 표시가 있다.
git branch로 브랜치를 생성한 시점에 생성한 브랜치에서의 상태와 새로 생성된 브랜치의
상태는 같다. git log로 현재 브랜치를 볼 수 있고 git log --oneline하면 각 커밋을 
한줄로 보여주고 git log --oneline --branches를 하면 각 브랜치의 커밋을 간단하게
볼 수 있다. git log --oneline --branches --graph를 치면 브랜치가 어디서 갈라져 나갔는지
그래프로 볼 수 있다.

git checkout 브랜치이름
>  다른 브랜치로 이동할 때 이동할 브랜치의 이름을 git checkout과 같이 써주면 해당
브랜치로 이동한다. 

git log 브랜치1..브랜치2
> 브랜치 사이의 차이점을 확인할 때 사용한다. 왼쪽에 있는 브랜치를 기준으로 오른쪽
브랜치와 비교한다. 

git init 디렉터리이름
> 디렉터리이름의 디렉터리를 만들고 해당 디렉터리에 저장소를 만든ㄴ다

git merge 브랜치이름
> 브랜치를 병합할 때 사용한다. 예를들어 master 브랜치에서 git merge kkk 를 입력하면
kkk라는 브랜치에 있는 것을 master 브랜치로 가져온다. 이때 합병할때의 커밋 메시지를
입력하는 편집기 창이 열리는데 안열리게 하려면 git merge kkk --no-edit을 입력하면 된다. 입력하지 않으면 git merge kkk --edit으로 되어 편집기 창이 열린다.

git branch -d 브랜치이름
> 브랜치를 삭제할때 일단 기본 브랜치인 master로 가서 삭제하려는 브랜치이름을
git branch -d 브랜치이름에 넣어서 지워준다. 나중에 이 이름의 브랜치를 다시 만들면 
내용은 그대로 있다. 즉, 브랜치를 저장소에서 없애는게 아니라 깃의 흐름 속에서 감추는 것이다.


git reset 커밋해시

> git checkout으로 다른 브랜치로 이동한 다음 거기서 git reset 커밋해시를 입력하면 이동한 브랜치의

최신 커밋을 해당 커밋해시로 상태로 바꿔지고 이동한 브랜치의 원래 최신 커밋 상태는 삭제된다.

git stash

> 브랜치에서 파일을 수정하고 커밋하지 않은 상태에서 다른 파일을 커밋할 경우 아직 커밋하지 않은

파일들은 그냥 두어도 상관없지만 계속 커밋하라는 메시지가 나타나서 번거롭다. 실수로 다른 파일과 같이 

커밋이 될 수도 있다. 이럴때 커밋하지 않고 아직 작업 중인 파일들을 잠시 감춰둘 수 있다. 나중에 감춰둔

파일들을 꺼내오면 된다. 가장 최근에 숨긴 상태는 stash@{0}에 들어가고 또 stash 한것이 있으면 기존 

stash@{0}는 stash@{1}로 간다. git stash pop을 하면 stash 목록에서 가장 최근 항목을 되돌린다. git stash 목록은

git stash list를 통해서 알 수 있다. git stash drop 명령을 사용하면 stash 목록에서 가장 최근 항목을 삭제한다.

 

원격 저장소

> 작업하는 자신의 컴퓨터(로컬 저장소)가 아닌 다른 컴퓨터나 서버에 저장 공간을 마련하는 것. 깃허브 사이트에서 New Repository 버튼을 클릭하여 저장소를 만들 수 있다. 생성된 저장소는 HTTPS 주소를 사용해 저장소에 접속 할 수도 있고 파일을 올릴 수도 있다. HTTPS 저장소 주소는 다음과 같은 형식이다.

https://github.com/아이디/저장소명 

 

원격 저장소 연결

> 먼저 지역 저장소를 git init을 통해 만들었으면

git remote add origin HTTPS주소

위와 같이 입력한다.이것은 원격 저장소에 origin을 추가하겠다는 의미이다. origin은 HTTPS주소를 말한다. 

연결이 되는지 확인하려면

git remote -v

를 치면 해당 HTTPS주소가 나온다.

 

원격 저장소에 파일 올리기(push)
> git push -u origin master
위에 명령어를 보면 지역 저장소의 브랜치를 origin, 원격 저장소의 master 브랜치로 푸시하는 명령어다. -u 옵션은 지역 저장소의 브랜치를 원격 저장소의 master 브랜치에 연결하기 위한 것으로 처음에 한 번만 사용하면 된다. 한번이라도 이렇게 push를 했으면 다음부터는 새로운 커밋을 push 할때 git push 만 입력하면 된다.

 

원격 저장소에서 파일 내려받기(pull)

> 원격 저장소와 지역 저장소의 상태가 다를 때 같게 만들기 위해 원격 저장소의 소스를 지역 저장소로 가져올 때 사용한다. 이것을 pull이라고 한다.

git pull origin master

라고 입력하면 origin(원격저장소)에서 master브랜치(원격저장소에서 받아오려는 브랜치이름) 소스를 가져온다는 뜻이다.

 

SSH 원격 접속

> SSH는 Secure Shell의 줄임말로 보안이 좋은 안전한 방법으로 정보를 교환하는 방법이다. 사용자의 컴퓨터에서 SSH키 생성기를 실행하면 private 키와 public 키가 생성된다. private 키는 아무도 알 수 없게 사용자 컴푸터에 저장된 키이고 public 키는 외부로 공개된 키이다. 일반적으로 원격 저장소에 파일을 올리는 작업을 할때 아이디와 비밀번호로 해당 저장소를 만든 계정의 주인임을 인증해야 한다. 

하지만 SSH는 private 키와 public 키를 이용해 현재 사용하고 있는 기기를 깃허브에 인증하는 방식이다. 예를들어 서버환경에서 깃허브 저장소에 접속해야 한다면 서버 자체를 깃허브에 등록하고 터미널을 이용해 언제 어디서든 깃허브에 접속할 수 있다. 아이디와 비밀번호 입력이 필요없이 자동 로그인 기능을 통해 번거로움을 줄일 수 있다.

 

SSH 키 생성

> 터미널 창에서 홈 디릭터리(~)로 이동하고 ssh-keygen 이라고 입력한다. 키가 저장되는 파일 경로가 뜨고 파일 이름을 입력하는게 뜬다.  그럼 파일 이름을  입력하지 않고 enter 누르고 두번 더 enter를 누르면 ssh를 통해 다른 컴퓨터에 접속할 수 있는 비밀번호가 생성된다. cd를 통해 해당 경로로 들어가서 ls -la를 통해 private 키와 public 키가 있는걸 확인 가능하다.

 

깃허브에 public 키 전송

> 깃허브에 SSH 키를 통해서 접속하려면 사용자 컴퓨터에 만들어져 있는 public 키를 깃허브 서버로 전송한다. cat 명령어로  public키가 있는 파일을 열고 ssh-rsa부터 끝까지 복사한다.

깃허브 사이트 들어가서 로그인 후 오른쪽 위에 사용자 아이콘을 누르고 Settings를 선택한다. 메뉴 중 SSH and GPG keys를 선택한다. public 키를 추가하기 위해 화면 오른쪽에 나타난 New SSH key를 누른다.

제목은 알아볼 수 있게 입력하고 key에 복사한 public 키를 붙여넣기 한다.  그리고 추가를 하면 깃허브 비밀번호를 입력하고 Confirm password를 누른다. 이제 컴퓨터는 깃허브 저장소의 SSH 주소만 알고 있으면 로그인 정보를 입력하지 않고도 바로 그 저장소에 접속할 수 있다. git remote add origin SSH주소 를 입력해 접속 할 수 있다.

 

저장소 복제(git clone)

> 원격 저장소를 지역 저장소로 똑같이 가져오는 것을 클론이라고 한다. 복제하려는 원격 저장소의 HTTPS 주소를 복사해서

git clone HTTPS주소 폴더이름

을 입력하면 폴더이름으로 폴더가 생기고 안에 깃허브 저장소와 동일한 상태의 파일들이 있다. 복제하면 자동으로 원격저장소와 지역저장소는 연결된다. 

 

원격 브랜치 정보 가져오기(git fetch)

> fetch는 '불러오다' 라는 뜻이다. git fetch는 원격 저장소의 정보를 가져온다. pull은 원격 저장소의 커밋을 가져와서 지역 저장소와 합치는데 fetch는 원격 브랜치(FETCH_HEAD)에 어떤 변화가 있는지 정보만 가져온다. 예를들어 깃허브의 원격 저장소에 aa.txt라는 파일이 있고 로컬 저장소에는 없다. git fetch를 입력하면 원격 저장소의 내용이 합쳐지지 않고 FETCH_HEAD라는 브랜치에 원격 저장소의 최신 커밋 상태를 가져온다. git checkout FETCH_HEAD를 입력해 FETCH_HEAD 브랜치에 가보면 git log를 통해 확인할 수 있다. 여기 FETCH_HEAD에 있는 내용을 master에 합치고 싶으면 두가지 방법이 있다. 첫번째로 master 브랜치에서 git pull을 통해 바로 합치는 방법이 있고 두번째 방법은 master 브랜치로 이동해 git merge FETCH_HEAD를 통해  합치는 방법이 있다.

git merge로 원격 저장소에 있는 커밋을 병합하려면 git merge origin/브랜치이름 을 입력해서 병합 할 수도 있다. 하지만 매번 브랜치 이름을 써야 한다는 번거로움 때문에 패치한 뒤 git merge FETCH_HEAD로 최신 커밋을 병합하는 방법이 좋은거같다.

 

 

깃허브 협업하기

> 팀장 한명과 팀원1, 팀원2가 협업을 할거다. 팀장이 repository를 생성했으면 팀원들이 저장소에 push할 수 있도록 설정해줘야 한다. 일단 저장소 화면에서 Settings에 들어간다. 그리고 왼쪽 메뉴에서 Collaborators를 누르고  Add people 버튼을 클릭한다. 초대 할 사람의 username이나 email을 입력해 초대를 한다. 그럼 팀원들은 메일과 깃허브 메시지를 받게 되는데 Accept Invitation을 누르면 초대가 수락된다. 원격 저장소에 공동 작업자가 모두 추가되었으면 누가 원격 저장소에 올리는지 확인하기 위해 사용할 이름과 이메일 주소를 지정해야한다.

git config user.name "사용자이름"

git config user.email "메일 주소"

위와 같은 명령어로 지정한다. 

원격 저장소에서 협업할 때 공동 작업다는 작업을 진행하기 전에 git clone 명령을 통해 원격 저장소를 복제한다.

git clone 원격 저장소 주소

원격 저장소를 복제해서 가져오고 작업을 해서 커밋을 한다음 원격 저장소에 push를 할때는 항상 pull을 먼저하고 push를 해야한다. 그래야 충돌을 방지할 수 있다.

협업을 하다 보면 팀원들끼리 다른 기능을 맡아서 하는 경우가 많다. 이럴 때는 각자의 작업이 master  브랜치에 있는 문서와 섞이지 않도록 새로운 브랜치를 만들어서 버전을 관리한다. 

git checkout -b 브랜치이름

위의 명령어를 이용하면 새로운 브랜치를 생성함과 동시에 해당 브랜치로 이동한다. -b 옵션이 브랜치를 만들고 체크아웃을 한번에 할 수 있다. 해당 브랜치로 이동해서 작업을 하고 커밋을 한다음 

git push origin 브랜치이름 

으로 원격 저장소에 소스를 올린다. 깃허브에 가서 보면 해당 브랜치이름의 브랜치가 있고 거기에 들어가면 잘 올라왔는지 확인할 수 있다. 이렇게 master가 아닌 다른 브랜치에 올라온 소스를 master와 병합하려면 일단 깃허브 사이트에 가면 pull request 메뉴에 들어간다. New pull request를 누르고 다른 브랜치로 올린 브랜치 이름을 선택한다. 그럼 master 브랜치와 다른것이 뜬다. Create pull request를 클릭한다. 멘트를 적어주고 Create pull request를 다시한번 클랙해준다. 그럼 pull request 메뉴에서 생성된것을 확인할 수 있다. 생성된 pull request를 클릭하면 merge pull request가 있고 클릭한다. confirm merge를 클릭하면 master에 해당 내용이 합쳐진다.

반응형