Git 01 ~ 07

민정윤·2024년 10월 16일
0

Git ?

• 형상 관리 시스템 (Configuration Management Systems)
• 버전 관리 시스템 (Version Control Systems)
• Source Data + History이력을 관리하는 기능이 있어서 협업, 작업 추적, 특정 시점으로 복구 등이 가능

-> 최초에는 내 컴퓨터 안에서 버전 관리 local version control system

-> 이후에 중앙 서버에서 관리하는 centralized version control system (csv, svn..)

• 제한적인 협업이 가능해짐 (동시 수정이 안 됨, 오랜 시간 수정하면 바로 버전 업뎃이 안 됨)
• 서버로 commit 하는 순간 배포되어 다수에게 버그 유발
• 인터넷이 안되면 작업이 불가능
• 자신만의 version history 를 가질 수 없고 

-> 현재는 서버를 통해 동기화하는 Distributed Version Control Systems 사용 (Mercurial, Git)

• Commit 하더라도 개인저장소 내에 적용됨 
• 원하는 시점에 배포(Push) 가능
• 오프라인에서도 작업 가능
• 연결이 끊어져도 내 버전에거 작업 가능
• 자신만의 version history 가능 

git 설정

GIT : global information tracker

  • gitbash 관리자 권한으로 실행

  • editor vscode로 설정하기
  • 프로젝트별 repository 만들기 (로컬 저장소) -> 로컬 설정 주기

  • user를 글로벌 옵션으로 + branch 이름 main으로

  • --show-origin으로 확인

git repository

local에서 git 레파지토리 만들기

  • 꼭 레파지토리 폴더로 먼저 들어간 후에 init으로 git 만들어주기

    - '.git'으로 확인할 수 있음
    - ls -all : 숨겨진 파일을 포함하여 모든 파일을 보여준다.

리눅스 기본 명령어 :
https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS6390061632

  • git 파일 구조 구경해보자

Git Clone

remote 저장소 local로 복제하기

  • remote repo 주소 및 token 필요함

-> 일단 github remote에서 'test_project2' 저장소 만들기

-> local에서 'test_project2' 사용할 때마다 일일이 계정 인증해야 하니까 token 발행해주기

  • 저장소를 만들고자 하는 위치로 이동하고 clone 해주기

  • 'test_project2'가 잘 복제되었는지 확인

Git 기본 사용법

위에서 git 에서 레파지토리 만들었음
BUT!!
git이 관리하고 있지는 않는 상태임.

--> test_project2가 untracked 상태이기 때문 (인지만 하고 관리 X)

--> tracked 상태에 들어와서 버전이 매겨져야 git에게 관리 대상이 되는 것임.

--> 레파지토리 내용 수정하게 되면 modified 상태
--> modified 상태도 staged 상태가 아님

- 수정 후에 버전 매기려면 staged 상태로 만들고 > 다시 commit 해서 버전 매기는 대상이 되어야 함.

--> 레파지토리 delete 하려면 unstaged 상태로 바꿔야 함.

🚨 🚨 🚨 🚨 🚨 🚨

git status

• Working Directory 와 Staging Area 의 상태를 표시
• stage 시킬 대상, commit 대상, modified 상태인 대상 확인 가능
• 파일의 상태를 확인할 때 사용
• git 적응을 위해 습관화 해주는 것이 좋음

Git add 파일 추가

git add <file name>

• Directory 에서 생성된 파일을 Staging Area (Index) 에 추가
• Modified 상태의 파일을 Staged 상태로 변경할 때
• commit 대상으로 올려놓는 명령어

🚨 메시지 포함 꼭 해줘야 함
🚨 -m

git commit -m <commit_message>
git commit -a -m <commit_message>

• Directory 에서 생성된 파일을 Staging Area (Index) 에 추가
• Modified 상태의 파일을 Staged 상태로 변경
• ✍️ 의미 있는 문구로 이 파일은 어떤 파일인지 명시해주기 (영문 권장)
• -a 옵션 : add 와 동시에 commit 동시에 (Modified 상태에서 바로 Committed 상태로 변경)

Git ignore

• Git 에서 무시해야 하는 파일 패턴을 관리

# 확장자가 .a 인 파일 전부 무시
*.a
# lib.a는 제외하고 전부 무시
!lib.a
# 현재 디렉토리에 있는 TODO파일은 무시하되 
# subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음
/TODO
# build/ 디렉토리에 있는 모든 파일은 무시
build/
# doc 폴더 하위에 있는 .txt 파일은 무시하되 다른 경로에 있는 doc/server/arch.txt 파일은 무시하지 않기
doc/*.txt
# doc 디렉토리 아래의 모든 .pdf 파일을 무시
doc/**/*.pdf

Git RM

Git RM = remove

git rm <file_name>

• Git 에서 관리하는 파일 삭제 (untracked 상태 만들기)
• Staging Area 의 파일을 삭제하고 Commit
• Working Directory 에서도 삭제됨

Git RM

Git MV = move

git mv <old_name> <new_name>

