일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- res.set
- 웹개발
- mongoose create
- await
- mongoose delete
- css 기초
- express 프로젝트 시작하기
- req.queries
- res.status
- http
- HTML
- 자바스크립트
- Axios get
- node.js란
- req.params
- req.body
- 파이썬
- Axios post
- javascript
- mongoose populate
- mongoose update
- mongoose find
- Axios put
- async
- res.render
- promise
- 프론트엔드
- Axios delete
- CSS
- req.get
- Today
- Total
모스카토
Git 본문
1. git 이란?
git은 여러 사람이 각자 컴퓨터로 작업한 내용을 작업한 내용을 커밋으로 만들어 저장하고 협업 할수 있게 한다. 오픈소스이다.
1. git 을 사용하는 이유
효율적인 협업이 가능하다 : 여러사람이 같은 파일을 수정할 경우, 버전이 달라지고 이를 통합하기가 힘들다.
버전관리가 쉽다 : 여러 버전을 동시에 관리할 수 있고, git 은 버전들을 스냅샷형태로 저장하여 여러 버전으로 이동하기 쉽다.
2. git의 특징
1. 가지치기와 병합
여러 작업을 동시에 할 때 섞이지 않게 독립적으로 개발가능
개발, 테스트 진행 후 뻗어나온 가지를 병합가능
2. 가볍고 빠르다
코드를 공유할 때만 중앙서버에 접속하면 되고 코드는 각 사용자의 로컬에 존재한다.
3. 분산작업에 효율적이다.
프로젝트를 복사하여 각자 작업할 수 있다.
소스코드를 관리할 통합관리자를 둘 수 있다.
4. 데이터 보장
체크성 : 16진수 문자열로 이루어진 commit id를 검사함
체크성이 같으면 파일구성이 완벽히 같다는 것이다.
누가 어느파일을 관리했는지 기록이 남는다.
5. 준비영역 staging area
git add로 수정한 내용을 저장소에 반영하기전 검토단계를 거칠 수 있다.
6. git은 오픈소스다.
소스코드를 공개하고 있어서 계속해서 발전하고 있다.
3. git 설치, 초기설정
* 리눅스, 맥os 환경에서는 대부분 git이 이미 설치되어 있다.
1. 터미널에서
$ git
을 쳐보면 명령어들이 출력되면 이미 설치된것.
2. git 설치 확인
$ git --version
3. git 초기 설정
(1) 저장소에 코드를 반영할 때 통용적으로 등록될 사용자 정보
$ git config --global user.name "{{사용자 아이디}}"
$ git config --global user.email "{{사용자 이메일}}"
(2) 프로젝트마다 사용자 정보를 다르게 사용할 경우
$ git config user.name "{{사용자 아이디}}"
$ git config user.email "{{사용자 이메일}}"
git 저장소가 시작되지 않은 상태에서는 유저 설정 시에 반드시 --global을 입력해야합니다.
(3) git 설정파일에 저장된 내용 확인
$ git config --list
4. git 저장소 생성
1. git 시작하기
$ git init ## 현재 디렉토리를 git repository로 설정하기
$ git init 프로젝트이름 ## 프로젝트이름으로 폴더가 생기고 그 폴더가 git repository로 설정됨.
$ ls -a ## 숨겨진 파일까지 목록 확인하기
$ git init 디렉토리 경로 . ## 저장소를 만들 경로로 이동하지 않고 git repository로 설정하는법
Initialized empty Git repository 라고 뜨면서 .git 디렉토리가 생성됨.
2. git 시작하기 - git 명령어, 저장소만들기
1. git 파일 영역의 라이프사이클
$ git add 파일명 혹은 . ##
Untracked (working directory) -> Staged (staging 영역) // 새로 만든 파일
Modified (working directory) -> Staged (staging 영역) // commit후 변경한 파일
$ git checkout -- 파일 ## working directory에서 파일의 수정된 부분을 취소함.
$ git commit -m '' ## Staged (staging 영역) -> repository
준비영역에 있는 파일들을 저장소에 반영하고, 로컬은 Unmodified 상태가 된다.
이미 커밋한 파일을 수정하고 다시 커밋했을 경우 git repository에는 새로운 버전으로 스냅샷형태로 등록된다.
-> commit history를 스냅샷형태로 등록하여 이전 버전으로 돌아가기 쉽다.
$ git commit -m "메세지" ## 커밋 메세지까지 한번에 쓸 수 있다. 메세지에 나중에 알기 쉽게 간단하게 설명을 쓴다.
$ git commit --amend ## 메세지 오타나 누락된 파일 등 커밋 수정 => 에디터로 수정
$ git commit --amend -m '수정할 메세지 작성' ## 에디터없이 바로 수정 가능
$ git reset HEAD 파일명 ## Staged (staging 영역) -> Untracked (working directory)
파일을 unstage. commit 취소하기 git add 의 반대상태로 만드는 명령어
2. 상태 확인
$ git status
Staging 영역에 있는 파일들의 상태를 확인할 수 있다.
$ git log
commit id, commit 한 날짜, 파일을 누가 작성했는지, 누가 커밋했는지, commit message등 commit 기록을 볼 수 있다.
$ git log -p -n
상위 n개의 commit내용 중 -diff처럼 변한 부분만 보여준다.
$ git log --stat
어떤 파일이 commit 에서 수정되고 변경되었는지 파일 내 라인이 추가되거나 삭제되었는지 확인.
$ git log --pretty=oneline
각 commit 을 한 줄로 표시하는 옵션
$ git log --graph
commit 간 연결된 관계를 아스키 그래프로 출력한다. branch가 있을 때 유용하게 사용.
$ git log --graph --all
$ git log --graph --pretty=oneline --all
commit 간 연결관계 기록을 그래프로 보여준다.
$ git log -S 검색할 텍스트
수정된 코드 중 검색할 텍스트가 포함됐는지 검사
$ git diff
commit한 파일 중 변경된 내용 확인
3. git 가지치기 - branch 만들기
* branch 란? : 변경 사항의 스냅샷에 대한 포인터로 독립적으로 작업을 진행하기 위한 개념.
git 은 변경사항을 스냅샷형태로 저장하는데 이 스냅샷에 대한 정보들을 포인터라고 한다.
왜냐하면 정보들을 알아야 원하는 commit을 가리키고 선택할 수 있기 때문이다.
* master branch : 처음 repository를 만들면 자동으로 생기는 branch.
* HEAD -> master
와 같이 HEAD 포인터가 가리키고 있는 것이 현재 branch.
1. git branch 명령어
$ git branch
로컬 브랜치 정보
$ git branch -v
로컬 리모트의 정보와 마지막 커밋 내역
$ git branch -a
로컬에 저장된 모든 브랜치 정보
$ git branch -r
리모트에 저장된 브랜치 정보
$ git branch 브랜치명
새로운 브랜치 생성
$ git branch -d 브랜치명
브랜치 삭제
$ git checkout 브랜치명
브랜치명으로 브랜치를 전환하고 해당 파일을 워킹 디렉토리로 복사.
-> HEAD pointer가 가리키는 branch가 변한다.
$ git checkout [commit id / snapshot hash]
snapshot을 전환할 때도 사용 가능하다. 즉, 이전 commit으로 전환할 때.
$ git branch --hard <커밋 해시>
현재 브랜치를 과거의 특정 커밋으로 이동
$ git merge master
현재 checkout된 브랜치를 master브랜치에 병합
2. fast forward 방식 merge
$ git log 를 해서 나오는 commit 중 HEAD -> 여러개를 가리키고 있으면 병합된것.
merge 했을 때 master 브랜치에 다른 변경사항 없이 새로운 내용만 추가될 때.
3. 그 외의 merge
topic branch등 서로 다른 작업을 하고 merge 할 때.
$ git branch --merged
* test브랜치를 master브랜치에 merge한 후 삭제
$ git checkout test ## test 브랜치로 이동
$ git merge master ## master를 merge하여 최신버전을 가져옴
$ merge conflict해결
$ git checkout master ## master 브랜치로 이동
$ git merge test ## master 브랜치에 test 브랜치를 병합
$ git branch -d test ## test 브랜치를 삭제
4. conflict 해결
merge한 두 branch에서 같은 파일을 변경했을 때 conflict 발생한다.
[ 해결방법 ]
1. $ git status
로 어느 파일에서 충돌이 발생했는지 확인할 수 있다.
2. 충돌이 발생한 파일을 열면 git에서 <<<<<<<, =======, >>>>>>> 등의 기호를 포함시켜 어느부분이 어느 branch의 코드인지 표시해두었다.
여기서 어떤 코드를 사용할 것인지 사용자가 직접 수정한 후, git에서 임의로 포함시킨 기호들을 삭제한다.
3. git add, commit 을 한다.
4. 다시 merge 한다.
[3 개의 branch가 충돌났을 때]
git status로 충돌이 난 파일을 확인한다
1번 branch에서 파일을 수정하고 저장, git add, git commit 한다.
2번 branch를 1번 branch에 merge한다.
2번 branch로 checkout해서 1번 branch를 merge한다. ## 즉, 충돌이 난 두 branch가 같은 파일을 공유하도록 한다.
master branch로 checkout해서 아무branch를 merge한다. ## master에 merge.
[ 방지방법 ]
1. master branch의 변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거
2. master branch를 자주 변경하지 않는다.
4. git 원격 저장소 - 원격 저장소를 연결해 이용하는 방법
1. 원격 저장소 받아오기
1. 원격저장소 : 인터넷이나 네트워크에 있는 저장소 git hosting 서비스
2. 원격 저장소 받아오기
gitlab 이나 github 의 원하는 repository 로 가서 clone버튼을 누른다.
https 나 ssh등 원하는 주소를 복사한다.
$ git clone {{ 위에서 복사해온 주소 }}
원격저장소를 로컬에 복사해옴.
** 명령어를 실행한 폴더 안에 새로운 폴더를 생성함.
-> $ git clone {{ 위에서 복사해온 주소 }} . ## 현재폴더를 repository로 사용하려면
$ git remote add origin {{ 위에서 복사해온 주소 }} ## git remote(git에 있는 원격 저장소)를 origin이란 이름으로 add하겠다.
$ git remote ## 연결된 원격 저장소 확인하는법
$ git remote -v ## 지정한 저장소의 이름과 주소 확인하는 법
$ git remote show origin ## 어떤 원격저장소가 있는지 확인하는법
$ git remote rename origin 변경할이름 ## 원격 저장소 단축이름을 origin에서 변경할이름으로 변경.
$ git remote rm git_test ## 주소가 변경되었거나 필요없어진 저장소 삭제하기
2. 원격 저장소 동기화
1. Pull : 원격저장소에서 데이터 가져오기 + 자동으로 Merge
$ git pull origin master ## 원격 저장소에서 데이터 가져오기 + 병합
$ git log --all ## 병합됐는지 확인
** pull 이 되지 않는 경우는 보통 다른 사람의 commit과 내 컴퓨터의 코드가 충돌할 때이다. (주로 하나의 branch에서 작업할 때 ) -> 대신 fetch 를 해야함.
2. Fetch : 원격저장소에서 데이터 가져오기, merge는 따로 해줘야 함.
$ git fetch
$ git log origin/master ## 변경된 파일 확인
$ git merge origin/master ## master와 origin/master가 서로 병합됨.
3. push : 로컬저장소에서 원격저장소에 데이터 전달하기
$ git push origin master
** 주의 : 다른사람이 먼저 push한 상태라면 먼저 다른사람의 작업을 merge한 후 push 해야한다.
** push 가 되지 않으면 먼저 pull을 해와서 수정된 파일을 확인하여 충돌을 해결하고 add, commit 을 한 후 push를 한다.
3. Origin 이란?
로컬저장소-원격저장소 연결
원격저장소에서 작업내용 받아오기
원격저장소에 작업내용 반영하기
'엘리스 ai트랙' 카테고리의 다른 글
자바스크립트 훑기 (0) | 2022.01.19 |
---|---|
자바스크립트 기초 (0) | 2022.01.18 |
반응형 웹 (0) | 2022.01.13 |
[css] Transform Transition Animation (0) | 2022.01.13 |
[mac] SSH로 git 계정 여러개 등록하기 (0) | 2022.01.13 |