/////
Search

221004

작성자
조예지
최민준
날짜
2022/10/04
학습 내용
Git
텍스트

Git

정의

형상 관리 도구 (버전 관리 시스템) 중 하나
여러명이 동시에 작업하는 병렬 개발이 가능하게 해줌

git 명령어

Clone : Remote Repository를 Local Repository로 가져오는 작업
터미널로 클론받을 위치로 이동 후 clone 명령어 입력
명령어 : git clone [git 주소]
Push : Local Repository를 Remote Repository에 올리는 작업

Push시 주의 할 점

push할 때 GitHub에 iml,idea 같은 파일이 안 올라가도록 주의 한다.

인텔리제이에서 Push하기

1.
git 탭을 찾는다
2.
commit을 클릭
3.
github에 업로드할 파일 선택 후 설명 작성
4 Commit and Push 클릭
5 Github로 가서 확인한다

Git - 조예지

버전 관리 시스템 (형상 관리 도구, configuration management tool) 중 하나이다.
소스코드를 효과적으로 관리할 수 있게 해주는 무료 공개 소프트웨어이다.

○ Git 장점

소스코드를 여러 개발 PC와 저장소에 분산해서 저장한다. 그래서 중앙 서버에 장애가 발생해도 로컬 저장소에 commit을 할 수 있으며, 로컬 저장소들을 이용하여 저장소의 복원도 가능하다. 사본을 로컬에서 관리하기 때문에 빠르다.
소스코드를 주고 받을 필요 없이 같은 파일을 여러 명이 동시에 작업하는 병렬 개발이 가능하다.
브랜치를 통해 개발한 뒤, 본 프로그램에 합치는 방식 (merge)으로 개발을 진행할 수 있다.
분산 버전관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며, 중앙 저장소가 날라가도 복원할 수 있다.
개인 프로젝트에서도 git을 통해 버전 관리를 하면 체계적인 개발이 가능하다. 프로그램이나 패치를 배포하는 과정도 간단해진다. (pull을 통한 업데이트, patch 파일 배포)

○ 용어

Repository : 저장소를 의미하며, 히스토리, 태그, 소스의 브랜치 혹은 브랜치에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인할 수 있다.
git 디렉토리 : 깃 저장소.
git init : 명령으로 .git이라는 이름으로 생성된다.
git 프로젝트의 모든 메타데이터와 객체 데이터베이스가 저장된다.
git clone : 원격 저장소를 복사해서 가져올 때, 생성된 폴더 안에 .git 디렉토리를 만들고, 원격 저장소의 모든 데이터를 복사해서 가져온다.
Working Tree : git 디렉토리에서 특정 버전을 checkout 해온 것이며, 이곳에서 프로젝트 작업을 진행하게 된다.
Staging Area (Index): 저장소에 커밋하기 전에 커밋을 준비하는 위치
Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업
Head : 현재 작업중인 branch
Branch : 가지 또는 분기점을 의미하며, 작업을 할 때에 현재 상태를 복사하여 branch에서 작업을 한 후에 완전하다 싶을 때 merge를 하여 작업을 한다.
Merge : 다른 branch의 내용을 현재 branch로 가져와 합치는 작업

git clone

git repository에서 주소 복사하기 (HTTPS형식, SSH 형식으로 받을 수 있다)아래 코드를 터미널에서 입력한다.
DIR : 저장소를 로컬에 복제할 위치이며 생략가능하다. 폴더이름을 입력하면 새폴더가 생성되고 그 안에 코드가 다운로드된다. 생략하면 깃허브 프로젝트 이름으로 폴더가 자동으로 생기고 그 안에 코드가 다운로드된다.
git clone (복사한주소) (DIR)
Plain Text
복사

git clone vs git pull

git clone : 로컬 저장소의 내용이 원격 저장소의 내용과 일치해진다.
기존에 작업 중이었다면, 작업 내용은 직접 복구해야 한다.
프로젝트에 처음 투입될 때 사용된다.
git pull : 원격 저장소의 내용을 가져와서 현재 브랜치와 병합 (merge)까지 진행한다.
git fetch (다운로드는 받지만 로컬 리포지토리는 바꾸지 않음)+ git merge
기존 작업 내용은 유지하면서 최신 코드로 업데이트할 수 있다.
pull을 하기 전에 commit을 하지 않으면 덮어쓰기 에러가 발생할 수 있다.
코드 내용이 두 브랜치 간에 다르다면 충돌이 발생할 것이며, 이는 직접 충돌 처리를 해야 한다.

git status

워킹 디렉토리의 파일의 상태

