12월 24일 화요일
GIT 특강
GIT이란
- 분산형 버전 관리 시스템
- 로컬 저장소와 원격 저장소로 나뉨
- 변경 이력 관리 (버전 히스토리)
GITHUB란
- 마이크로소프트 산하의 GIT 플랫폼
- 온라인 코드 저장소
GitHub는 Git 저장소를 관리할 수 있는 클라우드 기반 플랫폼입니다.
- 협업 도구로 Pull Request, Issue Tracker, Actions 등이 있음
- 오픈소스 프로젝트를 위한 주요 허브
디지털 노마드 : 노트북을 바꿔도 장소에 제약받지 않고 해외에서 코딩하는 사람

협업 진행
꼭 알아야하는 필수 명령어
git init : 로컬 저장소 생성
git init
git add : add: 변경 내용을 스테이징 영역에 추가
git add <파일명>
git commit : 변경 내용을 저장소에 기록
git commit -m "커밋 메시지"
git push : 로컬 변경 사항을 원격 저장소에 업로드
git push origin main
git clone : 원격 저장소 복제
git clone <저장소 URL>
git pull : 원격 저장소의 변경 사항을 로컬로 가져오기
git pull
브랜치와 협업
브랜치란? 독립적으로 작업을 진행할 수 있는 ‘가상의 경로’, ‘공간’


main branch 많이 사용하지 않음, 이미 외부로 나가있는 브랜치
dev branch 가 우리가 적극적으로 사용하고 수정하는 곳
왼 그림을 보면 main branch가 가장 굵직하게 설정되어 있고 그 아래로 세개의 브랜치가 있다. 이는 세명의 작업자가 각자 자기 활동 (작업) 을 하는 공간이다. 작업과 테스트가 끝나면 merge라는 과정을 통해 main branch로 합쳐진다.


main branch의 버전이 version2이지만 작업자들은 version1의 설정에서 작업을 진행하였을 경우 에러가 발생한다.
그래서 버전통합이 매우매우 중요하당
에러메시지는 오른쪽과 같이 뜬다

이렇게 협업과정에서 많이 발생할 수 있는 문제를 해결하기 위해, main branch에 통합전 pull request 라는 과정을 실행해준다. 이는 원격저장소 관리자에게 보내는 과정이고, 상호간의 코드를 확인하고 branch에 올릴 수 있게 해주는 과정이다.
원격저장소 관리자가 모두 okay 할 경우 merge가 성립한다.
주요 순서
- 원격 저장소를 클론.
- 새로운 브랜치에서 작업.
- 변경 사항 커밋.
- 원격 저장소로 푸시.
- Pull Request 생성.
- 코드 리뷰 후 병합.
GITHUB DESKTOP 실습

깃허브 데스크톱을 설치 해주시고용


Edit a file을 클릭해주세용,
저는 깃헙데스크톱이 이미 깔려있었어서 바로 비쥬얼 스튜디오로 연결되네요
그리고 나서 크롬에 깃허브를 다시 쳐서 들어가면 이렇게 새로운 레포가 생성된 것을 볼 수 있어요


그 다음 dev 라는 브랜치를 하나 만들어줄게욤
그리고 다시 웹페이지 깃허브에 들어가면 2개의 브랜치가 생긴 것을 볼 수 있어욤


그 다음에 내 파일이 어딧는지 clone repository를 통해 확인해주는데
저는 진짜 이상한데 파일이 있어서 옮겨줬어요.....


그럼 첫번째로 이렇게 깃허브 웹사이트에 가서
경로를 복사해서 파일을 다운로드 해주는 방법이 있고
두번째로는 깃헙데스크톱에 가서 클론어레포지토리를 통해
파일을 다운로드 해주는 방법이 있습니당

클론으로 아까 실행했던 레포지토리를 실행시켜보면
기존에 있던 main banch와 아까 만들어뒀던 dev branch를 볼 수 있는데요,
기존의 dev branch에서 origin/dev 로 변경된 것을 확인해 볼 수 있습니당

다시 비쥬얼스튜디오를 틀고 아까 파일을 열어줍니다

이렇게 간단한 리드미 파일을 수정해주면

이렇게 .vs 라는 폴더가 자동으로 생성된다

여기서 .gitnore 이라는 파일을 만들어준다

여기까지 하고 깃헙데스크톱에 들어가면 이렇게 많은 파일들이 자동으로 생성된 것을 확인해 볼 수 있다.
gitignore 파일은 '이 코드는 올리지 않겠다' 라고 하는 것들을 작성해놓는 공간이다.

다시 비쥬얼스튜디오로 돌아와서 .gitignore 파일에 .vs 라고 코드를 짜준다.

