혼자 아주 단순히 개발할 것이라면 이 정도만 알면 되지만

안타깝게도 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

git repository 끼리 merge 하기



지난번 내부 gitlab 서버를 구성했었는데 (http://dukwon.tistory.com/3)

키보드와 마우스가 안되는 현상을 없애보고자 이것저것 하다보니

서버가 이상해지고 자꾸 다운 되었다.

서버를 재설치 하고자

부랴부랴 예전 git에 현재의 반영사항을 모두 옮기는 작업을 했던 과정을 글로 남긴다.




Case 설명

여기에 A, B git이 있다.

시작은 A git에서 시작했으나 B git으로 나왔고 많은 commit들이 B에 반영되었다.

심지어 이러한 상황에 A에 commit을 올린사람도 있다.(ㅠㅠ)



이 상황에서 B의 반영사항을 모두 A로 반영하려고 한다.

(둘다 branch는 동일하다고 가정)

이때 생각해야할 절차는


1. 둘다 local에 clone하기

2. A 에서 B를 remote로 등록

3. A에서 B 몽땅 땡겨오기

이다.



1. 둘다 local에 clone하기

이 방법은 이미 알고있으리라 생각하고 생략



2. A에서 B를 remote로 등록

git A에서 git B를 가져올 수 있도록 remote를 걸어두는 것이다.

(하지만 전혀 History를 공유하지 않는다면 3번 과정에서 연관된것이 없다는 에러가 발생할 것이니 유의하자)

$ git remote add [B의 이름] [B의 경로/git clone 주소]

ex1) $ git remote add local ../B

ex2) $ git remote add local https://github.com/nasa/mct.git



3. A에서 B 몽땅 땡겨오기

git이란게 원래 개별 repository 이기 때문에 remote에 있는것과 맞추는 작업이 필요하며

'git fetch' 가 이 역할을 하고

'git merge' 는 실제로 브랜치끼리의 반영사항을 합치는 역할을 한다.(브랜치끼리 통합하려면 이것만 하면 된다.)

$ git fetch [B의 이름]

ex) $ git fetch local


$ git merge [현재 A의 branch와 같은 B의 branch 이름]

ex) $ git merge remotes/local/master


이 과정으로 온전하게 가져올 수 있겠지만

3번 과정에서 confilct가 발생할 가능성이 높고 이를 적절히 처리해야 만 한다.

이것은 git confilict 해결방법을 참고하자.


끝.



Refered from:

http://blog.caplin.com/2013/09/18/merging-two-git-repositories/

https://git-scm.com/book/ko/v1/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge%EC%9D%98-%EA%B8%B0%EC%B4%88

'Git' 카테고리의 다른 글

git 트러블 슈팅(trouble shooting)  (0) 2017.02.22
Git 개념과 사용법  (0) 2017.02.08
gitlab 서버 구성하기  (0) 2017.02.08

Git 개념과 사용법


잡담 1

Git을 처음쓰면 UI로 처리하는 툴도 많은데 왜 깜깜한 Shell에서 이런'짓'을 해야하지? 이게 트랜드라고? 라는 생각이 많이 들었었다.

그런데 한국어로 '깃' 일까 '짓' 일까?

Ref: http://www.clien.net/cs2/bbs/board.php?bo_table=park&wr_id=43154274

=> '깃' 이라고 부르는게 좋겠다.


Git이야 몇년동안 많이 써봤지만 다른 Repository를 쓴 적이 별로 없어서 마땅히 비교할만한 건 없지만


필자가 생각하는 장점

- Line 별로 Difference를 비교하기 때문에 같은파일을 여러사람이 같이 작업하기 편하다.

- 각자의 Repository를 만들기 때문에 Server가 날아가도 Client에 저장된 상태까지로는 History까지 원복가능

- 리눅스 명령어를 익히게 되고 친해진다.(당장 퇴근해야 되거나, 배우고 싶지 않은 사람에겐 단점이다.)

... 생각나면 더 쓰겠다.


필자가 생각하는 단점

- 명령어로 하는게 가장 확실해서 결국 명령어를 어렵게 익히게 한다.

