Git

Git의 작동원리(혼자 작업, 페어 작업)

nickbegain 2021. 5. 7. 13:55

[git 혼자사용(log 명령어를 이용하여 기록확인 가능, git log)]

→ 현재 공용 remote repository에서 fork를 하여서 내 remote repository를 생성한 다음 해당 작업 폴더를 내 local로 가져오기 위해 clone명령어를 사용한다.  /  git clone repository주소

→ clone으로 local repository를 생성하게 되면 git에서 관리하는 폴더를 찾아서 cd로 이동 후 작업

---------------------------------------------------------------------------------------------------------------------------

→ 현재 local repository에서 index.js파일을 생성할 경우 untracked file 목록에 추가 된다.

→ git status 명령어를 사용하게 되면 현재 파일이 staging area에 있는지 untracked file목록에 있는지 확인이 가능하다.

---------------------------------------------------------------------------------------------------------------------------

 

→ untracked files목록에 있던 작업하는 파일인 index.js파일이 add명령어를 통해 staging area로 등록됨  /  staging area에 있는 파일만이 commit이 가능하다  /  git status에서 초록색 파일목록

→ git add 파일명  /  git add . (이 명령어는 untracked files목록에 있는 모든 파일을 staging files목록으로 등록하는 명령어)

---------------------------------------------------------------------------------------------------------------------------

→ commit명령어를 통해 staging area에 있는 파일을 commit하여 staging area에 있는 파일을 

commit하며 commit 할 때 메시지를 입력하여 변경사항을 간단히 작성한다.

→ git commit -m ‘메시지 입력'  /  git commit 만 입력할 경우 text 에디터가 출력되어 메시지를 입력하라고 한다,

→ commit된 파일들은 push를 통해 내 remote repository에 반영이 된다.

---------------------------------------------------------------------------------------------------------------------------

→ commit이후 변동사항이 있어서 commit한 것을 삭제할려는 경우 reset명령어 사용

→ 등록된 commit은 삭제  /  git reset HEAD^ 또는 git reset HEAD~1 사용

→ 이후 다시 add 명령어를 입력하여 변동된 사항을 staging area에 등록

/  commit명령어를 입력하여 staging area에 있는 파일목록을 commit 한다. (반복필요)

---------------------------------------------------------------------------------------------------------------------------

→ push 명령어를 통해 local repository에 commit되어 있던 변경사항들을 내 remote repository에 commit이 전달되어 반영된다.  /  git push origin branch (branch는 github사이트에서 왼쪽에서 확인)

/  주로 branch로 master를 많이 사용(여러명이 사용시 변경될 수 있음)  /  기존 파일과 merge 됨

---------------------------------------------------------------------------------------------------------------------------

[git 같이 사용]

- git init 명령어 사용

→ 이 명령어는 내 컴퓨터 내부에서 폴더를 생성하여서 터미널로 생성한 폴더 내부로 이동한 다음 입력

→ git init이 입력된 폴더는 git에서 관리하는 폴더가 되기 때문에 이 때부터 이 폴더 내부에서 git 관련 명령어를 사용할 수 있다.

→ 새로 생성되어 git init으로 등록된 폴더와 내 remote repository의 sink(최신화 버전)를 맞춰야 하기 때문에 git pull origin branch (branch이름은 github 웹페이지에서 확인)을 입력하여 remote repository의 가장 최신 commit등록 상태를 pull한다.

→ 참고로 clone을 하지 않기 때문에 새로 init명령어로 등록하고 pull을 통해 최신 commit상태를 맞춰야 한다.

→ 이렇게 sink가 맞춰진 상태(최신 commit등록 상태)후 local repository에 작업을 수행한다.

---------------------------------------------------------------------------------------------------------------------------

→ 협업하고 있는 다른 사람의 remote repository에 연결하기 위하여 remote add 명령어를 입력

→ git remote add pair 상대remote repository주소

→ 이렇게 연결을 해야 상대 remote repository에서 pull을 할 수 있다.

→ 현재 remote repository의 연결상태를 확인하고 싶을 경우 remote -v 명령어를 입력하면 된다.

---------------------------------------------------------------------------------------------------------------------------

→ 협업하고 있는 상대(remote repository가 내 local repository와 연결된 상태)의 remote repository의 최신 commit을 pull을 통해 받게 되면 현재 내가 작업한 결과와 상대가 작업한 결과가 merge(합병)를 하여서 통합되게 된다.  

/  서로 다른 파일을 생성하여 작업한 경우 상대방이 생성하여 작업한 파일이 local repository에 모두 합쳐지게 된다(merge)

/  만약 같은 파일의 같은 라인 코드를 같이 변경한 경우 충돌이 발생 할 수 있다. (conflict)

---------------------------------------------------------------------------------------------------------------------------










→ 상대 remote repository에서 pull을 통해 현재 작업과 merge를 한 통합결과를 내 remote repository에 push를 하여 최신 버전을 반영한다.

→ 이 때, 내가 따로 작업을 하지 않고 merge한 상태만 내 remote repository에 올릴경우

add(staging area등록),commit(commit등록)명령어를 생략하고 바로 push명령어를 사용하여 바로 올릴수 있다.

---------------------------------------------------------------------------------------------------------------------------

→ 새로 생성하여 (local repository내) 작업한 파일을 add 명령어를 사용하여 staging area에 등록한다

---------------------------------------------------------------------------------------------------------------------------

→ staging area에 등록된 파일을 commit을 통해 commit 한다. (push 가능한 상태)

---------------------------------------------------------------------------------------------------------------------------

[충돌상황 발생]

→ 만약 프로젝트에서 코딩한 작업파일을 add, commit 명령어를 이용하여 commit이 된 경우 만약 협업을 하고 있는 팀원이 같은 파일을 코딩하여 이미 push까지 끝낸 경우에 내가 해당 팀원의 remote repository에서 pull명령어를 이용하여 팀원의 작업을 반영할 경우 내가 이미 작업한 파일과 동일한 파일이기 때문에 충돌이 발생한다.

→ 이 경우 내 local에서 충돌이 일어난 파일을 편집하여 충돌된 부분을 수정한다

/  필요한 코드를 삭제하거나 하나로 합치는 등, 소통을 통해 충돌부분을 해결함

→ 이런 형태로 충돌이 발생했을 텐데 HEAD부분은 내가 작성한 부분이며 test(이 부분은 협업하는 팀원의 branch명에 따라 달라짐)부분은 협업하는 팀원이 작성한 부분이다.

→ 주석이나 기타 쓸모없는 라인 부분은 삭제하고 작성한 코딩을 수정한다.  /  충돌 제거

---------------------------------------------------------------------------------------------------------------------------

→ 충돌 부분을 수정한 이 후 다시 add 명령어를 사용하여 충돌이 제거되고 내가 작업 부분도 반영된 작업파일을 staging area에 등록  /  충돌 제거 이후 다시 add , commit 과정 필요

---------------------------------------------------------------------------------------------------------------------------

→ 충돌이 제거된 staging area에 있는 파일을 commit 명령어를 입력하여 commit 한다.

→ 이 전에 충돌이 일어난 파일은 commit메시지가 자동으로 등록되므로 git commit 만 입력하여 commit한다.

---------------------------------------------------------------------------------------------------------------------------

→ 이 후 충돌제거 + 작업반영 된 commit을 push하여 내 remote repository에 반영한다.