Git은 여러 사람들이 프로젝트에서 협업할 수 있도록 도와준다
Git은 프로젝트의 시간과 차원을 자유롭게 넘나들수 있도록 해준다.
window >> show window >> other... >> Terminal >> Terminal 선택 >> Open
창이 열린 후 Terminal 창의 Open a Terminal 아이콘 클릭
다양한 터미널 사용 가능, 여기서 우리는 Git Bash를 사용할 예정!
Choose terminal: 에서 Git Bash를 선택 >> OK 클릭
터미널 창이 열리면 C:\Users\각자 컴퓨터에 설정한 이름들
위치에 있을 것이다.
혹시 모르니까 현재 작업위치를 확인한다.
$ pwd
경로를 확인한 후 작업위치로 이동을 한다.
$ cd # c드라이브로 이동 C:\Users\각자 컴퓨터에 설정한 이름들
$ cd [폴더 이름] # 해당 디렉토리로 이동
$ cd bigdata # 현재폴더의 하위폴더인 bigdata 폴더로 이동
$ cd "C:\bigdata\02.backend\1.java\BookRental" # "작업위치 경로"
$ cd .. # 상위 폴더로 이동
$ mkdir [현재 경로에 생성할 디렉토리명] # 디렉토리 생성
$ mkdir test1 # 현재 위치에 test1 디렉토리 생성
$ ls # 현재 디렉토리 폴더, 파일을 보여줌
$ touch index.txt # 현재 위치에 index.txt 파일 생성
1. Git 최초 설정
Git 전역으로 사용자 이름과 이메일 주소 설정 - 나중에 협업할 때 누가 했는 지 알기 위해서 하는 것이라 생각하면 된다. Github 계정과는 별개이다.
$ git config --global [user.name](http://user.name/) "(본인 이름)"
$ git config --global user.email "(본인 이메일)"
$ git config --global user.name # 이름 설정 확인
$ git config --global user.email # 이메일 설정 확인
2. 기본 브랜치명 변경
아마도 master로 되어 있는 경우가 있을 것이다.
master가 노예제를 연상시킨다는 이유로 main으로 변경하는 것을 권유하고 있다.
$ git config --global init.defaultBranch main
3. 프로젝트 생성 및 관리 시작
적당한 위치에 원하는 이름으로 폴더 생성
$ git init # .git 폴더 생성 (숨긴 파일 보기를 하면 .git 폴더를 볼 수 있음)
모든 작업(파일 생성, 수정)마다 파일을 저장하기!
$ git status # 파일 상태 확인하기
포함할 필요가 없을 때 → 자동으로 생성 또는 다운로드 되는 파일들
포함하지 말아야 할 때 → 보안상 민감한 정보를 담은 파일
이럴 때는 어떻게 해야될까? **.gitignore파일을 사용하여 배제할 요소를 지정**할 수 있다.
.gitignore파일 생성 → 파일에 배제할 파일을 적는다.
$ git status
# 파일 상태 확인, .gitignore파일에 index.txt를 적었으면 index.txt는 배제되어 있다.
gitignore 형식은 여기서 자세히 볼 수 있다. https://git-scm.com/docs/gitignore
원하는 repository 폴더로 이동(.gitignore는 ****프로젝트의 상위 디렉터리에 저장해야한다.)
해당 위치에 파일을 생성 & 편집
$ vim .gitignore
위의 명령어를 입력을 하면 파일 편집기가 나온다.
a를 눌러서 작성을 시작한다.
gitignore을 만들어주는 사이트에서 개발하려는 프로젝트에 맞는 '운영체제, 개발환경(IDE), 프로그래밍 언어' 를 입력 후 생성 한다.
생성된 코드를 복사하여 붙여넣는다.
esc key를 눌러서, 명령입력 모드로 전환한 후 :wp를 통해 입력한 내용을 저장한다.
Working directory
git add
명령어로 Staging area로 이동Staging area
git commit
명령어로 repository로 이동Repository
.git directory
라고도 불림$ git add 파일명.확장자 # 원하는 파일을 Staging area로 담기.
$ git add . # 모든 파일을 Staging area로 담기.
$ git commit # 위의 과정들을 하면서 중간에 git status로 상태를 확인한다.
git commit을 하면 Vi 입력 모드로 진입을 한다.
커밋 메시지를 작성을 하면 된다.
좀 더 간단하게 커밋 메시지를 작성할 수 있는 방법이 있다.
$ git commit -m "COMMIT” # 커밋 메시지까지 함께 작성하면 된다.
$ git log # 위치한 브랜치에서 커밋한 내용들을 확인할 수 있다. 종료는 :q하면 된다.
$ git diff #파일의 추가, 변경, 삭제의 자세한 내역을 살펴볼 수 있다.
add와 commit 한번에 하기
$ git commit -am "(메시지)” # untracked 파일이 없을 때 가능
$ git reset --hard (돌아갈 커밋 해시)
# git log를 통해 커밋 해시 복사, 뒤에 커밋 해시가 없으면 마지막 커밋 가리킨다.
reset의 세 가지 옵션
repository
에서 staging area
로 이동repository
에서 working directory
로 이동$ git revert (되돌릴 커밋 해시) # :wq로 커밋 메시지 저장
$ git revert --continue # 충돌이 생겼을 때 충돌이 일어난 부분 수정하고 하면 된다.
$ git revert --no-commit (되돌릴 커밋 해시)
# 커밋을 하지않고 revert하기,
# 원하는 다른 작업을 추가한 다음 함께 커밋,
# 취소하려면 git reset --hard
$ git branch develop # develop이라는 브랜치 생성
$ git branch # 브랜치 목록 확인
$ git switch develop # checkout 명령어가 Git 2.23 버전부터 switch, restore로 분리되었다.
$ git switch -c save # 브랜치 생성과 동시에 이동하기, 기존의 git checkout -b (새 브랜치명)
$ git branch -d (삭제할 브랜치명)
# 지워질 브랜치에만 있는 내용의 커밋이 있을 경우
# (다른 브랜치로 가져오지 않은 내용이 있는 브랜치를 지울 때)
# -d 대신 -D(대문자)로 강제 삭제해야 한다.
$ git branch -m (기존 브랜치명) (새 브랜치명) # 브랜치 이름 바꾸기
$ git log --all --decorate --oneline --graph
노란색을 main브랜치, 분홍색을 develop브랜치로 가정
develop 브랜치를 main 브랜치로 merge하기위해서는 main브랜치로 이동한다.
$ git merge develop # :wq로 자동입력된 커밋 메시지 저장하여 마무리
$ git branch -d develop # 병합된 브랜치는 삭제
merge도 하나의 커밋이기때문에 merge하기 전 해당 브랜치의 마지막 시점으로 reset하면 되돌리기 가능하다.
develop 브랜치를 main 브랜치로 rebase하기위해서는 develop 브랜치로 이동한다.
$ git rebase main
main 브랜치로 이동후 아래 명령어로 develop의 시점으로 fast-forward
$ git merge new-teams
$ git branch -d develop # 병합된 브랜치는 삭제
파일의 같은 위치에 다른 내용이 입력된 상황
git status
확인git add .
, git commit
으로 병합 완료git merge --abort # 당장 충돌 해결이 어려울 경우 아래 명령어로 merge중단
git status
확인git add .
아래 명령어로 계속$ git rebase --continue # 충돌이 모두 해결될 때까지 반복
$ git rebase --abort # 당장 충돌 해결이 어려울 경우 아래 명령어로 rebase중단
https://confluence.curvc.com/pages/releaseview.action?pageId=6162682 참고
이것을 하는 이유는?
Git Hub에서 ID/PW기반의 Basic Authentication 인증을 금지하고, ID/Personal Access Token 방식의 Token Authentication 인증을 요구하고 있다.
Settings
Developer Settings
Personal access tokens
- Generate new token
repo
및 원하는 기능에 체크, 기간 설정 뒤 Generate token
Windows 자격 증명 관리자
Windows 자격 증명
선택git:https://github.com
자격 정보 생성Settings
- Collaborators
- Add people
$ git remote add origin (원격 저장소 주소) # 로컬의 Git 저장소에 원격 저장소로의 연결 추가
$ git branch -M main
$ git push -u origin main
# 로컬 저장소의 커밋 내역들 원격으로 push(업로드)
# -u 또는 --set-upstream : 현재 브랜치와 명시된 원격 브랜치 기본 연결
$ git remote # 원격 목록 보기
$ git remote remove (origin 등 원격 이름) # 원격 지우기(로컬 프로젝트와의 연결만 없애는 것)
터미널이나 Git Bash에서 대상 폴더 이동후
$ git clone (원격 저장소 주소) # Git 관리내역 포함 다운로드
$ git push
$ git push <저장소명> <브랜치명>
$ git pull
$ git pull <저장소명> <브랜치명>
원격에 먼저 적용된 새 버전이 있으므로 적용이 안된다.
pull해서 원격의 버전을 받아온 다음 push가 가능하다.
git pull --no-rebase
- merge 방식 충돌 부분을 수정한 뒤 git add .
, git commit
으로 병합 완료git pull --rebase
- rebase 방식 → pull 상의 rebase는 다름 (협업시 사용 OK) 충돌 부분을 수정하고 git add .
를 한다. git rebase --continue
를 한다.로컬의 내역 충돌 전으로 reset
아래 명령어로 원격에 강제 적용
$ git push --force
브랜치를 만든 후 원격에 push를 하면 대상을 명시하라는 메시지가 나타난다.
$ git push -u origin save # 원격의 브랜치 명시 및 기본 설정
$ git branch --all # 로컬과 원격의 브랜치 확인
$ git config --global push.default current
# 항상 현재 브랜치를 기준으로 git push 명령어가 작동
$ git fetch # 원격의 변경사항 확인
$ git switch -t origin/save # 로컬에 같은 이름의 브랜치를 생성하여 연결하고 switch
$ git push (원격 이름) 0.--delete (원격의 브랜치명)
git remote -v # 리모트 저장소 확인
git remote add [단축 이름] [URL] # 리모트 저장소 추가
git push [remote-name] [branch-name] # 리모트에 push