Git_Github_Sourcetree

tescodanish·2023년 5월 17일
0
post-thumbnail

git
버전 관리 도구
github
인터넷상(원격)에서 깃으로 관리한 프로젝트 호스팅(관리) 서비스
sourcetree
깃을 편히 쓰는 도구

git 명령어

기본 배경 지식

CLI 명령어 기반 인터페이스

윈도우 : git bash

명령어는 암기가 아닌 숙달의 대상 (더블클릭과 같다)

pwd - 현재 경로 확인하기

ex) 내pc - c드라이브 - ~

1) 절대경로
2) 상대경로 : 점으로 나타냄 상위경로는 쩜쩜

ls 현재 경로의 파일 및 폴더 조회
ls -a 숨김 파일 및 폴더까지 조회
ls -al 리스트형태로 자세하게 조회
=> 파일 이름 맨 앞에 점이 붙어있다. ex) .hello

clear 화면 비워라

cd <경로> <경로>로 이동하기
cd .. 상위 디렉터리
cd . 현재 디렉터리
cd ~ 홈 디렉터리로 이동 (명령어창이 열렸을 때 기본 경로)

touch 파일명.확장자명 - 파일 생성

cat <파일명> - 파일 내용 확인

vi <파일명> 편집하기 (중요)

ex)
touch a.txt
vi a.txt

a or i를 눌러서 입력모드로 바꿔야 입력 가능

빠져나오기 ESC

:w 저장
:q 닫기

:wq 저장하고 닫아라

rm (파일명) 파일 삭제 : remove

mkdir <디렉터리 이름> 폴더 생성 : 메이크 디렉터리

rmdir <디렉터리 이름> 폴더 삭제 (비어있는 폴더만 가능)

rm -rf <디렉터리 이름> 강제로 폴더 삭제

깃 & 깃허브

깃이 없는 세상
왜 깃을 배워야 할까?

변경내역 확인, 작업 되돌리기, 협력★이 어렵다.

우리, 변경사항(버전)을 조금 더 일목요연하게 관리해보자!

git : 버전(commit) 관리를 위한 도구

개발자 입장에서의 버전 : 유의미한 변화가 결과물로 나온 것
새 기능 추가 / 버그 삭제 / 수정

프로그램 개발 : 유의미한 변화를 쌓아 프로그램을 만들어나가는 것

git : 변경 내역들을 기억하며, 필요하다면 작업을 되돌리며,
여러 명의 코드를 쉽게 나누고 합친다

github
원격 저장소 호스팅 서비스
인터넷 상에서 깃으로 관리한 프로젝트 호스팅 서비스
개발자들의 SNS

git config --global user.name or email " "
git config -l 확인

깃이 관리하는 세 개의 공간

작업 디렉터리
workingtree

버전 관리의 대상이 위치하는 공간
.git이 있는 디렉터리

↓ add

깃이 관리하는 가상의 공간 ( 눈으로 볼 수 없음)

스테이지
index
다음 버전이 될 후보가 올라가는 공간 (유의미한 변경사항)

↓ commit -> 버전 (유의미한 변경사항이 결과물로 나온 것) or 버전을 만들다

저장소
repo
버전이 만들어지고 저장되는 공간

  • 로컬 저장소
    내 컴퓨터 속에만 존재하는 저장소

  • 원격 저장소
    인터넷 세상 어딘가에서 관리되는 저장소

작업 디렉터리 내에서 변경사항 생성
스테이지로 add
저장소로 commit

로컬 저장소 만들기
git init

작업 디렉터리 상태 확인
git status

스테이지에 추가
git add <스테이지에 올릴 대상 대상 대상>
git add . 모든 변경사항 스테이지에 올리기

스테이지에서 내리기

변경사항을 버전으로 만들 때 커밋메시지를 남겨야 됨 (뭐바꿈 왜만듬 버전 설명 자세하게!)
git commit 자세한 커밋 메시지와 함께 커밋하기
git commit --message "<커밋 메시지>" 커밋메시지로써 커밋하기(본문 생략)
git commit -m "<커밋 메시지>"
#b.txt?

git log 내가 만든 버전 보기

내가 만든 커밋 간단하게 보기
git log --oneline
긴 커밋 메시지의 앞부분만 따옴

