git을 사용하다보면 원격저장소에서 저장소를 clone받아오는 것이 가장 많이 하는 일일것입니다. 보통 활발히 진행되고 있는 저장소라면 브랜치가 있기 마련인데 clone을 받아왔을때 이 branch들은 로컬로 가져오지 않습니다. 왠지 Subversion적인 사고로는 땡기면 다같이 와야할것 같은 생각이 드는데 git은 그렇게 동작하지 않습니다.
어쨌든 공동작업을 하거나 다른 사람의 소스를 볼때 원격의 브랜치도 가져와야 할 일이 있습니다.
일단 clone받아온 곳에서 git branch를 하면 로컬저장소의 브랜치 목록을 볼 수 있는데 git branch -r을 하면 원격저장소의 브랜치 리스트를 볼 수 있고 git branch -a를 하면 모든 브랜치의 리스트를 볼 수 있습니다.
checkout은 브랜치나 태그로 작업트리를 변경하는 명령어입니다. git checkout origin/autoconf처럼 명령어를 origin/autoconf처럼 원격저장소에 사용하면 원격저장소의 브랜치로 작업트리가 변경이 됩니다. 하지만 위의 메시지에 나온대로 detached HEAD상태이고 소스를 보고 변경도 해볼수 있지만 이곳에서 변경한 것은 잠시 확인해 보는 용도로만 사용될뿐 저장되지 않습니다. 다른 브랜치로 checkout을 하면 사라집니다. 잠시 테스트를 해보거나 확인 용도라면 이렇게 하는 것이 많지만 원하는 액션은 아닙니다.
브랜치를 추적하고 싶다면 git checkout -b 생성할브랜치이름 원격브랜치이름처럼 해주어야 합니다. -b 옵션은 브랜치를 만들면서 해당 작업트리로 checkout까지 하라는 옵션입니다. 이제 branch명령어를 사용해보면 로컬에 새로운 브랜치가 생긴것을 볼 수 있습니다.이렇게 하는 이유는 Subversion과는 다르게 git같은 경우는 여러개의 원격저장소를 연결할 수 있고 그중에는 브랜치명이 겹칠 수도 있기 때문으로 보입니다. 일반적으로는 로컬에서도 같은 브랜치명을 사용하게 되는데 위처럼 이름을 적어주는게 귀찮다면 git checkout -t origin/eventsource처럼 생성하면 원격저장소의 이름을 그대로 사용합니다.
안녕하세요. git를 공부하는 학생이예요
여쭤볼게 생겨서 코멘트 남기게 되었습니다.
제가 컴 두대로 git를 운영해 보고 있는데,
서버컴과 클라이언트 컴으로 분류를 하겠습니다.
서버컴에 저장소를 클컴으로 클론 해왔을 때
서버컴에서 체크아웃중인 브랜치만 클컴에 생기던데
클컴에서도 전체 브랜치를 다 받아서 작업할 수는 없는건가요?
아니면 제가 서버컴에 저장소를 만들때 --bare --shared 같은 옵션을 주지 않아서 인가요
--bare --shared를 설정하면 베어는 워킹 디렉토리가 없다는건 알겠는데 왜 사용하는지 모르겠습니다.
쉐어는 공유권한설정이라고 알고있습니다.
질문이 난해하게 되어 죄송합니다.
요점은 클론 하였을 때 브랜치 전부를 가져와서 작업할 수 있는 지입니다.
답해주시면 감사하겠습니다 ㅠ ㅠ
안녕하세요. 위 글에서 설명했듯이 clone을 가져오면 체크아웃된 메인 브랜치만 로컬에 나타나지만 remote 저장소의 브랜치를 보면 다른 브랜치도 모두 로컬에 와 있지만 로컬 저장소에 브랜치를 만들지 않았을 뿐입니다. remote 브랜치에서 필요한 로컬 브랜치를 만들어서 사용하면 되고 이는 로컬브랜치와 원격 브랜치를 따로 관리하기 위함입니다.
--shared는 제가 사용해 보지 않아서 잘 모르겠지만 --bare같은 경우에는 git 저장소를 사용하는 경우에 사용합니다. 예를 들어 서버에 git 저장소를 만들고 여기서는 작업을 하지 않고 팀간에 공유 목적으로만 쓰게 된다면 이렇때 --bare를 쓰게 됩니다.
감사합니다. 잘 되네요!