워킹 디렉토리 정리
·
Git
개발하는 과정에서는 컴파일 등 임시로 생성되는 파일들이 생긴다. 이 파일들을 .gitignore 목록에 넣어 관리할 수도 있지만, 반복해서 불필요하게 생성되는 파일들은 수동으로 관리하기 번거롭다.clean 명령을 사용하면 워킹 디렉토리에 있는 추적되지 않는 파일들을 찾아 삭제한다. 추적되지 않는 모든 파일이 삭제되므로 실행 시 주의가 필요하다.$ git clean 깃은 실수로 파일을 삭제하는 것을 방지하기 위해 git clean 실행 시 강제 옵션(-f) 없이는 작동하지 않는 것이 기본 설정이다.  따라서, 삭제하려면 반드시 옵션을 추가해야 한다.-f : 추적되지 않는 파일 모두 삭제-n : 삭제될 파일 목록만 표시. 실제 삭제하지는 않음-d : untracked 디렉토리까지 삭제-x : .gitigno..
수정 사항 복원 중 충돌 해결
·
Git
스택에 저장된 스태시 내용이 다시 워킹 디렉토리로 복구될 때, 작업 내용과 현재 워킹 디렉토리가 병합된다. 같은 파일에서 동일한 부분을 변경했다면 즉시 충돌이 발생한다. 해당 경우 스태시는 스택에 저장된 내용을 자동으로 삭제하지 않으므로 직접 충돌을 해결한 후 스태시 목록을 수동으로 삭제해야 한다. 새로운 브랜치 생성 후 스태시 적용스태시 충돌이 예상된다면 스태시용 브랜치를 생성해서 작업하는 것이 좋다. 스태시 스택에 저장된 내용으로 새로운 브랜치를 동시에 생성할 수 있다.$ git stash branch 브랜치이름$ git stash branch 브랜치이름 특정스태시 정상적으로 스태시 복원이 적용되면 저장된 스택은 자동으로 삭제된다.
수정 사항 임시 저장
·
Git
작업 브랜치를 변경하려면 워킹 디렉토리는 깨끗한 상태로 정리되어 있어야 한다. 워킹 디렉토리에서 작업 중인 내용이나 커밋되지 않은 변경 사항들이 남아 있으면 브랜치를 변경할 수 없다. 깃은 완료되지 않은 작업이 남아 있을 때, 현재 작업을 임시로 저장할 수 있는 스태시 기능을 제공한다. 스태시는 브랜치를 이동할 때 작업 중인 내용 때문에 워킹 디렉토리가 충돌하는 것을 방지하는 데 사용한다. 현재 브랜치는 워킹 디렉토리에 커밋하지 않은 작업이 남아있어 변경할 수 없는 상태이다.  스태시의 임시 스택 영역에 작업 중인 코드 저장스태시 명령을 실행하면 현재 작업 중인 내용은 임시 저장되고, 수정 전 마지막 커밋 상태로 돌아간다. 즉, 이전 커밋 후 작업하지 않은 상태의 워킹 디렉토리가 된다. 수정 중인 내용을..
브랜치 삭제
·
Git
브랜치를 삭제하는 것은 해당 브랜치 내용과 커밋을 삭제하는 것이다. 따라서 삭제 명령을 실행할 때는 주의애햐 한다. 브랜치 삭제는 크게 스테이지 상태에 따라 달라진다. 일반적인 브랜치 삭제$ git branch -d 브랜치이름 아래와 같이 현재 자신의 브랜치에서 삭제 명령을 실행하면 오류 메세지가 출력된다. 어느 브랜치로 체크아웃 될 지 모르기 때문이다. 따라서, 삭제하고자 할 때는 다른 브랜치로 이동해서 삭제한다. d 옵션은 스테이지 상태가 깨끗할 때만 삭제를 허용한다. 워킹 디렉토리에 작업한 기록이 있거나 add 명령어로 스테이지의 인덱스가 변경된 상태라면 삭제하지 않는다. 삭제하려면 반드시 최종 상태가 커밋되어 깨끗한 스테이지 상태여야 한다. 또한 병합되지 않은 브랜치는 d 옵션으로 삭제 할 수 없..
브랜치 패치
·
Git
리모트 브랜치는 일반적인 커밋 패치와 동일하다. 리모트 브랜치를 패치한다고해서 자동으로 로컬 저장소에 새로운 브랜치가 생성되지는 않는다. 패치 동작은 원격 저장소에서 리모트 브랜치 내용을 내려받기만 할 뿐 자동으로 병합하지 않기 때문이다. 테스트를 위해 Github에 원격 브랜치를 생성한다. 다음으로, 로컬에서 원격 브랜치를 가져온다. 새로 만든 브랜치가 보이면 정상적으로 가져온 것이다. 이때, 새로운 원격 브랜치가 추가되거나 기존 원격 브랜치가 업데이트 되었다면 이 변경 사항은 .git 내부에 저장된다.  병합리모트 브랜치가 패치되면 깃은 원격 저장소의 최신 상태를 가져와서 로컬에 있는 리모트 브랜치 포인터를 생성하거나 업데이트 한다. 원격 저장소에서 패치된 커밋들을 새로운 로컬 브랜치로 반영하려면 병..
원격 브랜치
·
Git
리모트 브랜치저장소는 각자의 고유한 브랜치를 생성하고 관리하는데, 원격 저장소에 생성한 브랜치를 리모트 브랜치라고 한다.로컬 저장소에 생성한 브랜치는 서버로 공유할 수 있다. 원격 저장소와 연결된 로컬 저장소에서 새로운 브랜치를 생성한다고 해서 자동으로 원격 저장소에도 브랜치가 생성되는 것은 아니다. 또, 원격 저장소에 등록된 브랜치가 자동으로 로컬 저장소를 만들지도 않기 때문에 별도 명령을 실행하여 저장소를 동기화 해야 한다.원격 저장소와 로컬 저장소의 브랜치 이름은 보통 같지만, 반드시 일치하지 않아도 된다. 서로 다른 이름으로 브랜치를 연결하여 이를 통해 원격과 로컬에서 다른 브랜치로 운영하고 관리한다.리모트 브랜치는 보통 별칭/브랜치 이름 형태이다. 브랜치 추적리모트 브랜치 또한 원격 저장소의 브..
HEAD 포인터
·
Git
마지막 커밋깃은 마지막 커밋 정보를 기반으로 새로운 커밋을 생성한다. 시스템이 매번 커밋할 때마다 마지막 커밋 정보를 찾으면 부하가 발생하기 때문에 깃은 마지막 커밋을 쉽게 확인할 수 있도록 HEAD라는 특수한 포인터를 제공한다. HEAD는 작업 중인 브랜치의 마지막 커밋 ID를 가리키는 참조 포인터이다. 깃은 마지막 커밋을 가리키는 HEAD 포인터를 부모 커밋으로 대체하여 사용하기 때문에 빠르게 스냅샷을 생성할 수 있다.master 브랜치의 마지막 커밋은 e0b2fc4이고, footer 브랜치의 마지막 커밋은 c6e3f34이다. master 브랜치에서 새로운 커밋을 생성할 때 부모 커밋으로 e0b2fc4을 가리키는 HEAD 포인터를 사용한다. footer 브랜치에서 새로운 커밋을 생성할 때는 c6e3f..
브랜치
·
Git
브랜치 특징가상 폴더깃의 브랜치는 작업 폴더를 실제로 복사하지 않고, 가상 폴더로 생성한다. 외부적으로는 물리적인 파일 하나만 있는 것으로 보인다. 생성된 작업 폴더는 물리적으로 복제된 구조보다 유연하게 처리할 수 있다. 브랜치로 생성된 가상 폴더는 빠르게 공간 이동이 가능하다. 개발자는 쉽게 가상 폴더인 브랜치를 이동하면서 프로젝트를 수행할 수 있다. 독립적인 동작브랜치를 이용하면 원본 폴더와 분리하여 독립적으로 개발 작업을 수행할 수 있다. 기존에는 소스 코드의 작업 폴더를 별도로 생성했다. 물리적으로 복사된 각자의 폴더에서 코드를 작업한 후 소스 코드 2개를 다시 하나로 합쳐야 했다. 코드를 하나라 합치려면 작업 내역들을 일일이 찾아 정리해야 한다.하지만, 깃과 같은 버전 관리 시스템을 이용하면 분..
원격에서 수동으로 내려받기
·
Git
원격 저장소 내용을 내려받는 방법은 pull과 fetch가 있다. 두 방법의 차이는 병합을 자동 처리하는지 여부이다. 자동 병합pull은 원격 서버에서 현재 커밋보다 더 최신 커밋 정보가 있을 때 내려받는다.  내려받은 최신 커밋들은 현재 브랜치로 자동 병합처리 한다. 여기서 병합은 원격 서버 파일과 로컬 파일을 하나로 합치는 과정이다.하지만 여러 개발자와 협업으로 코드를 작성할 때 pull 명령어를 사용한 자동 병합은 문제가 생길 수 있다. pull 명령이 자동으로 브랜치를 병합하지 못하고 충돌이 발생하면 fetch 방식을 사용해야 한다. 가져오기fetch는 원격 저장소에서 코드를 수동으로 내려받는 작업을 한다. 원격 저장소에서 커밋된 코드를 임시 브랜치로 내려받은 후 현재 브랜치와 자동으로 병합하지 ..
원격에서 자동으로 내려받기
·
Git
복제복제는 기존 저장소를 이용하여 새로운 저장소를 생성하는 방법 중 하나이다. 복제할 때는 clone 명령어를 사용한다. clone 명령어는 초기화 init 명령어 외에 원격 서버 접속에 필요한 추가 설정을 자동으로 수행한다. 서버의 연결 설정을 마친 후 서버 안에 있는 모든 커밋된 코드 이력들을 한 번에 내려받는다.자격 증명을 어떤 방식으로 했느냐에 따라 clone 명령어의 url이 달라질 수 있으므로 주의한다.$ git clone https://github.com/bde574786/github-test.git$ git clone git@github.com:bde574786/github-test.git 참고로, clone으로 복제할 때 생성 폴더의 이름을 지정하지 않으면, 깃허브 저장소의 이름과 동일한..