git log --patch/-p 커밋별 변경사항 목록 조회

git diff
내가 최근에 만든 커밋과 현재 작업디렉토리를 비교해서 보여줌
스테이지로 올리면 조회 불가

git diff --staged 최근 만든 커밋과 스테이지 비교

git diff <커밋1> <커밋2> 커밋끼리 비교
커밋의 순서★에 따라 내용이 달라짐
커밋1에 비해 커밋2가 뭐가 달라?

브랜치 관리하기 - 깃이 존재하는 이유, 깃의 꽃

나뭇가지

나무가 가지를 치는 것 처럼 버전이 여러 갈래로나뉘어 만드는 것 (서로 무관해짐)

브랜치는 버전의 분기

쌓아올리다가 합칠 수도 있음

브랜치가 없다면?
쇼핑몰 코드
A 장바구니 기능 추가
B 주문 목록 기능 추가
서로 작업과 전혀 관련 없는 부분. 같은 코드를 다르게 수정한 부분 혼재 (=충돌)
일일이 수작업으로 합쳐야 함
코드를 합치다 실수가 발생할 수 있음

시간이 흐르면 요구사항은 1000개가 넘어갈 정도로 많아짐

브랜치로 버전의 분기를 관리하는 방법
1. 브랜치를 나눈다
2. 각자의 브랜치에서 작업한다
3. (필요하다면) 나눈 브랜치를 합친다
4. 같은 부분을 다르게 수정한 부분만 보면 된다

최초의 브랜치 (=master 브랜치 or main 브랜치 (2018년 이후로 권고, 설치시 체크))

git branch 브랜치 확인

git branch <새 브랜치 이름>
새 브랜치 생성

got checkout(switch?) <브랜치 이름>
작업환경을 다른 브랜치 이름으로 바꾼다

git branch -d 브랜치이름 (체크아웃 되지 않은 브랜치만 삭제 가능)

HEAD 포인터
현재 작업 중인 브랜치의 커밋
일반적으로 현재 작업 중인 브랜치의 최신 커밋을 가리킨다
한 마디로 내가 지금 어디에서 작업 중인가

체크아웃
특정 브랜치에서 작업 할 수 있도록

브랜치를 합친다 == 브랜치를 병합(merge)한다

병합의 두 가지 방법
git merge

새로운 커밋X
받아들이기만 함 (빨리감기 병합)
foo 브랜치가 뻗어나오고 쌓이고 병합되는 순간까지 master 브랜치는 가만히 있었다.
마치 빨리감기하듯 foo브랜치에서 추가된 커밋을 반영하기만 하면 된다
빨리감기 병합

새로운 커밋O
bar 브랜치에는 없는 커밋이 master 브랜치에 있고, master 브랜치에는 없는 커밋이
bar 브랜치에 있는 상황
두 브랜치를 병합한 새로운 커밋 생성
커밋메세지를 만드는 창으로 간다

git check out -b bar
새로운 bar 브랜치를 만들고 체크아웃 해라

git commit -- amend 커밋메세지 수정

충돌 해결하기★

  1. 충돌을 해결한다(어떤 브랜치의 내용을 반영할지 직접 선별한다)
  2. 다시 커밋한다

소스트리

로컬 저장소 만들기
만든 저장소에 파일 넣기
스테이지에 올리기

아래에 커밋메세지 작성 후 추가


커밋 해시

각각의 버전을 지칭 할 수 있는 고유한 정보

[짧은 커밋해시]

태그

특정 커밋을 좀 더 가독성 있게 지칭 할 때 사용
ex) 여러 개의 커밋 중




ㅇ< v1.0.0



ㅇ< v1.0.1


버전끼리 비교하는 방법

ctrl + a로 선택해서 비교

우클릭 + 선택한 버전 열기로 특정 버전 파일 확인 가능


작업되돌리기 : 빈번하게 발생

만든 버전을 되돌리는 방법
1. revert
버전을 되돌린 새로운 버전 만들기
1000번째 -> 999번째로 가고싶으면
999번째와 같은 1001번째를 만든다

= 우클릭, 커밋 되돌리기

  1. reset
    버전을 완전히 되돌리기
    999번째를 만든 당시로 되돌린다

하나의 버전이 만들어지는 과정
a) 작업 디렉토리에서 변경 사항 생성하기
b) 스테이지로 추가하기
c) 저장소로 커밋하기

