티스토리 뷰

조각글

git 빠르게 시작하기

빅또리 2021. 2. 21. 22:35

 

git이 뭔가?

 

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.                                                            - git 공식 사이트

 

프로젝트에서 (1) 버전 관리, (2) 백업, (3) 협업등의 기능을 할 수 있도록 도와주는 분산 버전 관리 시스템 중 하나이다.

2005년에 리눅스 커널 개발자 리누스 토르발스가 리눅스 소스 코드 관리를 위해 다른 개발자들과 함께 개발했다고 한다.

 

git이 가장 대표적으로 널리 쓰이는 버전 관리 시스템이지만 

Top 10 Alternatives & Competitors to Git

이런 대체재도 있다.

 

 

 

 

 

 

 

 

git 기본구조

 

 

 

 

 

 

 

 

시작하는 방법 2가지

1. 로컬저장소만 먼저 만들어서 쓰다가, 새 원격 저장소 만들어서 연결하고 싶을 때 (init + push)

(1) 로컬에서 원하는 폴더 git init해서 로컬 저장소로 만들어서 커밋 로그도 남기고 사용하다가.

 

(2) github에서 새로운 원격 저장소 생성하기

(3) 그럼 생성된 원격 저장소 기본 화면에 뜨는 코드 복사해서 로컬 저장소에서 명령 내리면 된다 (push 포함된 명령)

중간에 브랜치명 main으로 바꾸는 코드가 있는 것은

2020년 10월부터인가? github이 master/slave 같은 노예제도를 떠오르게 하는 인종차별적 표현을 없애자는 취지로 기본 브랜치명을 master에서 main으로 바꿨다고 한다.

 

 

 

 

2. 이미 존재하는 원격 저장소를 로컬 저장소로 복제해오고 싶을 때 (clone)

(1) 이미 있는 원격저장소 url 주소 복사하기

(2) git clone ( url ) ( 원하는 로컬저장소 폴더명 )

 

그럼 .git 폴더 포함하고 있는 로컬 저장소 생성됨. 아주 간단.

 

 

 

 

 

 

 

fork vs clone

 

fork : 다른 계정의 원격 저장소를 내 계정의 원격저장소로 복제해 오는 것.

 

내 계정으로 fork 해온 원격 저장소를 clone해서 만든 로컬저장소랑 push, pull으로 작업하다가

최종적으로 작업한 결과물이 원래 계정의 원격저장소에 반영되길 원하면 pull request 요청을 보내면 된다.

그러면 권한 있는 사용자가 검토해보고 무시하던지 merge해주든지 할 것이다.

 

clone : 원격 저장소를 복사해서 내 컴퓨터에 새로운 로컬 저장소를 만드는 것.

권한이 없으면 원래의 원격저장소로 push가 불가능하다.

 

 

참고 : https://velog.io/@imacoolgirlyo/Git-fork%EC%99%80-clone-%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-5sjuhwfzgp

 

 

 

 

 

 

 

fetch vs pull

fetch : 마지막으로 로컬과 원격저장소가 동기화됐던 시점 이후로 원격 저장소에 어떤 변화가 있었는지 정보를 가져온다.

실제 로컬 저장소 파일들에 변화를 가하지는 않음.

 

fetch 를 실행하면 원격 저장소의 최신 커밋 이력을 이름 없는 브랜치로 로컬에 가져오는데,

이 브랜치는 'FETCH_HEAD'의 이름으로 체크아웃 할 수도 있다고함.

 

pull : fetch + merge

(이때의 merge도 사실상 보통의 브랜치간 병합처럼, 로컬브랜치와 원격 브랜치를 병합하는 작업임)

pull not only downloads new data, it also directly integrates it into your current working copy files

원격 저장소의 바뀐 데이터들을 가져와서 로컬 저장소의 파일들과 통합한다.

 

다른 경우는 자연스럽게 변화가 파일에 반영되지만, 로컬과 원격에서 각각 다른 부분을 수정했다든가 하는일로 merge conflict가 생기면 (아래 그림처럼) 파일을 열어서 직접 수정 해준 뒤 push하면 됨.

출처 : stat.duke.edu

 

 

 

 

 

 

 

 

upstream branch

git push -u orign master  에서 u 옵션이 뭔가하고 찾아 봤는데

git push origin master
git branch --set-upstream master origin/master

 

이렇게 두 명령을 합친 것과 같은 효과를 내는하는 옵션이라고 한다.

 

 

그래서 upstream 셋팅이 뭔지 찾아봤다.

출처 : Schkn

set upstream = set default remote branch for your current local branch

 

 

 

 

git push/pull [remote] [branch]

 

[remote]  :  로컬저장소에 등록되어있는 원격저장소

remote의 예

[branch] :  여기서의 브랜치는 대체로 remote의 브랜치를 뜻하는 것 같다.

branch의 예

 

 

 

 

실험을 해봤더니 tracking info 설정을 하지 않고 [remote] [branch]를 생략하면,

이런 메세지가 출력되면서 명령이 실행되지 않는다.

 

 

pull : local과 remote 브랜치명이 같지 않아도 괜찮음.

push : 기본적으로는 local과 remote에서 브랜치명이 같아야 함.

 

 

git pull [remote] [branch]   

 

: [remote]/[branch] 브랜치를 가져와서 현재 로컬 브랜치랑 (HEAD가 가리키는) merge하는 효과

upstream branch 설정한뒤 생략하면 그 브랜치 가져옴

 

git push [remote] [branch]

 

: 기본적으로는 현재 로컬 브랜치명과 여기 적는 [branch]명이 같아야 함.

(그리고 생략하고 git push만 쓰려면 브랜치의 이름 같아야함) 

 

만약 현재 로컬 브랜치를 이름이 다른 브랜치로 push 하길 원하면

git push [remote] HEAD:[branch] 이런식으로 적어야하고,

 

그게 아닌경우 브랜치명이 다르다면 로컬의 다른 브랜치가 push될 수 있다. (현재 HEAD가 가리키지 않는..)

예를들어 local의 kakao 브랜치에서 git push origin naver라고 치면

local의 naver브랜치를 origin/naver브랜치로 (없으면 생성해서) push하는 효과가 났다.

 

 

결론적으로 이렇게 인 것 같은데... 확신은 들지 않는다. 실제로 git을 여러번 써봐야 알 것 같다.

'조각글' 카테고리의 다른 글

SDKMAN  (0) 2023.10.08
golang 모듈  (0) 2023.04.05
devops 따라하기 시리즈  (0) 2022.03.22
영역함수  (0) 2021.11.05
git 빠르게 시작하기 2 (내부 구조)  (0) 2021.02.26
댓글
공지사항
최근에 올라온 글