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

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

Android에 OpenCV 올리기 - 시작



OpenCV(Computer Vision)라는 오픈소스 기반 라이브러리가 있다.

글자그대로 Computer Vision 관련된 라이브러리이다.

영상에 대한 분석, 인식관련된 일을 Android에서 하자는 생각에서 시작해본다.


시작과 동시에 해야할 일

1. OpenCV 사이트에서 Android용 SDK 다운로드: http://opencv.org/

- 현재 Window, Linux/Mac, Android 그리고 iOS용이 별도로 있다.



2. 다운받은 OpenCV SDK를 압축파일을 열어 구성을 확인한다.

파일이 생각보다 많아서 막막하다.



3. README.android를 읽어본다.

 파일 안에는 링크 http://opencv.org/platforms/android.html 만 있고

 해당 페이지의 내용을 요약하면 다음과 같다.


Android는 데스크탑과 다르지만 C++을 재사용할 수 있고.... Bla bla~

...

OpenCv4Android는 Java API를 제공하고 세가지 가이드가 있다.

1. 초기 셋업 참고: http://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/android_dev_intro.html


2. 샘플들: http://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/O4A_SDK.html


3. JNI로 C++를 사용: http://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html


온라인 자료들... Bla bla~




그럼 우선 앱 개발을 위한 초기셋업부터 시작해보자.

+ Recent posts