ItsWard/GitHub-getting-started: 📝GitHub를 시작해보자

 

GitHub - ItsWard/GitHub-getting-started: 📝GitHub를 시작해보자

📝GitHub를 시작해보자. Contribute to ItsWard/GitHub-getting-started development by creating an account on GitHub.

github.com

1. Git(global information tracker)

  • 파일의 버젼관리를 용이하게 할 수 있는 프로그램이다
  • 개발자 혹은 동료들 간의 협업 시 파일의 수정, 보완이 용이한 프로그램이다
  • git download : Git - Downloading Package (git-scm.com)

 1) Git 장점

  • 분산형 버전 관리 시스템으로 소스코드를 효과적으로 관리하기 위해 개발되었다
  • 소스 코드가 변경된 이력을 쉽게 확인할 수 있다
  • 현재 소스 코드와 원하는 시점에 저장된 버전의 소스 코드를 비교하기가 용이하다
  • 특정 시점에 저장된 소스 코드로 되돌아갈 수도 있다
  • 협업자와 소스 코드 파일이  충돌할 경우에 경고 메시지를 출력한다
  •  백업용 복사본 파일을 생성할 필요가 없다

 

2. Git repository(저장소)

 1) 특성

  • Git repository는 파일이나 폴더를 저장하는 공간이다
  • 비슷한 파일의  내용이 일부라도 다르면 각각의 파일로 인식하고 저장한다
  • 파일의 변경 이력을 구분하여 저장한다
  • 일반적인 폴더를 Git에서는 작업트리(Work Tree)라고 한다

 2) 저장소 종류

  • 원격 저장소(Remote Repository)
    - 파일을 원격 저장소 전용 서버에서 관리한다
    - 여러 명이 협업을 하는 경우 파일을 공유하기에 적합하다
  • 로컬 저장소(Local Repository)
    - 내 PC에 파일을 저장하는 공간이다
  • 내 PC에서 작업한 파일을 로컬 저장소에 1차로 저장한 후 공개 시점에서 원격 저장소로 파일을 업로드한다
  • 협업자는 원격 저장소에 있는 파일을 본인의 로컬 저장소로 다운로드 할 수 있다

 

 3) 저장소 생성 방법

  • 원격 저장소를 새로 생성할 수 있다
  • 원격 저장소를 로컬 저장소로 복사할 수 있다

 

3. 커밋(Commit)

  • 파일이나 폴더의 추가 또는 변경 사항을 작업트리에서 원격저장소로 저장하기 위한 기능이다
  • 커밋을 할 경우 이전에 커밋한 상태부터 현재 상태까지의 변경 이력이 생성된다
  • 커밋은 최근 기록부터 순차적으로 저장되며, 저장된 기록을 시간까지 확인할 수 있다
  • 커밋된 파일에는 영문과 숫자로 이루어진 고유의 이름이 생성된다(40자)
  • 커밋을 할 경우에는 필히 나중에 확인할 수 있는 메시지를 입력해야 한다
    - ex) 'No : 변경 사항' 형식으로 작성하는 것이 좋다
  • 커밋은 작업트리 -> 인덱스 -> 원격 저장소 의 단계로 이루어 진다
  • 인덱스는 가상의 저장 공간을 의미한다

  • Git은 내부적으로 3가지 종류의 작업 영역으로 동작한다
     1) working directory
       - 작업을 하는 프로젝트 디렉토리를 의미한다
     2) staging area
       - git add를 한 파일들이 존재하는 영역이다
       - commit 을 하면 staging area에 있는 파일들만 commit 에 반영되고 대기한다
     3) repository
       - working directory의 변경 이력들이 저장되어 있는 영역이다
       - commit 된 파일들이 저장되는 영역이다

4. Git 설치

 1) 아래 사이트에서 Window용 Git을 다운로드 한다

 

Git for Windows

Git for Windows focuses on offering a lightweight, native set of tools that bring the full feature set of the Git SCM to Windows while providing appropriate user interfaces for experienced Git users and novices alike. Git BASH Git for Windows provides a BA