• Git 에서 파일이름 변경시 사용
• 파일을 경로 이동도 디렉토리에서 마음대로 하는 게 아니라 git에서 git 명령어로 해야 함
• 파일을 복사하고, 원본 파일을 삭제한 뒤 Git Add 하는 동작과 같다.

cp <old_name> <new_name>
git rm <old_name>
git add <new_name>

Git 저장소에서 파일 수정

cat 사용

cat : cat 을 쓰고 파일명을 붙이면 파일 내용을 출력하는 명령어

하지만 cat + '>'를 함께 쓰면
아래 내용으로 파일을 덮어쓰는 명령어

  • 덮어쓸 내용 적고 ctr + d 로 저장하기

  • cat으로 덮어쓰면 modified 상태

아직까지 modified 상태! -> unstaged 상태임

staged 상태로 만들기 위해서 add + commit 해주기

commit + add 동시에 실행하기

  • 파일 내용 수정 = modified 상태

cat + '>>' 꺽새 두 번 : 내용 추가하기

  • 파일 commit 해주기

-a 옵션 활용하기
-a 추가해서 commit 하면 바로 파일 staged 상태 만들 수 있음.

Git ignore

Git에서 무시할 파일 등록

  • touch로 .gitignore 파일 만들고 add 해주기

  • csv 파일 무시하라고 명령

주의

  • status 확인해보면 .gitignore 파일이 두가지 상태를 가지고 있다고 나옴

< 변경사항이 두 개 >

  • to be commited : staged
  • not staged for commit : modified

  • 이때, 그냥 commit을 해주면 staged만 해결되고 unstaged는 해결이 안 됨

  • unstaged 해결하려면 다시 add해서 staged 상태로 만들고 commit 하면 됨.

add한 시점만 commit 하기 때문!

  • 초기에 파일을 untracked > tracked로 변경하는 애들 시점에서 수정했을 때 이런 경우가 발생함

등록된 상태 & 수정한 상태 두 가지 상태가 있던 상황에서 commit 시도하면

  • stage에 있던 등록된 상태만 commit이 되고
  • unstaged 상태는 편집 스냅샷이 그대로 남아있어서 (add를 새로 해줘야 함)

이럴 때 당황 X

  • staged 상태 먼저 해결하고
  • 다시 unstaged > staged (-a 옵션) 해주면 됨

.gitignore 테스트

  • csv파일 하나 만들고 add 해보기

  • status에 없어도 csv파일 add 하려고 해보면 ignored 해야 하는 파일이라고 나오는 걸 볼 수 있음.

Git 저장소에서 파일 삭제

🚨 파일 삭제는 working directory에서 파일 삭제하면 안 됨.
🚨 git 에서 버전 관리를 하고 있기 때문에 git에서 삭제해야 함.

git에서 파일 삭제

  • 위에서 활용한 test.txt 삭제해보기
  • ls 목록에서도 사라진 것 확인할 수 있음

  • git status 확인해보기

파일 삭제도 변경사항으로 인지하고 있음

  • commit으로 완전히 삭제하기

    삭제는 중요한 변경사항이니 메시지 기록해주기

working directory에서 파일 삭제

< 주의 >

🚨 커맨드창에서 git (remote)이 아닌
working directory (local) 에서 파일 삭제하게 된다면?

  • git status 살펴보면 수정사항이 있는데 'unstaged 상태' 라고 나온다

< 해결 방법 >

🚨 실수로 git이 아닌 파일만 먼저 지워버렸어도 당황 X

  • 'git rm'으로 삭제해주고

  • 다시 commit 해주면 된다

Git 저장소에서 파일 이름 변경

파일 이름 변경

  • 먼저 test2.txt 파일 생성하고 텍스트 입력해주기

  • 파일 add + commit 하기

파일 처음에 생성하면 -a 옵션 사용 안 됨

  • 초기에는 무조건 add를 해줘야 함

  • test2.txt 파일 이름 > test.txt로 변경

  • commit으로 staged 해주기

파일 경로 변경

  • test.txt는 지금 HelloGit 저장소 안에 있는데
  • test.txt를 HelloGit 하위 디렉토리인 'src'으로이동시키기

< 주의 >

🚨 실수로 git이 아닌 디렉토리에서 mv로 경로를 이동시켰다면?

  • git으로 안 해도 파일이 src 폴더 아래로 이동됨.

  • git status 확인해보면

🚨 git이 src폴더로 이동시킨 test.txt 파일을 등록하지 않은 새로운 파일 취급함

  • HelloGit 밑에 있던 test.txt가 deleted 삭제되었고
  • src 폴더 밑에 새로운 untracked 파일이 생겼다고 나옴.

< 해결 방법 >

  • hellogit 에 있는 test.txt 파일 'rm'로 삭제하기

  • src에 있는 untracked 상태인 파일 add를 통해 tracked 상태로 변경해주기
  • ✍️ add할 때 'src/'로 어디에 있는 test.txt 파일인지 명시해주기

git status 확인해보면

  • status 확인하면 git이 내가 하려는 게 파일 rename인 걸 알아차림.
  • commit으로 파일 경로 이동 완료하기

0개의 댓글