WIKI

SEOUL‍
wiki:sw:git

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
wiki:sw:git [2023/06/14 16:19] – 제거됨 - 바깥 편집 (Unknown date) 127.0.0.1wiki:sw:git [2025/01/17 00:50] (현재) – Obsidian transfer clockoon
줄 1: 줄 1:
 +Git
 +====
 +
 +## 개요
 +Git은 2021년 현재 가장 많이 쓰이는 버전 관리 소프트웨어다. 
 +
 +## 개념
 +### worktree
 +다른 버전 관리 시스템과 달리, git은 크게 3가지 공간에서 파일을 다룬다. 저장소(repository)는 작업한 내용(파일 추가, 수정 등)이 저장되는 실제적 공간이다. 저장소의 작업 내용은 `.git` 디렉토리 안에 저장된다. 워크트리(worktree)는 사용자가 실제로 작업을 수행하는 공간을 뜻한다. 워크트리에서 수정한 내용을 저장소에 반영하기 위해서는, 워크트리의 수정 사항 중 실제로 반영할 내용을 지정하게 된다. 이 단계를 `stage`라 칭한다. 즉 모든 수정된 파일이 자동으로 `stage`되지는 않는다. stage를 위해 마련된 가상의 공간을 인덱스(index)라 한다. 즉, 최종적으로 저장소에 commit하였을 때 반영되는 내용은 워크트리가 아닌 인덱스에 존재하는 내용이다.
 +
 +#### worktree 지정
 +git은 기본적으로 (로컬)저장소와 워킹트리가 같은 장소에 있다. 즉 .git 디렉토리는 워킹트리의 하위에 위치하며, 다른 파일들과 혼동하지 않도록 숨김처리되어 있다. 그러나, 원한다면 저장소와 워킹트리의 root를 따로 지정할 수 있다. 예를 들어 `/repo/test` 디렉토리에 저장소를 만들고, `/repo/test/workingtree` 폴더의 내용을 작업한다고 한다면, `/repo/test` 디렉토리에서 `git --work-tree './workingtree'`로 지정하여 명령어를 수행하면 된다. 이 때, 원격 저장소에 push되는 내용은 `/repo/test`가 아닌 `/repo/test/workingtree`를 루트 디렉토리로 간주한다.
 +
 +## 명령어
 +- `git status`: 현재 git 상태.
 +- `git branch <branchname>`: `<branchname>`란 이름으로 새로운 브랜치를 생성한다.
 +- `git checkout <branchname>`: `<branchname>` 브랜치로 전환한다.
 +    - `git checkout -b <branchname>` 옵션을 사용하면 브랜치 생성과 전환을 동시에 수행한다.
 +- `git push`: 로컬 저장소의 커밋 내용을 리모트에 업로드한다.
 +- `git config`: git 설정을 관리.
 +- `git config --list`: 현재 git 설정값을 출력.
 +
 +## Use cases
 +실제 사용 과정에서 자주 발생하는 케이스에 대한 정리.
 +
 +### 로컬 저장소간 충돌
 +원격 저장소에서 각각 로컬 저장소 A, 로컬 저장소 B로 내용을 클론했다고 하자. 그리고 A와 B가 각각 컨텐츠를 수정하고 커밋했다고 하자. 이 경우 A가 저장소를 푸시한 다음 B가 푸시하려 한다면 어떤 일이 발생할까?
 +
 +1. A/B가 수정한 파일이 다를 경우: 각각 수정이 원격 저장소에 반영된다.
 +2. A와 B가 같은 파일을 수정한 경우, 둘 중의 한 방법을 택한다.
 + 1. merge를 진행한다.
 + 2. stash를 통해 B의 로컬 변경 내용을 임시 저장한 다음, pull한 결과와 대조하여 수동으로 변경한다.
 +
 +### 원격 브랜치 가져오기
 +- `git remote update`로 원격 브랜치 목록 업데이트
 +- `git branch -a`로 사용 가능한 브랜치 목록 확인
 +- `git checkout -t [BRANCH]`로 원격 브랜치 체크아웃.
 +---- struct data ----
 +pageinfo.status      : Draft
 +----