---------GIT
-VCS(version control system)
:버전관리시스템 ( 형상관리 시스템 )
#local에서 관리했다가 중앙 서버를 하나 만들어서 관리를 했지만 이것 또한 부정적인 사항이 생기게 되서
#분산 처리를 하게됨
그래서 요즘은 GIT(Global Information Tracker)을 많이씀
-GIT 의 데이터 저장 방식
:version이 올라갈때 마다 diff를 가지는게 아니라 diff가 적용된 전체를 스냅샷으로 저장했음
-GIT 구성요소
: Working Directory , Staging Area , git Directory
#워킹디렉토리에 파일을 수정하면 add를 해야 스테이징에리어에 파일이 등록되고 스테이징에리어에 있어야만 commit 가능
-GIT에서 파일 상태
: untracked vs tracked
#untracked는 파일을 딱 만들었을때 상태
#tracked는 staged, committed , modified 3가지가 있다.
#Add file을 하면 staged로 가고 여기서 commit을 하면 committed로 가고 여기서 edit를 하면 modified로 간다
#여기서 edit한 파일을 다시 staged 상태로 보내고 다시 commit을 해서 edit을 할 수 있다.
-GIT의 작업순서
: working directory 에서 파일을 수정
staging area(index)에 파일을 staged하여 commit할 스냅샷을 만든다
staging area(index)에 있는 파일들을 commit 하여 .git diretory (Repository)에 스냅샷을 저장한다.
-GIT 설정 범위
:system - 시스템의 모든 사용자와 모든 저장소 적용 , global - 특정 사용자에게 적용 , local - 특정 저장소에 적용
-CRLF (end of line)
: windows 에서는 CR(\r)+LF(\n) 모두 사용
: Unix or mac에서는 LF(\n)만 사용
#그래서 서로 다른 환경에서 작업하면 문제가 발생할 수 있기 때문에 windows 환경에서 작업을 하고 업로드할때는 LF로 변경 해주는 법
#core.autocrlf = true : 파일에 적용된 줄바꿈 문자를 crlf대신에 lf로 바꿔준다.
ex) git config --system core.autocrlf true , 이때 관리자 권한으로 실행해야한다.
-Editor
: git config --global core.editor <editor_name>
#에디터를 지정하는 것 , 유저별로 설정가능
-default Branch
: git config --global init.defaultBranch <branch_name>
#브랜치 이름이 서로 달라서 바꿔준다.(main으로 변경예정)
-GIT 전체 설정 확인
: git config --list
-GIT 범위별 설정 확인
: git config --list --show-origin
-GIT 항목별 설정 확인
: git config
ex) git config user.name 출력 설정한 유저이름 , user.name이 key값임
-GIT 설정
: git config --global user.name 유저네임
: git config --global user.email 유저이메일 // 터미널에서
-GIT Repository ( GIT 저장소 )
: Repository는 GIT으로 관리하는 프로젝트 저장소 , 파일과 디렉토리가 포함될 수 있고 버전관리가 가능함
: Local Repository - 사용자의 컴퓨터 저장소 , Remote Repository - 원격 서버의 저장소
#git clone 에서 token을 사용 : git clone https:<토큰>@github.com/username/projectname.git
-Git status ★★
:Working 디렉토리 와 staging area의 상태를 표시 , 보통 파일의 상태를 확인할 때 사용
-Git add <파일명>
:Working 디렉토리에서 생성된 파일을 staging area에 추가 , modified 상태의 파일을 staged 상태로 변경
ex) git add src/test.txt
-Git commit
: git commit -m <commit메시지> , git commit -a -m <commit메시지>
: Modified 상태의 파일을 staged로 변경 , -a 옵션으로 staged 상태 생략 가능 ( modified 에서 committed로 변경가능)
ex) git commit -m "first commit"
-Git ignore
:Git 에서 무시해야 하는 파일 패턴을 관리
#확장자가 .a인 파일 무시 : .a
#.a는 무시하는데 lib.a에는 무시 X : !lib.a
#build/ 디렉토리 있는 모든 파일은 무시 : build/
#현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위 디렉토리에 있는 파일은 무시X : /TODO
#doc/notes.txt파일은 무시하고 doc/server/arch.txt파일은 무시 X : doc/.txt
#doc 디렉토리 아래의 모든 .pdf파일을 무시 : doc/*/.pdf
-Git RM(remove)
:git rm 파일명
#Git에서 관리하는 파일 삭제 , staging area 파일을 삭제하고 commit , wokring 디렉토리에서 삭제됨
ex) git mv test2.txt test.txt
-Git MV(move)
: git mv 오래된이름 새이름
#Git에서 파일이름을 변경할 때 사용 , 잘라내기(rm) -> 붙여넣기(add) 느낌 , 원래 파일은 사라짐
#Working 디렉토리에서 이름을 바꾼다고 안바뀌기 때문에 git에서 바꾸어야함
-.gitignore 파일을 add하고 파일안에 *.csv를 넣었더니 commit도 안되있는 상태고 modified 된 상태다
#이때는 두번다 커밋을 두번 해주면 된다 혹은 -a를 사용해서 커밋하면된다.
-touch data.csv을 만들어서 status로 확인했는데 내가 무시하는 파일에 .csv를 넣었기 때문에 무시당한다.
-test.txt 파일을 git rm이 아니라 rm하고 삭제를 하면 unstaged 상태라고 뜬다.
#이때는 git rm을 해주면된다.
-src라는 파일안에 test.txt를 mv를 사용해서 옮긴다.
#이렇게 되면 이름이 같아도 경로가 다르면 다른 파일로 생각한다.
#그래서 삭제된 test.txt 파일 경고랑 src파일 안에 있는 test.txt가 아직 untracked 파일이라고 경고가 나온다.