콘솔의 명령어로 공부하는 것이 Git의 개념을 이해하는 데에 가장 도움이 되고 다른 Git 툴을 사용하는 것에 기초라고 생각하여 콘솔로 공부를 진행했다.
원격이라는 단어 때문에 항상 헷갈렸던 개념인데 이번에 다시 제대로 적립하고 머릿속에 저장해본다.
원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소입니다.
로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소입니다.
Git을 처음에 설치하면 사용자 정보(사용자명, 메일 주소)를 입력해주어야 한다.
$ git config --global user.name "<사용자명>"
$ git config --global user.email "<메일 주소>"
이렇게 config 명령을 사용해 정보를 입력해줄 수도 있고 .gitconfig
파일을 직접 수정해주는 방법도 있다. 이 파일은 vim ~/.gitconfig
로 수정해줄 수 있다.
예전에~/.vimrc
파일을 수정하여 vim을 세팅해준 적이 있다. 이때는 아무것도 모르고 그냥 검색해서 찾은 대로 했었는데 이제는 좀 이해가 간다. ~/
이 경로에는 세팅에 관련된 파일들이 많이 있다. 파일 이름에 .
이 붙어있는데 이것은 숨긴 파일이라는 뜻이다.
단축키(alias)도 설정해줄 수 있다고 한다. 나중에 필요에 따라 설정하고 사용해봐야겠다.
$ git init
backlog에서는 init
이라는 명령어에 대해 단순히 폴더를 Git의 저장소로 등록하는 것이라고 말한다.
좀 더 자세하게 알아보기 위해 검색을 해보니 이러한 내용을 찾을 수 있었다.
깃 저장소를 초기화한다. 저장소나 디렉터리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. 이것을 입력한 후에야 추가적인 깃 명령어들을 줄 수 있다.
출처: Nolboos's Blog - 완전 초보를 위한 깃허브
init
을 하면 .git
폴더가 생기는 건지 궁금하다.git clone
에는 git init
과 다른 몇 개의 명령어가 포함되어 있어서 clone
명령어 사용 시 init
등의 명령어를 사용하지 않아도 된다. 자세한 내용은 다음에 더 공부해보는 거로. (참고: Git - A3.2 Appendix C: Git 명령어 - 프로젝트 가져오기와 생성하기)Git의 관리하에 있는 폴더의 작업 트리와 인덱스 상태를 확인하는 명령어.
init
을 한 후 파일을 만들면 그 파일은 Untracked
상태이다. 아직 한 번도 커밋되지 않은 파일이라는 것이다. git add
를 통해 Tracked
상태로 만들어줄 수 있다.
git add
명령은 파일을 새로 추적할 때도 사용하고 수정한 파일을Staged
상태로 만들 때도 사용한다.Merge
할 때 충돌이 난 상태의 파일을Resolve
상태로 만들 때도 사용한다.add
의 의미는 프로젝트에 파일을 추가한다기보다는 다음 커밋에 추가한다고 받아들이는 게 좋다.
수정한 파일은 Tracked(“Changes not staged for commit”)
상태이다. 커밋을 위해 add
를 통해 Staged(“Changes to be committed” )
상태로 만들어주어야 한다.
파라미터에 .
를 지정하면, 모든 파일을 인덱스에 등록할 수 있다. (git add .
)
$ git commit -m "<메시지>"
$ git commit -am "<메시지>"
commit 관련 옵션
-m
: vim에서 별도의 메시지를 작성할 필요 없이 인라인 형식으로 바로 커밋 메시지 작성.-a
: 별도의add
명령어를 사용하지 않고 수정된 파일에 대해add
,commit
을 한 번에 수행함. (단, 한 번도add
되지 않은 파일은add
를 따로 작업 해줘야 함.)-am
:-a
,-m
의 옵션을 합친 형태. (단, 한 번도add
되지 않은 파일은add
를 따로 작업해 줘야 함.)출처: [Git] 메뉴얼 보는법, commit의 옵션, git의 3가지 공간 - 유자콩
의미도 모르고 사용해야 했던 git remote add origin
라는 명령어의 의미를 알게 되어서 정말 좋다.
$ git remote add <name(등록명)> <url(원격저장소의URL)>
$ git remote add origin
원격 저장소의 주소는 이름으로 기록해 둘 수 있습니다. 기록해두면
push
할 때마다 긴 원격 저장소의 주소를 입력할 필요가 없습니다. 원격 저장소를 추가하려면,remote
명령어를 사용합니다.
콘솔일 경우push
나pull
은 실행 시에 원격 저장소명을 생략하면,origin
이라는 이름의 원격 저장소를 사용합니다. 그 때문에 원격 저장소에는origin
이라는 이름을 붙이는 것이 일반적입니다.
웹상의 원격 저장소로 변경된 파일을 업로드하는 것을 Git에서는
푸시(Push)
라고 합니다.push
를 실행하면, 원격 저장소에 내 변경 이력이 업로드되어, 원격 저장소와 로컬 저장소가 동일한 상태가 됩니다. (push
= 업로드)
$ git push <repository(push 경로의 주소)> <refspec(push할 브랜치를 지정)>...
$ git push -u origin master
실행 옵션에서 한번
-u
를 지정하면, 이후에는 그 브랜치명 지정을 생략할 수 있습니다. 단, 비어있는 원격 저장소에 최초로push
했을 때는 원격 저장소명과 브랜치명을 생략할 수 없습니다.
원격 저장소를 복제(원격 저장소의 내용을 통째로 다운로드하는 것)하려면,
클론(Clone)
이라는 조작을 수행합니다. 복제한 저장소를 다른 PC에서 로컬 저장소로 사용할 수 있게 됩니다.
변경 이력도 함께 로컬 저장소에 복제되어 오므로, 원래 원격 저장소와 똑같이 이력을 참조하고 커밋을 진행할 수 있습니다.
클론을 할 때 폴더명을 지정하여 다르게 할 수도 있다는 것을 알았다. 이것은 같은 장소에 같은 원격 저장소를 여러 개 복제할 수 있다는 뜻이기도 하다.
$ git clone <repository(원격 저장소의 URL)> <directory(복제대상의 폴더명)>
$ git clone https://github.com/... tutorial2
pull
을 실행하면, 원격 저장소에서 최신 변경 이력을 다운로드하여 내 로컬 저장소에 그 내용을 적용합니다. (pull
= 다운로드)
log
명령어로 이력을 확인합니다.
$ git log --graph --oneline
log 관련 옵션
graph
를 지정하면 선으로 된 그림 형태로 이력 흐름이 표시됩니다.oneline
을 선택하면 한 줄로 커밋 정보가 표시됩니다.
내가 끌어온 저장소가 최신 버전이 아닌 경우, 즉 내가
pull
을 실행한 후 다른 사람이push
를 하여 원격 저장소를 업데이트해 버린 경우에는 내push
요청이 거부되어 버립니다.
이런 경우병합(merge)
이라는 작업을 진행하여 다른 사람의 업데이트 이력을 내 저장소에도 갱신 해야 합니다. 만약 병합하지 않은 채로 이력을 덮어쓰게 되면 다른 사람이push
한 업데이트 내역이 사라져 버리기 때문입니다.
누구나 쉽게 이해할 수 있는 Git 입문의 내용은 원리를 이해하기에는 좋지만 디테일을 공부하거나 다양한 명령어를 공부하기는 어려웠다.
일단 발전편까지 공부한 후에 깃의 디테일과 명령어를 좀 더 공부할 것이다.
origin
의 의미 더 확실하게init
을 하면 .git
폴더가 생기는가?git clone
에 포함된 명령어들 (Git - A3.2 Appendix C: Git 명령어 - 프로젝트 가져오기와 생성하기)