브랜치는 깃에서 코드를 분리하고 독립적으로 관리할 수 있도록 하는 개념입니다. 브랜치를 사용하면 여러 개발자가 동시에 작업하거나 특정 기능을 개발할 때 각자 독립적인 작업 환경에서 작업할 수 있습니다. 각 브랜치는 프로젝트의 특정 상태를 나타내며, 변경 사항을 다루기 위해 사용됩니다.
주요 브랜치 관련 용어와 개념
메인 브랜치(Main/Branch): 프로젝트의 기본이 되는 브랜치로서, 주로 "main" 또는 "master"라는 이름으로 사용됩니다. 일반적으로 안정된 코드를 유지하고 배포하기 위해 사용됩니다.
피처 브랜치(Feature Branch): 특정 기능을 개발하기 위해 메인 브랜치에서 파생된 브랜치입니다. 개발자는 피처 브랜치에서 해당 기능을 구현하고 테스트한 후, 완료되면 메인 브랜치로 병합(merge)할 수 있습니다.
브랜치 생성(Create a Branch): 새로운 브랜치를 만들어 기존 브랜치에서 독립적으로 작업을 수행할 수 있습니다.
git branch [브랜치 이름]
브랜치 전환(Switch Branch):
작업 중인 브랜치를 변경합니다.
git checkout [브랜치 이름]
또는
git switch [브랜치 이름]
브랜치 병합(Merge Branch): 브랜치를 현재 브랜치로 병합합니다.
git merge [브랜치 이름]
브랜치를 사용하면 여러 작업이 동시에 진행되거나 새로운 기능을 안전하게 개발할 수 있으며, 각 브랜치는 독립적인 커밋 히스토리를 가지게 됩니다. 이는 협업과 프로젝트 관리를 더욱 효과적으로 할 수 있도록 도와줍니다.
깃(Git)은 소프트웨어 개발 프로젝트를 관리하기 위한 분산 버전 관리 시스템(DVCS) 중 하나입니다. 소프트웨어 개발자들이 소스 코드의 변경 내용을 효과적으로 추적하고 협업하는 데 사용됩니다.
깃의 주요 특징
분산 버전 관리:깃은 프로젝트의 모든 이력과 변경 내용을 로컬 저장소에 저장하므로 네트워크에 연결되지 않은 상태에서도 작업이 가능하며, 중앙 서버에 의존하지 않습니다.
브랜치:브랜치를 지원하여 여러 개발자가 동시에 작업하고 서로 다른 기능을 개발할 수 있습니다. 이를 통해 동시에 다양한 작업을 진행할 수 있습니다.
병합(Merging):브랜치에서 개발한 내용을 다시 통합하는 기능이 있어 여러 사람이 개발한 내용을 하나로 합칠 수 있습니다.
이력 관리:소스 코드의 변경 이력이 상세하게 기록되어 누가 언제 어떤 변경을 했는지를 쉽게 추적할 수 있습니다.
원격 저장소:깃허브(GitHub)와 같은 원격 저장소를 통해 여러 사용자 간에 협업이 용이하며, 프로젝트의 백업과 공유가 가능합니다.
많은 개발자와 프로젝트에서 깃을 사용하여 소스 코드를 효과적으로 관리하고 협업합니다.
GitHub란
깃허브(GitHub)는 깃(Git)을 기반으로 하는 웹 기반의 버전 관리 플랫폼입니다. 개발자들이 소스 코드를 저장하고 관리하는데 사용되며, 프로젝트의 협업과 커뮤니케이션을 간편하게 도와줍니다. 깃허브는 코드 호스팅, 협업 도구, 이슈 트래킹, 코드 검토, 빌드 및 배포 등 다양한 개발 관련 기능을 제공합니다.
깃허브의 주요 특징
코드 호스팅:개발자들은 깃허브를 사용하여 소스 코드를 저장하고 관리할 수 있습니다. 다양한 프로젝트가 깃허브에 호스팅되어 있으며, 다른 사용자들이 소스 코드를 참고하고 기여할 수 있습니다.
협업과 이슈 트래킹:사용자들은 프로젝트에 이슈를 제기하고 토론할 수 있으며, 작업을 추적하고 문제를 해결하기 위한 기능들이 제공됩니다.
브랜치와 병합:깃허브는 깃의 브랜치와 병합 기능을 활용하여 여러 개발자가 동시에 작업하고 소스 코드를 관리할 수 있도록 도와줍니다.
코드 검토:코드 검토 기능을 통해 여러 사용자가 제안된 변경 사항을 확인하고 피드백을 주고받을 수 있습니다.
빌드 및 배포:깃허브는 CI/CD(Continuous Integration/Continuous Deployment)를 지원하여 소프트웨어를 자동으로 빌드하고 테스트하며, 배포하는 프로세스를 구축할 수 있습니다.
오픈 소스 생태계:많은 오픈 소스 프로젝트가 깃허브를 통해 관리되며, 전 세계의 개발자들이 이를 활용하고 기여합니다.
깃허브는 개발 생태계에서 널리 사용되며, 개발자들 간의 협업과 소스 코드 관리를 효과적으로 지원하는 중요한 도구 중 하나입니다.
윈도우는 설치 완료 시 설치된 Git bash를 이용하면 리눅스 환경과 같이 터미널을 이용할 수 있습니다. 이곳에서 git 명령을 수행할 수 있습니다.
GitHub 첫걸음을 위한 사전 지식
1. GitHub 기초 작업 필수 개념: commit, push
커밋(Commit) 커밋은 깃에서 변경 내용을 로컬 저장소에 저장하는 작업을 말합니다. 개발자는 작업을 완료했을 때 해당 변경 내용을 커밋하여 로컬 저장소에 기록합니다. 각각의 커밋은 프로젝트의 특정 시점의 스냅샷으로서, 커밋 메시지를 통해 어떤 변경이 있었는지 명확하게 기록합니다. 커밋을 통해 소스 코드의 이력을 추적하고 필요한 경우 특정 시점으로 되돌릴 수 있습니다.
커밋의 기본 구조
git commit -m "커밋 메시지"
푸쉬(Push)
푸쉬는 로컬 저장소에 있는 변경 내용을 원격 저장소로 업로드하는 작업을 의미합니다. 로컬 저장소의 커밋들은 개발자가 작업을 마무리하고 다른 개발자들과 변경 사항을 공유할 때 원격 저장소로 푸쉬됩니다. 이를 통해 여러 개발자가 동시에 작업하고 있는 경우 다른 개발자들도 최신 변경 내용을 확인하고 자신의 로컬 저장소에 반영할 수 있습니다.
푸쉬의 기본 구조
git push [원격 저장소 이름] [브랜치 이름]
예를 들어, 일반적으로는 다음과 같이 사용됩니다
git push origin main
이 명령은 현재 작업 중인 브랜치의 변경 내용을 "origin"이라는 원격 저장소의 "main" 브랜치로 푸쉬하는 코드입니다.
커밋과 푸쉬를 함께 사용하면 개발자는 소스 코드의 변경 내용을 효과적으로 관리하고 협업할 수 있습니다.
2. 로컬 저장소와 원격 저장소
로컬 저장소(Local Repository)
로컬 저장소는 개발자의 개인 컴퓨터에 위치한 저장소를 의미합니다.
개발자는 자신의 로컬 컴퓨터에서 깃을 사용하여 프로젝트를 관리하고 변경 사항을 추적할 수 있습니다.
로컬 저장소에서는 브랜치를 생성하고 변경 내용을 커밋할 수 있습니다.
원격 저장소(Remote Repository)
원격 저장소는 인터넷이나 네트워크 상의 다른 위치에 위치한 중앙 서버 저장소를 의미합니다.
깃허브(GitHub)는 가장 널리 사용되는 원격 저장소 중 하나입니다.
원격 저장소는 로컬 저장소와 변경 사항을 주고받을 수 있습니다. 개발자는 로컬에서 작업한 내용을 원격 저장소에 푸시(push)하여 공유하거나, 원격 저장소에서 변경된 내용을 풀(pull)하여 자신의 로컬에 반영할 수 있습니다.
여러 개발자가 동시에 프로젝트에 참여하고 협업할 때 원격 저장소는 중앙화된 저장소 역할을 합니다.
로컬 저장소와 원격 저장소 간의 상호 작용을 통해 개발자들은 프로젝트의 변경 내용을 효과적으로 추적하고 여러 사람이 동시에 작업할 수 있게 됩니다.
로컬 저장소는 작업을 하고 변경 사항을 기록하는 개발자의 개인 작업 공간이며, 원격 저장소는 여러 개발자들이 공유하고 협업하는 중앙 저장소입니다.
3. 브랜치
브랜치(Branch)
브랜치는 깃에서 코드를 분리하고 독립적으로 관리할 수 있도록 하는 개념입니다. 브랜치를 사용하면 여러 개발자가 동시에 작업하거나 특정 기능을 개발할 때 각자 독립적인 작업 환경에서 작업할 수 있습니다. 각 브랜치는 프로젝트의 특정 상태를 나타내며, 변경 사항을 다루기 위해 사용됩니다.
주요 브랜치 관련 용어와 개념
메인 브랜치(Main/Branch): 프로젝트의 기본이 되는 브랜치로서, 주로 "main" 또는 "master"라는 이름으로 사용됩니다. 일반적으로 안정된 코드를 유지하고 배포하기 위해 사용됩니다.
피처 브랜치(Feature Branch): 특정 기능을 개발하기 위해 메인 브랜치에서 파생된 브랜치입니다. 개발자는 피처 브랜치에서 해당 기능을 구현하고 테스트한 후, 완료되면 메인 브랜치로 병합(merge)할 수 있습니다.
import java.util.*; class Solution { public int[] solution(String[] park, String[] routes) { int[] startIdx = {0,0}; int h = park.length; int w = park[0].length();
for(int i = 0; i < park.length; i++){ if(park[i].indexOf('S') != -1){ startIdx[1] = park[i].indexOf('S'); startIdx[0] = i; break; } }
for(int i = 0; i < routes.length; i++){ boolean flag = true;