혼자 아주 단순히 개발할 것이라면 이 정도만 알면 되지만
안타깝게도 git의 목적은 여러사람과 같이 쓰기에 발생하는 예외케이스들이 꽤 많다.
흔히 겪었던 "나는 왜 안되지?"case를 정리해둔다.
여기 정리된 case가 아니라도 git은 에러상황에 대한 어떠한 실마리를 제공해주니 에러내용을 잘 읽고 따라해보자.
case1: git clone 왜 안되지??
이것은 조금 광범위한 문제일 수 있겠지만 필자가 경험한 범위에서는
- git의 주소가 틀렸거나
- git에 대한 권한이 없거나
이다.
전자의 경우 주소를 잘 긁어오는 수 밖에 없다.
후자의 경우 또다시 여러가지로 나뒤어지는 경우가 있는데
1) git의 관리자가 권한을 줘야 하는 경우
2) ssh 연결을 해야 하는 경우
3) Mac OS에서 하나의 git사이트에 두개의 유저를 사용하고 있는 경우
이다.
1)의 경우는 뭐... 관리자에게 요청해야 하고
2)의 경우는 ssh-key를 등록하거나 http, https 로 가능하다면 바꿔서 접속하면 된다.
3)의 경우는 Mac OS에 키체인이라는 게 있는데 거기서 username/password를 저장하고 있다. 이것을 날려주면 된다.
하지만 이것은 git credential 기능 + osxkeychain 기능이 합쳐져서 발생하는것으로 한번 또 설정하고 나면 또다시 키체인에 생겨 번거롭다.
이를 방지하려면 git 주소에 username을 넣어주면 된다.
ex) git clone httos://[username]@git.gitlab.com/[Repository].git
참고1: git credential에 대한 설명 - https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Credential-%EC%A0%80%EC%9E%A5%EC%86%8C
참고2: osxkeychain옵션에 대한 설명 - https://help.github.com/articles/caching-your-github-password-in-git/
case2: git clone 했는데 최신소스가 아니네??
서버에 문제가 있는게 아니라면
- 다른 git을 받았거나
- 다른 브랜치를 받았거나
이다.
git clone 명령 뒤에 [-b [Branch 명]] 옵션을 확인하자.
혹시 Android studio나 SourceTree 등 툴을 이용해 받았다면 기본브랜치 master 부터 가져오기 때문에 그럴 수 있다.
툴 기능에서 다른브랜치를 checkout 하자.
case3: 본인이 뭘 반영하고 있는지 모르겠다면??
필자가 생각하기에 이건 트러블슈팅이라기 보단 사용법이 서툰것인데
대부분 간단하다고 하면서 이 부분을 생략하는 것 같아서 작성한다.
1) git add 전
- git diff
라인별로 들어가고 삭제된게 보임
- git status
현재 수정된 파일들 보기: 빨간색들
2) git add 후
- git status
현재 반영된 파일들 보기: 녹색들
3) git commit 후
- git commit --amend
현재 반영된 파일들 보는게 가능하나 이건 git commit을 수정하는 명령어이고 그 내용도 수정될 수 있어서 정확한 정답은 아니다.
4) git push 후
- 대부분의 git 사이트에서 commit 내용을 보여준다. 혹은 source tree 같은 툴을 사용하자.
case4: git push하는데 안올라가!!
1) 서버(origin) 연결이 잘못 설정되어 있거나
2) 당신의 commit이 최신과 다른 경우이다.
3) 이것도 아니라면 git 의 에러로그를 잘 확인해보라. 무엇인가 끊임없이 가이드를 주려한다.
1)은 수동으로 서버 정보를 입력하면 된다.
ex) git push origin [Your branch]
2)는 git pull을 하고 'merge commit'을 만든 다음에 올리면 된다.
git pull 이후 즉시 merge commit은 자동으로 생성되며 comment도 자동이다. commit을 저장하고 git push 단계로 넘어가면 된다.
case5: git push안되서 git pull을 했는데 merge commit이 생성되지 않네?!
이건 merge commit 을 만들다가 conflict가 발생한 경우다.
수정을 하거나 commit을 만드는 순간에도 동료들은 반영하고 있다.
git은 이러한 commit들을 일렬로 정리하려 하는데
전후관계를 모를때 conflict를 발생시키고 user에게 해결해 달라고 한다.
자동으로 못하니까 사람이 해줘야 한다.
'Git' 카테고리의 다른 글
git repository 끼리 merge 하기 (0) | 2017.02.16 |
---|---|
Git 개념과 사용법 (0) | 2017.02.08 |
gitlab 서버 구성하기 (0) | 2017.02.08 |