그리고 다시 깃헙 데스크톱에 들어가면 신기하게 자자브리하던 파일들이 삭제된다.
나는 처음에 gitnore인줄 알고 giinore로 파일명 저장했더니 자자브리하던 파일이 안사라졌었음ㅋㅋ
ㄹㅇ 코딩에선 스펠링이 참 중요하다
gitignore에서 .vs 했을때 나머지 자자브리한 파일들이 다 정리되는 이유는
.vs를 .gitignore 파일에 추가하면, Git은 .vs 디렉터리와 그 안의 모든 파일을 추적하지 않도록 무시하기 때문이다.

우리의 최종 목표는 dev branch에서 작성한 코드들을 main branch로 합치는 과정이다.
하지만 프로젝트는 여러 개발자가 진행하는 작업물이다.
그러므로 내 작업물을 합치기 전에 깃헙데스크톱의 fetch origin을 통해 누군가가 작업한 내역이 있는지 확인해준다.

fetch 가 끝나면 좌측 상단의 체크표시를 통해 어떤 코드들을 커밋 ( main branch에 합치는 과정) 할건지 체크해주고

다른 개발자가 내가 어떤 부분을 코딩했고 이 코드는 어떤 내용인지 확인할 수 있도록
좌측하단의 summary에서 간단한 메모를 작성해준다
그 다음 commit to dev를 눌러준다.

그럼 현재상태에서는 이렇게 Commited just now 라고 뜨는데
이는 원격 저장소에는 저장이 되지 않았고 로컬 저장소 (내 컴퓨터) 에만 저장이 되었다는 뜻이다

이해를 위해 다시 비쥬얼스튜디오로 돌아와
README 파일에 Hello my name is minjoo 와 같은 간단한 코드를 짜줬다

그럼 깃헙데스크톱은 이런상태,
여기서 summary를 second commit 으로 설정하고 Commit to Dev를 클릭해준다.
그다음 push origin을 해줌

그 다음 다시 깃허브 웹페이지로 가서 브랜치를 dev branch로 변경해주면 우리가 짠
코드파일 두개를 손쉽게 찾을 수 있당

다시 새로운거
변경을 주기 위해 비쥬얼스튜디오에 들어가서 Hello my name is minjoo 를 지워줌

데스크톱에서 이렇게 뜨고 Updates README로 다시 commit to dev 해줌

그리고 다시 웹페이지 깃허브에 들어가면 이렇게 변경한 내용들이 뜸


그다음 이제 진짜 merge 해보겠음
깃허브 웹페이지에서 create & pull request 를 해줄 수도 있고
데스크톱에서 이렇세 ctrl + 7 으로 pull request 해줄 수도 있음
웹페이지에서 해주겠음

저거 누름 이렇게 뜸
이건 dev 에서 main으로 합쳐지는 과정임

이런식으로 또영어로 설명을 써줘야함
제목만 보고도 다른 개발자들이 아 이사람 어떤 코드를 짰고,
어떤 이유로 이 코드를 main에 합치려고 하는구나 ! 알 수 있도록
제목을 열심히 적어줘야함

그럼 주황색 동그라미처럼 pull request가 한개 뜨고
누군가가 코드를 좀봐달라는 듯으로
your main branch is not protected 로 뜸

자 그럼 다시 검사하는 입장에서 pull request에 들어가면 이런식으로 보임
이 코드를 합치려면 핑크 동그라미를 누르고
안합치고 싶다면 보라색 동그라미를 누르면 됨

branch가 성공적으로 merge 되었으면
이렇게 뜨고 '너 코드 합쳤으면 이제 니가 만들던 곳의 브랜치 삭제할래?'
의 뜻인 Delete branch가 뜬다
하지만 대부분의 작업환경에서는
개발자당 하나의 브랜치를 가지기 때문에 대부분의 경우에서는 Delete branch 하지 않는다


모든 과정이 끝나고 다시 레포에 돌아오면 이렇게 4commits 라고 뜨게 되고
이걸 클릭하면 commit pull merge 의 과정을 다 볼 수 있다
이를 통해 효율적으로 프로젝트를 협업할 수 있다
깃허브와 백준 연동

마지막과정!
앞으로 자주 코딩테스트 대비를 할 예정으로
백준허브를 설치해서 깃허브와 연동 해준다

그 다음 이렇게 설정 후 Get Started