gitforwindows.org

  • 다운받은 파일을 실행하고 순차적으로 설치한다

 2) Git 설치 확인

  • git 설치 후 Git BASH를 실행하여 간단히 확인해 본다
  • 탐색기에서 파일명을 클릭한 후 마우스 우측버튼을 눌러 나오는 gitbash here를 실행하면 해당 파일 위치에서 작업을 시작할 수 있다

  • got --version 으로 git 설치 버젼을 확인해 본다

  • gitbash > 우클릭 > 메뉴 > option > Text 에서 설정을 Local변경하면 한글로 패치할 수 있다

 

 3) 최초 설정

  • Git 계정과는 별개로 Git 프로젝트에서 사용할 사용자 이름과 이메일 주소를 설정한다
  • commit 을 하기 전에 작성자의 이름과 email을 필히 설정해 주어야 한다
  • Git에 commit을 실행한 작성자를 기록하기 위한 설정이다
  • 설정을 통해 협업 시 누가 commit 한 파일인지 확인할 수 있다
  • 이름과 이메일은 각각의 프로젝트를 시작할 때 변경하여 적용할 수 있다

  • 설정이 되었는지 확인해 본다

  • 기본 브랜치를 main으로 변경하여 준다

  • 아래는 config 관련 명령어이다...참조

config 관련 명령어

 

4. Git 프로젝트 생성

 1) 로컬 저장소 생성

  • 생성하고져 하는 위치에 폴더를 만든다
  • 탐색기에서 우클릭하여 연관 프로그램으로 이동한다
     - GitBash / IntelliJ / VSCode 등등 

  • 해당 폴더 위치에서 시작하게 된다

 2) Git 관리하기

  • Git이 관리하도록 git init 명령을 입력하면 .git 이라는 폴더가 새로 생성되면서 관리가 시작된다
  • .git 폴더는 탐색기에서도 볼 수 있는데 혹시 안보이면 탐색기 옵션에서 숨긴폴더를 해제하면 볼 수 있다
  • .git 폴더에는 Git에서 관리한 내역이 저장된다
  • .git 폴더를 삭제하면 이전에 관리된 내역이 모두 삭제되고 현재 파일만 남게 된다

 

 3) 파일 테스트

아무 파일이나 2개 정도 만들어서 저장해 본다

git status 명령으로 저장된 내용을 확인하면 Git에서 관리되고 있는 파일의 목록이 나타난다

 

 

5. 특정파일/폴더 배제

  • Git 관리 목록에 포함할 필요가 없는 경우나 포함하지 말아야 할 경우에 사용한다
     - 자동 생성되는 파일
     - 보안에 민감한 파일
  • 폴더 안에 .gitignore 파일을 생성한다

  • .gitignore 파일에 숨기고져 하는 파일을 작성한다
    - .gitignore 파일에 작성된 파일은 Git의 관리 목록에서 제외된다 
    - '*' 전체, '이름/'이름 폴더 전체 숨김 표시가 가능하다 
숨기기 전 목록 secrets.yaml 파일 숨김
  • 일반 코드 프로그램에서는 파일 생성 시 .gitignore 파일을 자동으로 생성하고 제외 항목들을 포함하고 있다

 

6. Git 파일 관리

 1) git add

  • 업로드 할 파일을 지정한다
    - git add Test1.java

  • Test1.java 파일이 Changes to be committed 대기 중으로 변경된다
  • git add . 으로 전체를 지정할 수 있다

 

 2) git commit

  • git commit 를 입력 후 실행한다
  • VSCode 에디터가 열리면서 아래와 같은 화면이 출력된다
    - 1번 줄에 저장하고 싶은 메시지를 작성 후 저장하고 파일을 빠져 나온다

  • 위와 같은 에디터 표시를 없애고 빠르게 진행하기 위해서는 git add -m "메시지" 로 실행한다
  • 작성한 메시지가 표시되고 3개의 파일이 change 되었다고 표시된다

  • git.status를 입력해도 commit 대상이 없다고 확인된다

  • git.log 명령을 실행하면 메시지, commit 실행한 시간, commit 고유번호를 확인할 수 있다

 

 

