※ 이 글에서 다룬 기반기술, 프론트엔드, 백엔드, 데브옵스 등 풀스택 개발 지식은 모두 한화시스템 Beyond SW Camp 12기에서 배운 내용을 복습한 것입니다.
우리가 프로그래밍을 배우는 이유는 단순히 코드를 작성하는 방법만 익히기 위함이 아니다.
우리는 최종적으로 프로젝트를 성공적으로 완성하기 위해 이러한 공부를 하는 것이다.
이를 위해서는 효율적이고 체계적인 개발 과정이 필요하다.
프로젝트는 혼자서 할 때보다 팀 단위로 진행할 때가 더 많다. 여러 명이 함께 코드를 작성하고, 수정하고, 개선해야 한다.
이 과정에서 코드 충돌, 버전 관리와 같은 문제점이 발생할 수도 있다.
이러한 문제를 해결하기 위해 사용하는 것이 바로 Git과 Github이다.
나는 이전까지는 Github가 있는 건 알았지만 효율적으로 써본적이 없다. 그래서 Git과 Github가 같은 것이라고 생각했는데 Git과 Github는 완전히 다른 역할을 한다.
쉽게 말해, Git은 내 컴퓨터에서 파일을 관리하는 도구이고, GitHub는 인터넷에서 코드를 공유하는 서버이다.
Git - Downloads
Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. Latest source Release 2.47.0 Release Notes (2024-10-06) Download Source Code GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but ther
git-scm.com
깃은 위의 링크에서 다운하면 된다.
Git : 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'
Git은 소스코드 변경 이력도 확인할 수 있고 특정 시점에 저장된 버전으로 돌아갈 수도 있다.
저장소에는 로컬 저장소와 원격 저장소 두 가지가 있다.
● 로컬 저장소 : 내 컴퓨터 안에서만 작업하고 저장되는 공간이다.
● 원격 저장소 : GitHub와 같은 인터넷 기반 서버에 저장된 저장소이다.
위의 그림을 보면
1. 평소에는 내 PC에서 작업을 하다가 내용을 공개하고 싶을 때 원격 저장소에 업로드할 수 있다.
2. 원격 저장소에서 다른 사람이 작업한 파일을 로컬 저장소로 가져올 수 있다.
Git 사용법
1. 로컬 저장소 생성하기
로컬 저장소를 만들 해당 폴더에서 Git Bash를 실행한다.
git init 명령어를 실행하게 되면 해당 폴더가 Git 저장소로 초기화된다. 해당 폴더에 .git 이라는 폴더가 생긴다.
.git 폴더는 숨김 항목으로 처리되어있기 때문에 .git 폴더가 보이려면 숨김 항목도 표시하게 설정을 해줘야한다.
2. 계정 설정
Git은 커밋할 때마다 누가 이 작업을 커밋했는지 기록을 해야한다.
그 설정에 관련된 내용을 확인하려면 git config --list 명령어를 실행하면 된다.
git config --list
git config --global user.email "사용할 이메일"
git config --global user.name "사용할 이름"
" " 안에는 본인이 사용할 이메일과 이름을 입력하면 된다.
이렇게 입력을 한 후 다시 git config --list 명령어로 설정 내용을 확인해보면
이메일과 이름이 설정되어있는 것을 볼 수 있다.
이때의 이메일과 이름은 깃허브와 동일할 필요는 없지만 나중에 협업중에 알아보기 편하기 위해서는 통일하는 것이 좋다고 하셨다.
3. 현재 상태 확인
아직 아무것도 커밋되지 않았다는 문구를 확인할 수 있다.
fileA라는 텍스트 파일을 생성해보았다.
아래는 git status 명령어를 실행했을 때 상태로 나타날 수 있는 것들이다.
● Untracked : 스테이징 영역에 추가되지 않은 상태
● Tracked : 스테이징 영역에 추가된 상태
● Modified : 스테이징 영역에 있는 파일의 내용이 수정된 상태
● Unmodified : 수정된 내용을 다시 스테이징 영역에 추가한 상태
git status 명령어로 다시 한 번 상태를 확인해보니 fileA는 스테이징 영역에 추가되지 않은 상태인 것을 확인할 수 있다.
4. 커밋
스테이징 영역은 무엇일까?
위의 그림은 로컬 실제로 작업하고 있는 폴더라고 예시를 들며 스테이징 영역에 대해 설명해보겠다
● 1번 과정 : 스테이징 영역은 Git이 커밋할 준비가 된 파일을 두는 것이라 생각하면 된다.
git add 명령어로 파일을 스테이징 영역에 추가한다
● 2번 과정 : 스테이징 영역에 있는 파일을 Git 로컬 저장소에 저장하는 작업이다.
git commit -m "커밋 메세지" 명령어로 커밋한다.
이렇게 커밋된 파일을 원격 저장소 Github와 같은 곳에 push나 pull을 하며 데이터를 교환할 수 있다.
● git push : 로컬 저장소에 커밋된 변경사항을 원격 저장소에 업로드
● git pull : 원격 저장소에서 로컬 저장소로 변경사항 받아오기
git add 명령어로 fileA.txt를 스테이징 영역에 추가하였다.
이렇게 하면 fileA.txt 파일의 변경 사항이 Git의 버전 관리에 포함되도록 준비된 상태가 된다.
그러면 버전 관리를 하고 싶지 않은 파일이 버전 관리가 되고 있을 땐 어떤 명령어를 써야할까?
--cached 옵션은 Git에서만 제거하고 로컬에는 남기는 옵션이다.
스테이징 영역에 다시 올리고 커밋을 해보았다.
그리고 Git로그를 확인해보니 Author : 부분에 2번 과정때 설정했던대로 기록이 되는 것을 볼 수 있고 커밋 메세지도 뜨는 것을 확인해봤다.
- git log : 커밋 히스토리 출력
- git log -p : 커밋 내용의 차이(diff)도 함께 출력
- git log --all : 모든 브랜치의 커밋 출력
- git log --oneline : 간단하게 한 줄로 커밋 출력
파일을 수정후에 상태를 확인해보니 수정되었다고 문구가 뜬다.
이럴땐 다시 스테이징 영역에 올려서 커밋을 해줘야한다.
로그를 확인해보면 첫 번째 저장한 것과 두 번째 저장한 것 둘 다 확인할 수 있다.
5. 커밋 상태로 되돌아가기
git checkout [커밋 해시]
네모로 표시되어있는 것은 커밋해시라 한다. git checkout 명령어를 쓰면 해당 상태로 되돌아간다.
이전 버전으로 돌아간 경우에는 git log 명령어로 최신 버전이 안나오므로 git log --all을 입력해야 모든 버전이 나온다.
참고로 HEAD라고 적힌 곳이 내가 위치한 버전이다.
작업을 할 때는 해당 작업을 저장을 하고 다른 버전으로 이동을 하거나 해야하는데 저장하지 않고 왔다갔다 하다 보면 HEAD가 특정 브랜치가 아닌 커밋을 가리키는 상태가 될 수도 있다.
● 정상적인 케이스 : HEAD -> 브랜치 -> commit
● 비정상적인 케이스 : HEAD -> commit
git branch -f main HEAD
그럴 땐 main 이라는 것을 HEAD로 옮기겠다는 명령어를 실행하면 된다.
- git reset --soft [커밋 해시]
- 커밋은 되돌리지만, 작업 디렉토리와 스테이징 영역은 그대로 유지됩니다.
- 변경 사항을 다시 커밋할 수 있습니다.
- git reset --mixed [커밋 해시]
- 커밋을 되돌리고, 스테이징 영역은 초기화되지만, 작업 디렉토리는 그대로 유지됩니다.
- 변경 사항이 unstaged 상태로 남습니다.
- git reset --hard [커밋 해시]
- 커밋을 되돌리고, 작업 디렉토리와 스테이징 영역 모두 해당 커밋 상태로 되돌립니다.
- 모든 변경 사항이 사라집니다.
'한화시스템 Beyond SW Camp > 기반기술' 카테고리의 다른 글
[Github] 프로젝트 관리 (Issues - (Labels, Milestones), Projects -(Kanban)) (0) | 2024.11.26 |
---|---|
[Github] 사용 기초(협업) (0) | 2024.11.25 |
[리눅스] HAProxy (부하 분산) 설치 (1) | 2024.11.24 |
[리눅스] nginx 설치 (1) | 2024.11.24 |
[네트워크] : 사설 IP, 공인 IP (2) | 2024.11.24 |