Untracked : 1) 파일을 저장소에 저장할 필요가 없어 git이 신경쓰지 않아도 되는 상태 또는 2) 파일을 새로 만든 경우
Tracked : 파일에 수정이 일어나면 git이 파일의 변경을 감지하여 사용자에게 알려주는 것과 같이 파일을 추적하는 상태
Staged : git add를 이용하여 staging area에 올린 파일들
Unmodified : Staging area에 있던 파일을 commit하게되면 Unmodified로 내려온다.
Modified : Unmodified 상태의 파일들을 수정한 경우, 수정했지만 commit하지 않은 상태.
Commit 하게 되면 로컬 리포지토리 에 저장된다.
git add 후 수정
git checkout — 파일이름
git rm —cached 파일이름

git add

git add : 작업 디렉토리(working directory) 상의 변경 내용을 스테이징 영역(staging area)에 추가하기 위해서 사용하는 Git 명령어입니다.
git add . : 현재 디렉토리의 추적되는 파일 모두 add
git add 파일명 파일명 ... 파일명 : 파일 여러개 add
git add -A : 저장소 내 모든 파일 add
git add -p : 변경 사항을 터미널으로 확인하면서 스테이징으로 넘기거나 제외시킴
명령어
git add —update : 현재 git이 추적하고 있는 파일만 add (새로 만든 파일은 올라가지 ㅇ낳음)
git rm —cached : add 된 파일 취소

○ .gitignore

하나씩 git repository에 넣는 것은 번거로워 보통 git add . 를 이용해 변경된 전체 파일을 추가하고 커밋한다.
그러나
보안상으로 위험성이 있는 파일
프로젝트와 관계없는 파일
용량이 너무 커서 제외해야되는 파일
자바의 경우 .class 파일
로그 파일이나 빌드 시스템이 자동으로 생성한 파일
.iml, .idea/
등등은 git add에 포함시키지 않는다.
이때 .gitignore 파일을 만들고 그 안에 무시할 파일 패턴을 적는다.
$ cat .gitignore *.[oa] *~
Python
복사
첫번째 라인은 확장자가 “.o” 나 “.a” 인 파일을 Git이 무시하라는 것이고 둘째 라인은 ~ 로 끝나는 모든 파일을 무시하라는 것이다. 보통 대부분의 텍스트 편집기에서 임시파일로 사용하는 파일 이름이기 때문이다. “.o” 와 “.a” 는 각각 빌드 시스템이 만들어내는 오브젝트와 아카이브 파일이고 ~ 로 끝나는 파일은 Emacs나 VI 같은 텍스트 편집기가 임시로 만들어내는 파일이다. 또 log, tmp, pid 같은 디렉토리나, 자동으로 생성하는 문서 같은 것들도 추가할 수 있다..gitignore 파일은 보통 처음에 만들어 두는 것이 편리하다. 그래서 Git 저장소에 커밋하고 싶지 않은 파일을 실수로 커밋하는 일을 방지할 수 있다.
.gitignore 파일에 입력하는 패턴은 아래 규칙을 따른다.
아무것도 없는 라인이나, `#`로 시작하는 라인은 무시한다.
표준 Glob 패턴을 사용한다. 이는 프로젝트 전체에 적용된다.
슬래시(/)로 시작하면 하위 디렉토리에 적용되지(Recursivity) 않는다.
디렉토리는 슬래시(/)를 끝에 사용하는 것으로 표현한다.
느낌표(!)로 시작하는 패턴의 파일은 무시하지 않는다.
Glob 패턴은 정규표현식을 단순하게 만든 것으로 생각하면 되고 보통 쉘에서 많이 사용한다. 애스터리스크(*)는 문자가 하나도 없거나 하나 이상을 의미하고, [abc] 는 중괄호 안에 있는 문자 중 하나를 의미한다(그러니까 이 경우에는 a, b, c). 물음표(?)는 문자 하나를 말하고, [0-9] 처럼 중괄호 안의 캐릭터 사이에 하이픈(-)을 사용하면 그 캐릭터 사이에 있는 문자 하나를 말한다. 애스터리스크 2개를 사용하여 디렉토리 안의 디렉토리 까지 지정할 수 있다. a/**/z 패턴은 a/za/b/za/b/c/z 디렉토리에 사용할 수 있다.
아래는 .gitignore 파일의 예이다.
# 확장자가 .a인 파일 무시 *.a # 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음 !lib.a # 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음 /TODO # build/ 디렉토리에 있는 모든 파일은 무시 build/ # doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음 doc/*.txt # doc 디렉토리 아래의 모든 .pdf 파일을 무시 doc/**/*.pdf # 수업 중 작성 *.iml java-project/.idea java-project/out
Python
복사