※ 에디터가 지정되어 있지 않으면 아래와 같이 출력된다
- i 를 입력하면 맨 위 상단에 커서가 이동하면서 code 작성이 가능해 진다
- 저장할 메시지를 작성 후 ESC를 누른다
- :q(저장하지 않고 종료) , :q!(저장하지 않고 강제 종료) 를 하면 둘 다 저장하지 않고 나오게 된다
- 저장을 해야 commit가 진행되므로 :wq 를 작성 후 Enter 한다

 

 3) 파일 변경 후 commit

  • Test2 파일을 삭제하고 Test3 파일을 추가, Test1 파일은 내용 변경을 한 후 git.status로 확인해 본다

  • git diff 명령으로 변경 내역을 더 자세히 알아볼 수 있다
    - Test3은 신규 생성 파일이라서 변경 내역에는 나타나지 않는다

  • 변경 사항을 git add . 으로 업로드 할 파일을 지정한다

  • git commit -m "second file" 로 업로드를 준비한다

  • git log 로 확인해 보면 first, second 모두의 commit 정보를 확인할 수 있다

 

 4) 버젼 관리

  • 파일을 2개 더 추가한 후 commit까지 진행한다

과거의 시점으로 돌아가는 방법은 2가지가 있다
- 과거 시점으로 돌아간 후 이후에 실행되었던 파일들을 모두 삭제하는 경우에는 git reset --hard commit고유번호 를 사용한다
- 과거 시점으로 돌아가지만 이후에 행적은 그대로 두고 추가로 진행되는 경우에는 git revert commit고유번호 를 사용한다

협업 시에는 revert를 사용하는 것이 용이하다

 

 

7. 파일 푸쉬(push)

  • 로컬 저장소에 git 폴더를 만들고 파일을 commit하여 스테이징까지 진행하였다
  • 스테이징 한 파일을 원격 저장소로 업로드 하는 것을 푸쉬(push)라고 한다
  • 푸쉬를 하면 스테이징된 파일이 원격 저장소로 업로드 된다

 

8. 원격 저장소 복제

  • 원격 저장소의 파일을 복제하는 것을 클론(clone)이라고 한다
  • 복제를 하면 원격 저장소에 있는 파일 내용 전체를 다운로드 한다
  • 변경 이력도 함께 복제된다

 

9. 로컬 저장소 업데이트

  • 공유 작업자들이 push로 원격 저장소에 업로드 한 파일을 로컬 저장소로 업데이트 하는 것을 풀(pull)이라고 한다
  • 풀을 하면 변경된 파일 이력을 다운로드 한다

 

 

 

 

10. 레포지토리 만들기

 1) 컴퓨터에 프로젝트 디렉토리 생성하기

  • gitbash에서 'mkdir 디렉토리명'을 사용하여 프로젝트를 저장할 디렉토리를 생성한다
  • 디렉토리는 자신이 작업하고자 하는 드라이브의 위치로 경로 이동 후 생성한다
  • 'cd 디렉토리 경로' 를 사용하여 해당 디렉토리로 진입한다

 

 2) 프로젝트 디렉토리를 관리하기 위한 레포지토리 설정하기

  • 디렉토리의 버젼관리를 위한 설정을 git init 을 사용하여 실행 한다
    - 비어있는 .git 레포지토리를 설정할 수 있다
user@DESKTOP-MJ9EVF2 MINGW64 /d/Spring/be-homework-exception-main (main)
$ git init
Reinitialized existing Git repository in D:/Spring/be-homework-exception-main/.git/
  • ls -al 로 레포지토리 내용을 살펴 본다
    - drwxr-xr-x 1 user 197609     0 Jul  1 14:58 .git/ 이라는 레포지토리가 생성된 것을 볼 수 있다
user@DESKTOP-MJ9EVF2 MINGW64 /d/Spring/be-homework-exception-main (main)
$ ls -al

total 28
drwxr-xr-x 1 user 197609     0 Jun 30 21:48 ./
drwxr-xr-x 1 user 197609     0 Jun 29 15:06 ../
-rw-r--r-- 1 user 197609 12288 Jun 30 21:50 .CONTRIBUTING.md.swp
drwxr-xr-x 1 user 197609     0 Jul  1 14:58 .git/
  • cd .git 으로 경로 이동하여 레포지토리 내부의 디렉토리 내용을 살펴 본다