- 반영하는 단계가 로컬 2단계, 서버로 1단계 분할되어 있어서 번거로울 수 있다.(반대로 안전할 수는 있다.)

- git add, git commit 등의 절차를 왜 해야 하는지 설명하기 어렵다.

- conflict를 해결하는 방법이 어렵다.



# Git 사용법

git의 첫 사용자로서 단순히 소스를 다운받아 몇가지 수정을 하고 반영하는 case에 대해서 알아보자


1. 서버로부터 소스를 가져온다.

2. 수정을 한다.

3. 서버에 반영한다.


이 동작을 위해 당신이 알아야할 git 사용법에 대해서 알아보자.


1. 서버로부터 소스를 가져온다.

$ git clone [서버에 있는 git 저장소 주소] [-b [브랜치명]]

ex) $ git clone https://github.com/tensorflow/tensorflow.git -b R0.8


1) 서버로부터 git을 가져오는 키워드 'git clone' 으로 시작

2) 서버에 있는 git 저장소 주소를 입력

3) 혹시 branch가 master(default)가 아니라면 branch명을 입력

소스를 한번 가져왔다면 ''



2. 수정을 한다.

이건 뭐 다들 알아서 고치시리라...


3. 서버에 반영한다.

$ git add [반영할 파일]

ex) $ git add . 

      => 수정된 모든 파일을 반영(반영되지 않는 경우도 있었는데 까먹음)


$ git commit [-m [반영할 제목]]

ex) $ git commit -m "test commit"

      => 그냥 'git commit'만 입력해도 vi editor 화면으로 넘어가면 좀더 상세하게 제목과 내용을 작성할 수 있다.


$ git push [origin [올릴 branch 명]]

ex) $ git push

   => 서버에 보내는 방법이다.

   => origin 은 서버를 뜻한다.

   => git clone할때 특정브랜치로 가져왔고 브랜치를 변경하지 않았다면 예제와 같이 생략 가능하다.




혼자 아주 단순히 개발할 것이라면 이 정도만 알면 되지만

안타깝게도 git의 목적은 여러사람과 같이 쓰기에 발생하는 예외케이스들이 꽤 많다.

흔히 겪었던 "나는 왜 안되지?"case를 정리해둔다.

여기 정리된 case가 아니라도 git은 에러상황에 대한 어떠한 실마리를 제공해주니 에러내용을 잘 읽고 따라해보자.


여기서 설명 >>> http://dukwon.tistory.com/10

'Git' 카테고리의 다른 글

git 트러블 슈팅(trouble shooting)  (0) 2017.02.22
git repository 끼리 merge 하기  (0) 2017.02.16
gitlab 서버 구성하기  (0) 2017.02.08

데스크탑으로 gitlab 서버 구성하기


아마도 이 글을 읽는 사람은 이미 gitlab을 설치하기로 마음먹은 사람들이라 생각하고 쓴다.

가격정책은 https://about.gitlab.com/products/ 에서 확인가능하며

필자는 무료로 쓴다는 가정하에 구성했다.


서버를 구성하려면 다음과 같은 구성요소가 확보 되어야만 한다.

요리를 하다가 '냉장고에 쓰다 남은 안심스테이크' 같은 멘트가 싫어서 미리 적어둬본다. (안심스테이크는 결코 남을 수 없다.)


1. 서버에 할당된 고정IP

2. 64bit OS 설치가능한 안쓰는 PC

3. Ubuntu OS ISO 파일

4. 4GB이상 ubuntu OS를 구울 USB

5. GitLab 설치


나열해보니 간단한거 같다.

실제로 동작까지 걸린건 좀 더 많은 일들이 있었다.




1. 서버에 할당된 고정IP

필자는 gitlab을 회사내부에서만 활용하려고 했다. 그리고 고정IP를 써야만 하는 환경이였다.

유동 IP라도 서버를 끌게 아니라면 왠만하면 괜찮지 않을까? 라고 생각한다.



2. 64bit OS 설치가능한 안쓰는 PC