요로코롬 완료 ~
반복 작업을 줄여주는 함수
학생 다섯명의 평균점수를 구하려면 (a+b+c+d+e) / 5 를 해줘야 한다.
하지만 학생이 1000명, 10000명이라면 어떨까?
이럴때 사용하는 것이 바로 반복작업을 줄여주는 함수이다 !
두 수의 합을 반환하는 함수 만들기
값 전달 (일반 변수)
#include <iostream>
using namespace std;
void changeValue(int x) { // void는 어떤 값도 반환하지 않겠다
x = 10;
}
int main() {
int num = 5;
cout << "Before changeValue: num = " << num << endl;
changeValue(num); // num의 값을 changeValue로 복사해라
cout << "After changeValue: num = " << num << endl;
return 0;
}
값 전달 (배열)
#include <iostream>
using namespace std;
void changeArray(int arr[], int size) {
arr[0] = 42;
}
int main() {
int arr[3] = {1, 2, 3}; // 크기가 3인 배열에 값주기, arr[0]=1, arr[1]=2, arr[2]=3
cout << "Before changeArray: arr[0] = " << arr[0] << endl;
changeArray(arr, 3); // arr은 arr[0]과 같음, 즉 arr 배열의 첫번째 요소의 크기는3
// 하지만 changeArray 함수를 주었기때문에 arr[0]의 값은 42
cout << "After changeArray: arr[0] = " << arr[0] << endl;
return 0;
}
값 전달(참조자 사용)
#include <iostream>
using namespace std;
void changeValueByReference(int &x) { //&는 참조 연산자로, x가 호출된 변수의 참조(주소를 가리킴)
x = 10;
}
int main() {
int num = 3;
cout << "Before changeValueByReference: num = " << num << endl;
changeValueByReference(num); // 참조 전달, num의 원본이 변경됨
cout << "After changeValueByReference: num = " << num << endl;
return 0;
}
예제
원의 넓이 계산
#include <iostream>
using namespace std;
/**
* @brief 반지름을 입력받아 원의 넓이를 계산하는 함수
* @param radius 원의 반지름
* @return double 원의 넓이
*/
double calculateCircleArea(double radius) {
return 3.14 * radius * radius;
}
int main() {
double radius = 5.0;
cout << "원의 넓이: " << calculateCircleArea(radius) << endl;
return 0;
}
평균 계산
#include <iostream>
using namespace std;
/**
* @brief 4개의 점수를 입력받아 평균 점수를 계산하는 함수
* @param score1 첫 번째 점수
* @param score2 두 번째 점수
* @param score3 세 번째 점수
* @param score4 네 번째 점수
* @return int 평균 점수 (소수점 제외)
*/
int calculateAverage(int score1, int score2, int score3, int score4) {
int sum = score1 + score2 + score3 + score4;
return sum / 4; // 정수 나눗셈으로 소수점 없이 계산
}
int main() {
int score1 = 80, score2 = 90, score3 = 85, score4 = 70;
cout << "평균 점수: " << calculateAverage(score1, score2, score3, score4) << endl;
return 0;
}
이름 형식 변환
#include <iostream>
#include <string>
using namespace std;
/**
* @brief 이름과 성을 입력받아 "성 이름" 형식으로 변환하는 함수
* @param firstName 이름
* @param lastName 성
* @return string 변환된 이름
*/
string formatName(string firstName, string lastName) {
return lastName + " " + firstName; // 문자열 결합
}
int main() {
string firstName = "철수";
string lastName = "김";
cout << "이름 형식 변환: " << formatName(firstName, lastName) << endl;
return 0;
}
점수 출력
#include <iostream>
using namespace std;
/**
* @brief 네 개의 점수를 받아 합계를 계산하고 출력하는 함수
* @param score1 첫 번째 점수
* @param score2 두 번째 점수
* @param score3 세 번째 점수
* @param score4 네 번째 점수
*/
void printTotalScore(int score1, int score2, int score3, int score4) {
int total = score1 + score2 + score3 + score4; // 점수 합계 계산
cout << "점수 합계: " << total << endl;
}
int main() {
printTotalScore(80, 90, 85, 70); // 합계 출력
return 0;
}
회고
오늘은 깃허브 특강이 있었는데 그게 너무 유용하고 좋았다
게임 개발 동아리 시절 깃허브 아무도 알려주지 않고 자꾸 깃허브에 올리라고
동아리 회장이 말해서 진짜 몇날몇일 애를 먹었었는데
뭔가 숭덩숭덩이던 깃허브 지식을 아예 쌩처음부터 차근차근
들으니 이제서야 뭔가 알 것 같고, 협업 잘 할 수 있을 것 같고 그랬다....
물론 언리얼은 용량이 너무 커서 깃허브를 쓰지 않는다는 충격적인 소식을 접했지만 ^^
언제 또 유니티를 다시 할지도 모르니 배워두면 분명히 좋은 것임은 분명했다....
'언리얼 엔진 부트캠프 > TIL' 카테고리의 다른 글
| [DAY9] Class 개념 (1) | 2024.12.27 |
|---|---|
| [DAY8] 판단을 해주는 조건문 (0) | 2024.12.27 |
| [DAY6] c++ 시작 (0) | 2024.12.27 |
| [DAY5] (1) | 2024.12.27 |
| [Day4] Blueprint (0) | 2024.12.19 |