user@DESKTOP-MJ9EVF2 MINGW64 /d/Spring/be-homework-exception-main (main)
$ cd .git

user@DESKTOP-MJ9EVF2 MINGW64 /d/Spring/be-homework-exception-main/.git (GIT_DIR!)
$ ls -al
total 17
drwxr-xr-x 1 user 197609   0 Jul  1 14:58 ./
drwxr-xr-x 1 user 197609   0 Jun 30 21:48 ../
-rw-r--r-- 1 user 197609  19 Jun 30 22:35 COMMIT_EDITMSG
-rw-r--r-- 1 user 197609   0 Jun 30 19:30 FETCH_HEAD
-rw-r--r-- 1 user 197609  21 Jun 30 19:22 HEAD
-rw-r--r-- 1 user 197609 130 Jul  1 14:58 config              //프로젝트별 구성 옵션이 포함
-rw-r--r-- 1 user 197609  73 Jun 30 19:22 description
drwxr-xr-x 1 user 197609   0 Jun 30 19:22 hooks/
-rw-r--r-- 1 user 197609 249 Jun 30 22:35 index
drwxr-xr-x 1 user 197609   0 Jun 30 19:22 info/               //Git이 저장하는 위치
drwxr-xr-x 1 user 197609   0 Jun 30 19:58 logs/
drwxr-xr-x 1 user 197609   0 Jun 30 22:35 objects/            //데이터베이스의 모든 내용을 저장
drwxr-xr-x 1 user 197609   0 Jun 30 19:22 refs/ 
                  //refs : 해당 데이터(브랜치, 태그, 원격지 등)의 커밋 객체에 대한 포인터를 저장
  • 저장소를 백업하거나 복제하려는 경우 레포지토리를 다른 곳에 복사하면 필요한 거의 모든 것을 얻을 수 있다

 

11. 기존 파일 버전 제어

  • 기존 파일의 버전 제어(빈 디렉토리와 반대)를 시작하려면 해당 파일을 추적하고 초기 커밋을 수행해야 한다
$ git add *.c
$ git add LICENSE
$ git commit -m 'Initial project version'

12. 기존 리포지토리 복제

  • 기존 Git 리포지토리(예: 기여하려는 프로젝트)의 복사본을 얻으려는 경우 필요한 명령이다
  • libgit2 리포지토리의 모든 데이터를 풀다운하고 복사한다
  • 새로 생성된  libgit2 디렉터리로 이동하면 작업하거나 사용할 준비가 된 프로젝트 파일이 표시된다
//git clone <url>
//예를 들어 libgit2가능 라이브러리를 복제하려면 다음과 같이 하면 됩니다.
git clone https://github.com/libgit2/libgit2
  • 저장소를 다른 이름의 디렉토리에 복제하려면 libgit2새 디렉토리 이름을 추가 인수로 지정한다
//git clone <url> 디렉토리명
git clone https://github.com/libgit2/libgit2 mylibgit

 

13. 파일상태 확인

  • 어떤 파일이 어떤 상태에 있는지 확인하는 데 사용하는 기본 도구는 git status명령이다
  • 클론 직후에 이 명령을 실행하면 다음과 같이 표시된다
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
  • 깨끗한 작업 디렉토리가 있음을 의미한다
  • 현재 있는 지점을 알려준다
  • 현재 지점은 항상 master가 기본값이다

 

14. 파일 커밋(commit)

  • commit 하기 전에 파일을 반영하는 git add 를 먼저 실행한다
    - 스테이징되지 않은 모든 파일, 즉 생성하거나 수정한 파일 중 편집한 이후에 git add를 실행하지 않은 파일은 이 커밋에 포함되지 않고 디스크에 수정된 파일로 남아 있게 된다
    - git add를 하지 않고 commit을 실행하면 'nothing added to comit but ubtrack files present'라는 문구가 나오면서 추적할 파일이 없음을 표시한다
