티스토리 뷰
팀 프로젝트를 하기 위해 개발자는 깃(Git)을 필수적으로 다뤄야한다. 이번 포스팅은 깃을 아예 처음 접하는 분들을 위한 포스팅이다. 필자는 리눅스 터미널에서 진행했다.
먼저, 예제에 들어가기 전에 깃을 사용하기 위해서 깃을 간단히 소개하겠다.
깃(Git)은 쉽게 말해서 타임캡슐이다. 타임캡슐에 과거의 정보를 담아 보관하듯, 깃에 과거의 개발 과정을 담아 보관한다. 깃이 필요한 이유는 과거의 개발 과정을 담는 것에 있다. 코딩을 하다보면 코드를 잘못 건들여서 에러가 나는 경우가 있는데 이 경우에 깃을 활용한다면 에러가 나기 전의 과정으로 되돌아갈 수 있다.
여러 사람들이 함께 깃을 사용하는 경우 효과는 극대화된다. 해당 파일을 수정할때 과거의 기록이 모두 남기 때문에 1. 어떤 사용자가 어느 부분을 수정했는지 파악이 가능하고 2. 변경 내용(커밋 내역)을 한꺼번에 취합하기에 편리하다.
깃에서 자주 쓰이는 용어이다.
1. 보관소(Repository) : 파일들을 저장하는 저장소이다. 현재의 파일뿐만 아니라, 과거의 변경사항들에 대한 기록도 함께 보관한다.
2. 커밋(Commit) : 파일 및 폴더의 추가/변경 사항들에 대해 기록하는 것이다. 시간 순서대로 저장된다.
3. 스테이지(Stage) : 현재 수정한 파일을 커밋하기 전 상태를 의미한다.
4. 푸시(Push) : 원격 저장소(ex Github)으로 변경된 파일을 업로드 하는 것이다.
5. 브랜치(branch) : 깃에서 동일 프로젝트를 독립적인 작업 영역에서 소스코드를 변경할 수 있도록 만든 개념이다.
6. 체크아웃(Checkout) : Branch를 바꾸거나, 내용을 되돌릴 (restore) 때 사용하는 개념이다.
[ 예제 ]
1. git log
: git log 명령어는 커밋 기록에 관련된 내용을 볼 수 있는 명령어이다.
git log --stat # 각 커밋에서 수정된 내용을 통계 정보로 요약해서 나타낸다.
git log --oneline --graph # 하나의 라인으로 브랜치와 머지 히스토리 정보까지 그래프로 나타낸다.
git log -p # 각 커밋마다 자세하게 다른 부분을 나타낸다.
git log --since=1.days # 각 커밋의 하루 전 이후의 변화들을 체크한다.
git log --since=2.weeks # 각 커밋의 이주 전 이후의 변화들을 체크한다.
git log --until=2.days # 각 커밋의 이틀 전까지의 변화들을 체크한다.
git log --author="Rimi" # 저자가 Rimi인 커밋들만 불러온다.
git log --shortstat # --stat 명령의 결과 중에서 수정한 파일, 추가 또는 삭제된 정보를 보여준다.
2. git config
: git 관련된 환경 설정을 할 수 있는 명령어
git config --global user.name "Rimi" #사용자 이름 설정
git config --global user.email="lora3226@inu.ac.kr" #사용자 이메일 설정
git config --list #config 리스트 보기
git config --global --unset user.name #global로 설정된 사용자 이름 제거
3. 컴파일 과정을 통해 git 실습해보기 (Linux 환경)
1.새로운 폴더 생성한 후 $git init

2. git log -> 아무것도 안했기 때문에 fatal 오류 남

3. git status -> 아무것도 없다고 나옴

4. bin,include,obj,src 파일 생성 후 src파일에 myfuncs.c 파일 생성
//myfuncs.c
#include "myfuncs.h"
#include <stdio.h>
void foo(void){
printf("hello foo\n");
}
void goo(void){
printf("hello goo\n");
}
5. git에 추가하기(staging 영역에 모든 파일 전부 추가하기) & 커밋하기

- 커밋하는 주기 = 의미있는 변화가 있을 경우
6. src 파일에 myapp.c 파일 추가
//myapp.c
#include "myfuncs.h"
int main(){
for(int i=0;i<3;i++){
foo();
goo();
}
foo();
goo();
for(int i=0;i<3;i++){
zoo();
}
return 0;
}
7. git add & commit (5번 과정과 동일)

- 이때 master 옆의 4de2411은 커밋 해쉬를 의미한다. -> checkout 과정에서 필요
- 커밋 메시지는 해당 커밋이 무엇을 의미하는지 알아보기 쉽게 작성하는 것이 중요하다.
- 커밋 메시지에 관련된 규칙도 정해져있지만 현 포스팅에서는 다루지 않겠다.
8. include 폴더에 myfuncs.h 파일 만들기
//myfuncs.h
#ifndef MUFUNCS_H
#define MUFUNCS_H
void goo();
void foo();
#endif
9. git add & commit

10. 컴파일 진행
gcc -c src/myfuncs.c -o obj/myfuncs.o -I./include
gcc -c src/myapp.c -o obj/myapp.o -I./include
gcc -o bin/myapp obj/myapp.o obj/myfuncs.o

11. git add . 한 이후 bin, obj 폴더의 파일을 깃에서 제외시킨다.
git add .
git restore --staged bin/myapp obj/*.o
- bin 폴더의 실행 파일인 myapp과 obj폴더의 object 파일은 깃에 추가될 필요가 없기 때문이다.
12. .gitignore 파일 생성
## 실행파일과 object 파일 무시
bin/
obj/
*.o
- .gitignore은 숨겨진 파일이므로 ls -a 명령어를 통해 생성된 것을 확인할 수 있다.
- .gitignore은 특정 파일이나 폴더의 push를 막을 수 있다.
13. git add & commit
git add .
git commit -m ".gitignore is added"
여기까지가 git 실습 첫번째 내용이고 다음 내용에선 branch를 다루는 실습에 대해 다루겠다.
'👩🏻💻개발공부 > 리눅스' 카테고리의 다른 글
| 9. 리눅스 프로세스(Process) 개념 알아보기🔎 (0) | 2022.12.11 |
|---|---|
| 8. 리눅스 시스템 콜 예제로 알아보기(2/2)🔍 (0) | 2022.12.01 |
| 8. 리눅스 시스템 콜 예제로 알아보기(1/2)🔍 (0) | 2022.12.01 |
| 7. 리눅스 깃 Git 초보를 위한 정리와 실습 (2/2) (0) | 2022.11.30 |
| M1 맥북에 리눅스 가상환경 설치하기 ( UTM ) + 데스크탑 (2) | 2022.11.29 |
- Total
- Today
- Yesterday
- 개발
- MySQL
- 스페인
- C++
- 혼공학습단
- 자바스크립트
- AWS
- 리눅스
- googleapis
- nodejs
- 해커톤
- 공룡책
- JavaScript
- Signal
- Process
- 깃 예제
- 백준
- SQL
- 혼공단 9기
- JS
- 스페인 교환학생
- 혼공단
- 프로그래머스
- 프로젝트
- 교환학생
- 운영체제
- 혼공단 SQL
- 개발일지
- 혼공
- Linux
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |