본문 바로가기
Git

5/1 - GIT, 버전 관리

by Jiwon_Loopy 2025. 5. 5.
반응형

목차


Git

버전 관리


  • 동일한 정보에 대한 여러 버전을 기록
  • 데이터의 과거와 현재 상태를 기록
  • 다른 시점의 데이터를 불러올 수 있는 것
  • 두 시점의 데이터를 비교
  • 유사 용어
    • 버전 관리
    • 형상 관리
    • 협업 도구
  • 종류
    • CVS
    • Git
    • SVN

Git


  • 버전 관리 시스템 중 하나
  • 로컬 저장소와 원격 저장소로 구분
  • 분산 버전 관리 시스템
  • branch로 병합
  • master와 별개로 브랜치를 생성하여 작업 가능
  • 파일 수정 내용 추적 가

Git 설치


  • GUI (그래픽 유저 인터페이스)
    • 소스트리
    • GitHub Desktop
    • Tortoise
  • CLI (커맨드 라인 인터페이스)
    • 터미널에서 명령어 직접 입력
    • 윈도우
      • 터미널
      • GItBash
      • VSCode 터미널..
    • 맥OS
      • 터미널

다운로드


  • Git 설치

Git

  • vsCode 설치

 

  • 소스 트리 설치
    • Mercurial 체크 해제

Sourcetree | Free Git GUI for Mac and Windows

  • Git Graph 설치
    • VSCode 내에서 Git Graph 설치
  • 환경 변수 설정 옵션
    • Use Git from Git Bash only
      • Git Bash에서만 실행
    • User Git from the Windows Command Prompt
      • 윈도우 명령프롬프트에서 git 실행이 가능하도록 환경변수 추가
    • Use Git and optional Unit tools the Windows Command Prompt
      • git과 unix 도구들을 환경변수에 추가
  • 라인 엔딩 옵션
    • Checkout Windors-style, commit Unix-style line endings
      • 체크아웃, 커밋 둘다 CRLF가 LF로 변환 (체크)
    • Checkout as-is, commit Unix-style line endigns
      • 체크아웃 변환 작업하지 않음, 커밋 변환
    • Checkout as-is, commit as-is
      • 체크아웃, 커밋 둘 다 변환하지 않음
  • CRLF, LF
    • 줄바꿈을 표시하는 제어 문자
      • CRLF는 커서를 다음 줄의 맨 앞으로 이동 (윈도우)
      • LF는 커서를 한 줄 아래로만 이동 (유닉스)
  • 설치 확인
git --version

기본 세팅


  • 사용자 설정
