🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • GUI 방식 명령어들
  • Branch 생성(Local)
  • Branch push
  • Branch를 통한 형상관리
  • PR(Pull Request)신청
  • PR진행시 충돌이 발생할 경우
  1. 형상관리(Git)
  2. SourceTree를 활용한 깃허브 연동

Branch

브랜치 생성 및 관리방법과 PR방법등에 대해 기술한 페이지

PreviousCloneNextBranch Protection rules

Last updated 10 months ago

  • 이쯤되면 형상관리에서 배웠던 Working Directory, StaingArea, Local Repository에 대해선 다 까먹었을 것이다. 잠시 가서 보고오도록하자.

  • 당연히 나중 가면 또 까먹을 테니 별도의 탭에 형상관리파일을 띄워두면서 commit 명령어가 뭘 하는거고 push 명령어가 뭘 하는 녀석인지 중간 중간 체크하도록 하자.

GUI 방식 명령어들

  • git이라는 형상관리 도구는 본래 터미널에서 작동하기 때문에 CLI방식으로 명령어를 작성해줘야 한다.

  • 단 그렇게 어렵다면 사람들이 잘 쓰지 않기 때문에 SourceTree는 이를 보기 쉽게 GUI방식으로 구현을 했고 위 버튼들을 통해 commit, pull, push, fetch, checkout, merge 등이 가능하다.

Branch 생성(Local)

  • main 브랜치의 내용을 가져왔으면 main브랜치에서 작업하는 것이 아니라 본인의 작업용 브랜치를 생성하고 생성된 브랜치 안에서 코드를 수정해야한다. 따라서 로컬 저장소내에 브랜치를 추가 하도록하자

  • 새 브랜치에 작업용 브랜치명을 입력하고 새 브랜치 체크아웃 선택후 브랜치 생성을 누르면 main브랜치의 내용을 바탕으로 새 브랜치를 생성해 주면서 해당 브랜치로 이동 된다.

  • 위 실행방식을 순수 CLI로 작성한다면 다음과 같다(궁금하다면 오른쪽 터미널 클릭후 터미널에 입력해보자) git checkout -b mkm

  • checkout은 현재 작업중인 branch를 변경하는 명령어이다.

  • 브랜치 이동된 모습 좌측 브랜치를 더블클릭하여 브랜치 이동(check out)도 가능하다.

Branch push

  • 현재 생성된 브랜치는 원격 저장소에는 존재하지 않는 branch이다. 해당 브랜치를 원격 레파지토리에 그대로 추가하여 사용하도록 하자.

  • push는 Local Repository의 변경사항을 Remote Repository로 반영하는 역할을 한다. 위에서 main은 체크해제 한후 mkm브랜치만 push하도록하자

  • 그러면 다음으로 깃허브 아이디와 비밀번호를 입력해야 한다. 여기서 비밀번호는 github 비밀번호가 아니라 PAT(Personal Access Token)를 입력해야한다.

  • 만약 일반 비밀번호를 입력했다면 C:\Users\user1\AppData\Local\Atlassian\SourceTree 경로로 이동하여 passwd 파일을 삭제한 후 다시 진행하자

  • PAT을 잘 입력했다면 위에 귀찮게 하는 녀석이 또 나올 건데 가뿐히 무시해주자.

  • push 성공 후 github로 넘어가서 브랜치가 잘 push되었는지 체크해보자.

Branch를 통한 형상관리

이제 mkm 로컬 레파지토리에서 작업을 한 후 mkm 원격 레파지토리로 수정내용을 push하면서 형상관리 할 수 있다.

mkm 브랜치에 간단한 파일을 하나 생성해보자.

추가된 파일을 Staging Area에 올리고자 한다면 +버튼을 누른다.

Staging Area에 commit 하고자 하는 변경사항들을 모아 둔후 커밋(+)버튼을 클릭한다

버튼 클릭시 하단에 commit message를 작성하기위한 창이 열린다.

  • 간단하고 명확하게 커밋의 목적을 작성한다. ex) 회원서비스 버그 수정, 회원서비스 댓글기능 추가, 리팩토링 등등..