Git이란? - 정희준

git이란 분산형 버전 컨트롤(Version Control System) 시스템의 한 종류이다.
버전 관리 시스템에 대해서 간단하게 알아보자.
1. 서버 모델
하나의 중앙 서버가 존재하며 많은 클라이언트들이 중앙 서버에서 본인이 건드려야 할 부분만 가지고 와서 작업하고 다시 중앙 서버로 다시 넣어줘 통합하는 것 대표적으로 CVS,SVN 등이 있습니다.
2.
분산 모델
분산 모델도 하나의 중앙 서버가 존재한다. 하지만 많은 클라인터트들이 각자의 컴퓨터 저장소에 중앙 서버에 있는 파일들의 사본들을 복제하여 그것을 가지고 작업을 하는 것 입니다. 대표적으로 git이 있습니다.

Git의 장점은 무엇인가?

1.
소스 코드를 서로 직접적으로 공유할 필요없이 같은 파일을 여러명이서 동시에 작업이 가능하다. 브랜치를 통해 개발을 진행 한 후 합치는 방식으로 개발을 진행 할 수 있다.
2.
git 은 분산 버전 관리를 하기 때문에 인터넷이 없어도 로컬 저장소에 커밋 하며 개발을 할 수 있고 중앙 저장소가 날라가도 로컬 저장소를 이용해 복원이 가능 합니다.
3.
팀 프로젝트가 아니고 개인이 혼자 개발할때 git을 사용하더라도 버전 관리가 유용하다.

Github는 뭘까?

원격 저장소(remote repository)이다. 프로젝트를 수행하다보면 코드를 저장할 서버가 필요하다. 버전 관리 시스템을 지원하는 웹 호스팅 (github) 기능을 통해 코드를 공유하고 버전을 관리한다.

용어 정리

Local Repository: 로컬 저장소를 의미하며,내 컴퓨터에서 관리하는 git 저장소이다. 로컬 저장소를 만들어줄 디렉토리를 만들어 거기로 이동 후 git init명령어를 실행하면 .git폴더가 생성된다.
Remote Repsitory: 로컬 저장소를 업로드 하는 곳이다. git clone "git 주소" 명령어로 기존 원격 저장소에 있는 파일을 로컬 저장소에 불러온다.
Branch : 가지 또는 분기점을 의미하며, 작업을 할때에 현재 상태를 복사하여 Branch에서 작업을 한 후에 완전하다 싶을때 Merge를 하여 작업을 한다.
Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업.
Staging Area : 저장소에 커밋하기 전에 커밋을 올려두는 공간, staging area에서 커밋하게 되면 git 저장소에 저장된다.
Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점
Working Directory : 작업이 일어나는 폴더
Head : 현재 작업중인 Branch를 가리킨다
Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.

기본적인 git 명령어들을 알아보자.

1.
git status : 현재 상태를 알려주는 명령어이다. 현재 어떤 브랜치에서 작업하고 있는지, 커밋된 파일,스테이지에 있는 파일 등을 알려준다.
2.
git add : 작업한 파일들을 스테이지에 올리며 add한 파일들을 git이 관리하게 된다. 원하는 파일을 지정할수 있고 전체 파일을 스테이지에 올려 git의 관리를 받게 할 수 있다.
3.
git commit -m "커밋 메세지" : 스테이지에 올려둔 파일을 git 저장소에 저장하게 된다.
4.
git pull : 원격 저장소의 데이터를 가져와 자동으로 변경된 내용을 로컬 저장소에 적용하는 작업을 하는 명령어이다. pull을 수시로 해두지 않으면 이미 원격 저장소에 변경 사항이 있다면 push에 실패하게 된다.
5.
git push (원격 저장소 이름) (브랜치 이름) : 커밋한 파일을 원격 저장소에 올리는 명령어이다.
6.
git merge (병합할 브랜치 이름) : 브랜치를 병합하는 명령어이다. 개발을 끝내고 모두가 볼 수 있는 master 또는 main 브랜치에서 볼 수 있도록 명령어를 사용하여 (병합할 브랜치 이름) 브랜치에서 개발한 변경 사항을 master 또는 main 브랜치에 합병한다.
7.
git checkout (브랜치 이름) : 브랜치를 전환 할 수 있는 명령어 입니다. 전환하고 싶은 브랜치 이름을 적으면 브랜치가 전환 됩니다.
8.
git log : 커밋 내용을 확인하고 싶을때 사용하는 명령어 입니다.
9.
git fetch (원격 저장소 이름) : 로컬에는 없지만 원격 저장소에 있는 데이터를 불러올때 사용하는 명령어 입니다.