git config --global [user.name](<http://user.name>) "사용자 이름"
git config --global [user.](<http://user.name>)email "이메일 주소"
  • 설치 확인
git config --global [user.name](<http://user.name>) 
git config --global [user](<http://user.name>).eamil
  • 줄 바꿈 문제
    • OS마다 사용되는 줄 바꿈 문자열이 다르므로, 통일
    • Window
    $git config --global core.autocrlf true
    
  • Mac
$git config --global core.autocrlf input

리눅스 기본 명령어


파일 및 디렉토리 명령어


  • ls (list)
    • 기능
      • 해당 디렉토리에 존재하는 파일 목록 출력
    • 옵션
      • -a
        • 숨긴 파일 포함
      • -l
        • 상세 정보 출력
      • *.확장자
        • 확장자에 해당하는 파일 출력
    • 별칭
      • ll
        • ls -al과 동일
  • cd (change directory)
    • 기능
      • 디렉토리 변경
    • 사용법
      • cd + 경로
    • 경로 종류
      • 상대 경로
        • 현재 위치 기준으로 경로 설정
      • 절대 경로
        • 최상위 경로를 기준으로 경로 설정
  • pwd
    • 기능
      • 현재 디렉토리 경로 출력
  • touch
    • 기능
      • 크기가 0인 파일 생성
      • 파일이 존재하면 수정 시간만 변경
  • cp (copy)
    • 파일이나 디렉토리 복사
  • mv (move)
    • 파일 또는 디렉토리 이동 및 이름 변경
  • mkdir (make directory)
    • 새 디렉토리 생성
  • rmdir (remove directory)
    • 디렉토리 삭제
    • 디렉토리가 비어있어야 함
  • remove (remove)
    • 파일 또는 디렉토리 삭제
    • 옵션
      • -f
        • 강제 삭제
      • -rf
        • 하위 디렉토리까지 전부 강제 삭제

파일 확인 명령어


  • cat
    • 파일 내용 출력
  • head
    • 파일 앞 10행 출력
  • tail
    • 파일 마지막 10행 출력
  • more
    • 파일 내용을 페이지 단위로 출력
  • clear
    • 현재 화면 초기화

vi (vim) 편집기


  • vi 파일명
    • 존재하지 않는 파일 명을 입력하면 새 파일을 생성
  • 모드
    • i
      • 입력 모드
    • esc
      • 명령 모드

명령 모드 주요 명령어


  • :w
    • 저장
  • :q
    • 종료
  • :wq
    • 저장 후 종료
  • :q!
    • 강제 종료
  • : set number
    • 행 번호 출력
  • /문자열
    • 문자열 찾기
    • 찾은 후 n으로 다음 위치 이동
  • x
    • 문자 삭제
  • dd
    • 현재 행 삭제
  • yy
    • 현재 행 복사
  • p
    • 붙여넣기
    • 복사한 내용 현재 행 이후에 붙여넣기
  • 이동 명령어
    • gg
      • 첫 행으로 이동
    • G
      • 끝 행으로 이동
    • :숫자
      • 해당 숫자의 행으로 이동
    • ^
      • 현재 행의 처음으로 이동
    • $
      • 현재 행의 끝으로 이동

Git 기초


기본 명령어


  • git init
    • 저장소 생성
  • git add 파일명
    • 저장소 스테이지에 파일 추가
  • git commit
    • 변경된 파일을 저장소에 제출
    • 이력, 버전, 타임라인 추가
  • git status
    • 저장소 상태 출력

파일 상태


  • tracked
    • 버전을 만든 후에 깃에서 변경 내역을 추적 중
  • untracked
    • 한 번도 버전을 만들지 않음
  • umnodified
    • 수정되지 않은 상태
  • modified
    • 작업 트리에서 수정한 후 아직 스테이지에 저장하지 않은 상태
  • staged
    • 스테이지에 있고 아직 커밋하지 않은 상태

커밋


  • 코드의 변화를 기록하는 것
  • 모든 코드의 변경 이력은 커밋을 통해 기록

branch 관련 명령어


  • git branch 브랜치 명
    • 브랜치 추가
  • git switch 브랜치 명
    • 작업중인 브랜치 변경
  • git merge 브랜치명
    • 현재 작업중인 브랜치에서 해당 브랜치를 끌어와 병합

활용


  • 저장소 생성
    • 폴더 생성
    mkdir git_dir
    
    • 폴더 이동
    cd git_dir
    
    • 깃 초기화
    git init
    
    ⇒ master 생성, .git 폴더 생성
  • 저장소 파일 추가
    • 파일 생성
    vi test.txt
    
    • 저장소 상태 확인
    git status
    
  • 파일 추가
    • git 추척 설정
      • 한 번에 수정된 모든 파일 추가는 git add .
    git add test.txt
    
    git add .
    
  • 커밋
    • 커밋 메세지 작성 후 저장
    git commit
    
    • 메세지 작성 + 커밋
    git commit -m "메세지 내용"
    
    • add와 한 번에 커밋
    git commit -am "메세지 내용"
    
  • 로그 확인
  • git log
  • 과거 버전으로 돌아가기
    • reset
      • 해당 시점으로 돌아감
      • 코드 앞 4자리만 입력해도 가능
      • —hard 옵션은 파일까지 완전히 삭제
    $ git reset --hard 해시 값
    
    • revert
      • 새로운 커밋을 추가
      • 중간의 해당 행적만 삭제
      • revert에서 충돌이 날 경우 revert 불가 (수정 후 revert)
      • 해당 커밋 내역이 제외되었다는 이력이 추가
        • Accept Current Change
          • 현재 브랜치 변경 사항을 유지하고, 병합 하려는 변경 사항 무시
        • Accept Incoming Change
          • 병합 하려는 변경 사항을 유지하고, 현재 브랜치의 변경 사항 무시
        • Accept Both Changes
          • 두 변경 사항 모두 파일에 포함
        • Compare Changes
          • 충돌한 두 변경 사항을 비교해서 차이 확인
    • reset, revert 차이
      • 리셋은 이력을 남기지 않음
      • 리버트는 이력을 남김
  • 브랜치 생성
    • master와 브랜치 출력
    git branch
    
    • 브랜치 이동
      • checkout이었으나, 2.23 이후 switch와 resotre로분리
    git switch -c 브랜치 명
    
    • 브랜치 삭제
    git branch -d 브랜치 명 (커밋 남아있을 경우 강제 삭제는 -D)
    
    • 브랜치 명 변경
    git branch -m 기존 브랜치 명  새 브랜치 명
    
  • master 브랜치와 병합
    • merge
      • 합치면서 새로운 커밋 하나 생성
    git merge 브랜치 명
    
    // 충돌 전으로 돌아가기
    git merge --abort
    
    • rebase
      • 가지를 그 앞으로 그대로 옮겨 붙임
  • 충돌 해결
    • 두 개의 브랜치에서 같은 파일을 수정한 상태에서 병합하려는 경우 충돌 발생
    • 해당 경우 수정해서 반영
  • 로그 보기
    • git log -p
      • 커밋 마다 패치 내용 확인 (상세, diff형식)
    • git log —start
      • 요약 정보
    • git log —name-only
      • 이름만 출력
    • git log —graph
      • 그래프 형태로 출력
  • 관리가 필요없는 파일 대상에서 제외
    • .gitigmore파일 생성
      • touch 명령어는 비어있는 파일 생성
      • .으로 시작하는 파일은 숨김파일 (ls로는 보이지 않고, ls -al로해야 보임)
    • git ignore파일에 내용 추가
      • 깃이 더이상 추적하지 않음
      • 파일 내용을 변경해도 상태가 변하지 않음
    git add .gitignore
    

GitHub


  • 가입

GitHub · Build and ship software on a single, collaborative platform

  • 용도
    • 원격 저장소에서 깃 사용
    • 지역 저장소 백업
    • 협업 프로젝트에서 사용
    • 온라인 개발 툴 사용
    • 개발 이력 관리
    • 오픈 소스 참여
    • 코파일럿 사용
  • 원격 저장소
    • 서버 상에 통합되어있는 저장
  • 토큰 생성
    • 토큰 재확인 불가
    • 별도 보관
    • 윈도우
      • Window 자격 증명 관리자
      • Keychain Access
      • 소스트리 도구 옵션
  • 원격 저장소 생성
    • Fork
      • 다른 사람의 저장소 복사
    • Pull Request
      • 포크한 저장소를 수정하여 다시 원본 저장소에 병합해달라는 요청 보냄
    • Issue
      • 저장소 내 사용자들 간 이슈 논의
    • Wiki
      • 기록 저장
  • 저장소 생성
    • public
      • collaborators 외에는 쓰기 권한 없음
      • github 사용자는 누구나 읽기 및 fork 가능
      • 소유권 이전 가능
    • private
      • 관리자가 지정한 협업자만 접근 가능
      • 지정한 협업자만 포크 가능
      • 유료 사용자에게만 소유권 이전 가능
  • 용어
    • remote
      • 원격 저장소와 연결
    • branch -M main
      • master 브랜치 명을 main으로 변경
    • push -u origin main
      • 현재 파일들을 원격 저장소로 push

Git 명령어


  • git clone “저장소 주소”
    • 원격 저장소의 모든 내용을 로컬 저장소로 복사
  • git remote
    • 로컬 저장소를 특정 원격 저장소와 연결
  • git push
    • 로컬 저장소의 변경사항을 원격 저장소로 보냄
  • git fetch
    • 로컬 저장소와 원격 저장소의 변경 사항이 다른 경우 비교해서 git merge로 문제 해결
    • 최신 커밋을 로컬로 가져오기만 함
  • git pull
    • push와 반대, 원격 저장소의 내용을 로컬 저장소로 가져와 병합
    • 최신 커밋을 로컬로 가져와 merge또는 rebase
  • fetch와 pull의 경우 다른 개발자가 원격 저장소를 먼저 수정하는 경우 버전을 맞추기 위한 용도로 사용됨

권한


  • 계정명, 그룹명
  • 허가권 (누구한테 권한이 있는지)
  • 3개 권한
  • r
    • 읽기 권한
  • w
    • 쓰기 권한 (수정, 삭제)
  • x
    • 실행 권한
728x90
반응형

'Git' 카테고리의 다른 글

5/8 - Git, 코파일럿  (1) 2025.05.11
5/7 - Git 명령어, GitHub, Eclipse 연결  (1) 2025.05.11