1) soft
c만 되돌리는 것

2) mixed
b까지 되돌리는 것

3) hard
a까지 되돌리는 것

=> 우클릭, 이 커밋까지 현재 브랜치를 초기화


작업 내용 임시 저장
스태시
버리긴 아깝고 쓰긴 아쉽다


브랜치

이름 짓는 국룰 - 목적에 맞게 지어라

HEAD

  • 현재 작업중인 브랜치의 커밋
  • 일반적으로 현재 작업 중인 브랜치의 최신 커밋
  • 한 마디로 "내가 지금 어디서 작업중인가"

체크아웃(checkout)

  • 특정 브랜치에서 작업할 수 있도록 작업 환경을 바꾸는 것
  • HEAD의 위치를 특정 브랜치의 최신 커밋으로 옮김

브랜치를 합친다
merge

fast-forward-merge

  • 기존 커밋이 새 작업을 하지 않은 상태일 때

충돌

병합하려는 두 브랜치가 같은 내용을 서로 다르게 수정한 상황

  • 충돌해결
  • 다시 커밋

브랜치의 재배치

리베이스
마스터 2에서 생긴 foo 브랜치를 마스터4 브랜치로 옮겨보자
foo 브랜치로 체크아웃 하고 베이스를 옮기고자 하는 커밋에 마우스 오른쪽 버튼, 재배치

충돌 발생 가능-> 충돌해결은 같은 방법으로 하면 된다.


Github
a) 개발자들의 SNS

  • git으로 버전이 관리되는 프로젝트 업로드
  • 팔로우 기능
  • star 버튼을 통해 좋아요같은 호감 표시 가능

b) 원격 저장소 호스팅 서비스

  • 인터넷 세상 어딘가에 있는 다른 컴퓨터의 저장소
  • 백업과 협업

깃허브로 협업하기 ★

원격 저장소와의 네 가지 상호작용

원격 저장소 브랜치 이름

  • main 브랜치 == master 브랜치
  • origin == 원격 저장소에 붙은 일종의 별명
  • origin/HEAD == 원격 저장소 origin의 HEAD
  • origin/main == 원격 저장소 origin의 main

a) 클론(clone)

  • 원격 저장소를 로컬 저장소에 복제하기
  • .git 숨김폴더까지 같이 클론 됨, git init을 할 필요가 없다.
    내가 소유하고 있지 않은 원격 저장소를 복제해보자
    저장소 페이지에서 code -> ssh -> 복사

b) 푸시(push)

  • 원격 저장소에 로컬 저장소의 변경사항을 밀어넣기

c) 패치(fetch)

  • 원격 저장소를 일단 가져만 오기
    내가 작업중인 원격저장소의 내용에는 영향을 주지않고 내용을 가져오기

d) 풀(pull)

  • 원격 저장소를 가져와서 합치기
    fetch+merge

git remote add origin git@github.com:2topin/test-repo.git
git branch -M main 브랜치 이름 변경
git push -u origin main 푸쉬, -u는 없어도 된다.
-u를 한번만 넣고 사용하면


풀 리퀘스트

내가 소유하지 않은 원격 저장소에 푸시 할 수 있나?

  • 권한을 주지 않는 이상 불가능

  • 원격저장소가 내 변경사항을 Pull하도록 요청을 보내는 방식

  • 다 같이 푸쉬하면서 협업 하는 것은 좋지 않다.

  • 풀리퀘스트 자체가 코드논의의 장이 된다.

  • 풀리퀘스트를 이용하면 기록이 남는다.

  1. 기여하려는 저장소를 본인 계정으로 포크하기
  • 포크 : 내가 소유하지 않은 특정 원격저장소를 내 계정으로 복제하는 것
  1. 포크한 저장소를 클론하기

  2. 브랜치 생성 후 생성한 브랜치에서 작업하기

  • 변경사항 만들고 커밋하기
  1. 작업한 브랜치 푸시하기
  • 깃허브에 풀리퀘스트 버튼이 생성된다.
  • 내 깃허브 저장소에서 싱크포크버튼을 누르면 현재 원본저장소와 같게 커밋된다.
  1. 풀 리퀘스트 보내기

tegongkang@gmail.com

0개의 댓글