64bit OS가 잘 돌아가려면 4GB RAM정도는 있어야 한다.

32bit OS의 메모리 주소값 한계가 3GB RAM 까지만이라고 알고있기도 하다.

그리고 쓰는 PC도 안되는건 아니지만 서버를 멀티부팅할게 아니라면 안쓰는 PC를 활용하자.

필자도 사실 서버로의 활용이 불가능할때의 퇴로를 위해

Windows -> Ubuntu 순서로 멀티부팅 가능하게 설치했다.

(* Ubuntu -> Windows 순서로의 멀티부팅 구성은 안되는거라고 해서 도전해보진 않았다.)



3. Ubuntu OS ISO 파일

여러 OS가 있지만 git의 활용법들이 리눅스용으로 검색이 잘되기도 하고 '서버하면 리눅스지' 같은 선입견이 있기도 하다.

이 글을 쓰는 시점에서 Ubuntu Desktop 16.04.1 LTS가 최신이고 필자도 Desktop 16.04.1 LTS를 설치했다.

Ubuntu사이트에서 (https://www.ubuntu.com/download/desktop) 무료로 다운받을 수 있다.


참고1:

Ubuntu Desktop/Server: 필자는 Desktop을 선정했는데

Server는 서버환경에 특화되어 GUI가 없다고 한다.

여차하면 Eclipse, Android Studio를 돌려볼 수 있는 GUI를 바라기도 했고

복잡한 리눅스 명령어 보단 GUI가 쓰기 편하지 않을까란 막연한 기대가 있었다.

(Ref: http://www.morenice.kr/119)

LTS: Long Term Support라고 장기지원을 한단다.(Ref: http://deviantcj.tistory.com/221)


참고2:

현재 Ubuntu 16.04.1 에는 화면 락 상태로 들어가면 키보드가 먹통이 되는 현상이 있다.

(임시방편으로?) 예전 커널로 부팅하면 된다고 한다. (Ref: http://jimnong.tistory.com/600)

지금 찾아보니 설정을 추가하면 된다는데 이미 서버는 켜저있고 사람들은 기다리고 있고.....

확인하기 쉽지 않아서 못했다.



4. 4GB이상 ubuntu OS를 구울 USB

3번에서 ISO파일을 받았다면 USB에 부팅가능하게끔 구우면 된다.

필자는 OS X 라서 디스크 유틸리티를 사용했다.(Ref: http://zerolism.tistory.com/entry/%EB%A7%A5%EC%97%90%EC%84%9C-DMG-%EB%82%98-ISO-%ED%8C%8C%EC%9D%BC-%EB%B6%80%ED%8A%B8-USB-%EB%A1%9C-%EA%B5%BD%EA%B8%B0)

OS X 환경에서 명령어로 굽는 여러 블로그들이 있는데 따라하다가 USB 하나 망가뜨린것 같았다.

혹은 망가져서 잘 안된건지 헷갈리니 그냥 툴을 쓰자.



5. GitLab 설치

GitLab 공식 사이트에 있는 가이드를 따라하면 된다.

* 공식 가이드: https://about.gitlab.com/downloads/#ubuntu1604

필자는 Ubuntu 16.04의 가이드를 따라 했으며 설치하다가 뭐뭐가 안되고 했었는데 그때그때 찾아보고 트러블슈팅 했다.

중요한건 가이드를 따라 완료하고 브라우저에서 '127.0.0.1'로 접속하면 GitLab Sign in/Register 페이지가 뜬다는 것이다.


참고:

Gerrit을 쓸때는 이미 등록된 아이디가 필요했는데

GitLab은 이 서버에 가입하고 로그인 후 사용하면 된다.

이런 구조다 보니 개발자들이 모두 가입해두어야 사용자 관리가 들어간 Project, Repository를 운영할 수 있다.



데스크탑으로 gitlab 서버 구성하기

끝.


'Git' 카테고리의 다른 글

git 트러블 슈팅(trouble shooting)  (0) 2017.02.22
git repository 끼리 merge 하기  (0) 2017.02.16
Git 개념과 사용법  (0) 2017.02.08

+ Recent posts