git add 파일명.확장자

 

  • git commit 를 실행하면 편집기가 실행된다
  • 편집기는 보통 vim 또는 emacs에 의해 설정 되지만 git config --global core.editor 를 사용하여 EDITOR를 원하는 대로 구성할 수 있다
  • 편집기가 시작되면 다음과 같은 기본 문구가 표시된다
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
#	new file:   README
#	modified:   CONTRIBUTING.md
#
~
~
~
".git/COMMIT_EDITMSG" 9L, 283C
  • 기본 커밋 메시지에는 주석 처리된 명령의 출력과 맨 위에 빈 줄 하나가 포함되어 있다
  • 주석을 제거하고 커밋 메시지를 입력하여 커밋 내용을 기억하는 데 도움이 되도록 남겨둘 수 있다
  • 편집기를 종료하면 Git은 해당 커밋 메시지로 커밋을 생성한다
  • commit 뒤에 -m 을 사용하여 커밋 메시지를 입력할 수 있다
//git commit -m "메시지"
$ git commit -m "Story 182: fix benchmarks for speed"
[master 463dc4f] Story 182: fix benchmarks for speed
 2 files changed, 2 insertions(+)         //2개 파일, 2줄의 내용이 추가
 create mode 100644 README

 

15. branch 생성

  • branch는 프로젝트 수행 중에 추가적인 작업을 별개로 진행하고 싶을 때 생성하여 저장할 수 있는 별도의 저장 공간이다
  • git branch 브랜치명 으로 생성할 수 있다
  • git branch 로 브랜치 목록을 확인하면 main이 있고 브랜치 add-another가 있는 것을 확인할 수 있다

  • 브랜치로 위치를 이동할 경우에는 git switch 브랜치명 으로 이동한다
    - 오른쪽 끝에 위치가 main에서 브랜치명으로 변경되는 것을 확인할 수 있다

  • 브랜치를 생성과 동시에 위치도 이동할 경우에는 git switch -c 브랜치명 을 사용한다

  • commit 기록을 확인하면 각각의 브랜치 내역만 확인이 가능한다
  • 전체 commit 기록을 확인하기 위해서는 git log --all --decorate --oneline --grahp 명령어를 사용한다
  • 브랜치를 삭제할 경우에는 'git branch -d 브랜치명' 으로 삭제한다
  • 브랜치 이름을 변경할 경우에는 'git branch -m 브랜치명 변경브랜치명' 으로 변경한다

16. branch 병합

  • 브랜치를 유지하면서 개발 기록을 main에 병합할 경우에는 merge 를 사용한다
    - git branch main 으로 이동한다
    - git merge 병합브랜치명 으로 병합한다
    - merge도 하나의 커밋이기 때문에 reset을 사용하여 merge 하기 전 해당 브랜치의 마지막 시점으로 되돌리기가 가능하다
    - 병합 중에 충돌이 발생하면 Git에서 경고를 출력한다
    - 충돌 부분을 상황에 맞게 해결할 수 있다
    - 브랜치 병합을 중단하고져 할 경우에는 git merge --abort 를 사용한다
  • 브랜치를 삭제하면서 개발 기록을 main에 병합할 경우에는 rebase 를 사용한다 
    - git branch 병합브랜치명 으로 이동한다
    - git rebase main 으로 병합한다
    - 병합 전 시점의 main 뒤에 병합브랜치에 있던 커밋들이 이동하게 된다
    - 병합 후에도 main의 시점은 머물러 있기 때문에 git merge 병합브랜치명 으로 시점 이동을 시켜 준다
    - 병합 중에 충돌이 발생하면 Git에서 경고를 출력한다
    - 충돌 부분을 상황에 맞게 해결할 수 있지만 merge와 다르게 각 커밋한 부분마다 해결해 주어야 한다
    - 브랜치 병합을 중단하고져 할 경우에는 git rebase --abort 를 사용한다
    - 완료가 되면 git add . -> git rebase --continue 로 커밋을 진행한다

 

 

'Git' 카테고리의 다른 글

GitHub - Git branch  (0) 2022.08.22
Git - 명령어 / HELP  (0) 2022.08.01
GitHub  (0) 2022.07.10

+ Recent posts