커밋 완료시 push버튼에 변경사항이 있다고 알려준다. 좌측 브랜치를 보면 어떤 브랜치의 변경사항인지 알수 있다.

이제 수정사항을 반영할 준비를 마쳤다. push를 통해 수정사항을 원격 레파지토리에 반영을 시켜주자. (브랜치 push와 동일한 방법으로)

push 완료시 아래와 같이 mkm브랜치의 브랜치 그래프가 바뀐걸 확인해볼 수 있다.

  • mkm -> origin/mkm : 로컬 mkm브랜치의 내용을 원격레파지토리들중 origin의 mkm 브랜치에 반영했다는 의미

원격 레파지토리에 접속후 mkm브랜치로 이동하면 다음과같이 수정사항이 반영되어 있다.

단 위 수정사항은 mkm브랜치에만 적용된 부분으로 main브랜치에는 현재 수정사항이 반영되지 않은 상태이다. mkm브랜치의 수정사항을 main에 합치기 위해서는compare & pull request버튼을 클릭하여 병합 요청을 넣어야 한다.

  • 원격 레파지토리의 main 브랜치와, Soure Tree상의 main브랜치로 이동하여 수정사항이 반영되었나 체크해보면 반영이 안되어 있을 것이다.

  • 로컬 레파지토리에 실제로 들어가보면 main 브랜치와 mkm 브랜치 각 각 더블클릭(checkout) 했을 때 디렉토리내부의 파일이 바뀌는걸 확인 할 수 있다. (로컬 레파지토리의 각 브랜치별로 변경사항을 따로 관리하기 때문)

PR(Pull Request)신청

브랜치 push시 PR버튼이 활성화된다. 클릭하자.

클릭후 이동하면 아래와 같은 화면이 나온다

  • main <- mkm : mkm브랜치의 내용을 main브랜치에 병합 요청하겠다는 의미. PR전에 잘 체크해보도록 하자.

  • 병합요청시 변경사항에 대한 제목과 내용을 간단하게 추가한후 Create pull request 버튼 클릭

요청을 넣으면 PR에 대한 리뷰를 하는 페이지로 이동한다.

프로젝트에 참여하는 인원들은 PR메세지, Commits내용, 바뀐 코드를 확인한 후 적절한 코멘트를 남긴다.

프로젝트 관리자(레파지토리 소유자)는 코멘트를 확인한후 Merge pull request를 통해 mkm브랜치의 수정사항을 main에 병합한다. 최종확인버튼 한번더 나오는데 문제없다면그대로 Merge 하면 된다.

병합 완료시 아래와 같이 main브랜치에 파일이 추가된다

PR진행시 충돌이 발생할 경우

원격 저장소의 수정사항과 현재 머지하려는 작업파일의 내용이 겹치는 경우 충돌이 발생하는데 해결방법은 원격 저장소의 내용을 pull로 내려받은 후 충돌이 발생한 소스코드를 하나하나 수정하여 다시 한번 push를 진행하면 된다. 순서를 기술해보자면 아래와 같다.

  1. 현재 StaingArea에 존재하는 모든 작업내용을 commit한다.

  2. 원격저장소에서 pull작업을 통해 변경사항을 내려받는다.

  3. 충돌 발생지점을 찾아 소스코드를 하나하나 수정한다.

  4. 작업 완료후 commit과 재 push를 진행한다.

각 명령어들에 대한 설명과 branch에 대한 설명은 을 통해 확인하자

push후 위와같은 팝업이 뜰건데 안뜨게 하는방법은 직접 검색해서 알아보고 일단 no helper로 Select 해주도록 한다.

형상관리(git)
https://lwk24.tistory.com/753
형상관리(git)
mkm branch
push 발음에 주의하자
귀찮게 하는 녀석
절대로 일반 password를 적지마시오
mkm이 없다면 알아서 추가된다.
추가된 소스코드라고 가정
스테이지가 Staing Area를 의미한다.
선택시 변경사항 확인가능
커밋!
pull request 버튼도 활성화 되었다.
엥?