오랜만에 git에 대해서 포스팅을 해야하는데,
너무 간만에 하려다보니 감이 돌아오질 않아서 작성하는데 참 오래걸렸다.

(심지어 이미 포스팅한 내용을 중복해서 작성하던 것을 거의 다 작성하고서야 알아서 결국 다 지웠다는 ㅠㅠ)

---[추가]----------------------------------------------------------------------------------------------

어제 후배 한 명이 git tag와 관련하여 물어본 내용이 있는데,
그에 대한 해답을 찾으면서 추가로 알아본 내용에 대해서 여기에 추가를 했습니다~^^ (thanks 열)
-------------------------------------------------------------------------------------------------------

프로젝트를 진행하던 중 배포용 버전을 만들거나 할 때 별도로 표시하고 싶을 때가 있다.
그럴 때 사용하는 것이 바로 Tag 이다.



1. Tag's Type

   - Git에서 제공해주는 Tag 종류는 두 가지가 있다.
      ▷ Lightweight Tag
      ▷ Annotated Tag

   - Lightweight Tag : 특정 commit에 대한 포인터
   - Annotated Tag   : tag를 만든 사람의 이름/이메일, 생성일자, 메세지, 서명 등을 모두 저장

   - 일반적인 경우에는 Lightweight Tag를 사용하는 것을 추천



2. Lightweight Tag

   - 정말 가볍게 편하게 사용할 수 있는 방식이다.
   - 앞에서 말한 바와 같이 특정 commit 시점에 대해서 책갈피를 한 것으로만 여기면 된다.


 $ git tag v0.1

   - Lightweight tag는 그냥 'git tag' 뒤에 이름만 붙여주면 된다.
   - 정말 단순히 특정 commit에 대한 포인터이기 때문에 "git show"로  정보 요청을 하면 commit 정보만 보여준다.

   - 그런데, 지금 시점의 commit에 대해서 tagging을 했는데, 이전 commit에 대해서는 어떻게 해야할까?


 $ git log --pretty=oneline
 $ git tag v0.0.1 51825b

   - 예전 commit을 지칭하기 위해서는 해당 commit의 hash code를 알아야 하니 git log 로 확인을 하자
   - 그리고는 "git tag 태그명" 뒤에 원하는 commit의 hash code를 적어주면 된다.
   - hash code는 다 적어줄 필요 없이 다른 code와 구분될 정도만 적어주면 된다.



3. Annotated Tag

   - 좀 뭔가 있어 보이는, 그러나 좀 무거워 보이는 Annotated Tag에 대해서 살펴보자.


 $ git tag -a v0.2 -m "Annotated tag test"

   - 'lightweight tag'와 다른 점은 [ -a ] 옵션을 붙여야 한다는 것이다.
   - 더불어 [ -m ] 옵션을 이용하여 코멘트도 추가할 수 있다.

   - 현재가 아닌 지난 commit에 대해서 tagging을 하는 방법은 앞의 lightweight tag와 같다.
   - 당연히 [ -a ] 옵션은 추가해야 한다.

   - 이 외에 GPG 키를 적용하는 방법 등도 있지만, 이는 별도의 과제로 남겨놓겠다.
     (절대로 귀찮아서..... 지금 졸려서.... 그러는 것...... 맞다.....^^ 지금 코감기 걸려서 체력도 좀...)



4. Tag Push

   - 여기서 궁금증 하나! 이렇게 tagging을 한 것은 서버로 push가 될까?


   - tagging 작업을 했는데, 'git push'를 하면 아무 것도 올라가지 않는다.
   - 으응 ?!

   - tag 내역을 상위 repository로 넣기 위해서는 별도로 선택해서 push를 해줘야 한다.


 $ git remote
 $ git push origin v0.1

   - 위와 같은 방식으로 지정해서 push를 해주면 쭈우욱 올라간다

   - 그런데, origin 같은 것을 지정하기 귀찮은데... 소스코드는 그냥 [ git push ]를 하면 되는데...


 $ git push v0.2

   - 위와 같이 하면 에러가 발생을 한다. 이 부분은 그냥 시키는 대로 해야한다.

   - 더불어 하나씩 push 하기 번거로워서 몽창 넣고 싶으면 [ git push origin --tags ] 와 같이 사용하면 된다.


간만에 Git 관련 포스팅을 하려니 테스팅 환경도 다시 좀 맞춰야 하고,
흐름도 왠지 끊긴 것 같고, 거기에 코감기로 계속 코를 먹느라 배는 부르고....
내일 주말 출근해야하는데 시간은 1시 30분을 넘어가고 있고........으흐흐흐....

요즘 맨날 핑계만 대는 것 같네요... 제 글을 읽으시는 분들 응원 좀 해주시길... ㅠㅠ



---[추가]----------------------------------------------------------------------------------------------
※ 나중에 추가를 하다보니 스크린샷이 위와 이어지지 않을 수 있습니다. 양해 바랍니다.

5. refs

     - tag를 push하게 되면 remote repository에 어떻게 저장이 될까?
     - 일단, tag를 만들어서 remote repository에 넣어보자.


$ git tag -a 'v0.1' -m 'tag 테스트'
$ git push origin --tags

     - 이렇게 서버로 밀어넣은 tag는 어떤 모습으로 저장이 되어있을까?


     - remote repository 밑의 디렉토리 중 [ refs/tags ] 밑에 차곡차곡 예쁘게 정리되어 파일로 저장이 되어있다.
     - [ refs/tags/v0.1 ]과 같은 모습으로 해쉬값을 갖고 있는 텍스트 파일이 해당 tag의 저장된 모습이다.

 

6. tag 삭제

     - 만들었으면 지우고 싶을 때도 있다.
     - local에서 지우는 것은 다음과 같다.


$ git tag -d v0.1

     - 간단하게 local에 저장된 tag를 삭제할 수 있다.
     - 하지만, 이렇게 local에서 삭제를 했다고 하여도 remote repository에 있는 것을 지우는 것은 아니다.


$ git push origin :tags/v0.1

     - 위와 같이 branch와 같은 방식으로 삭제할 수 있다.




7. tag's hierarchy

     - tag를 계층적으로 관리할 수는 없을까?
     - build를 위한 tag와 release를 위한 tag를 구분해서 예쁘게 정리를 하고 싶다면 디렉토리 구조를 이용하면 된다.


$ git tag build/king.v0.1/20120810
$ git push origin --tags

     - tag 이름을 위와 같이 디렉토리 구조로 명시해버리면 된다.
     - 생긴 것만 디렉토리 구조가 아니다.


     - remote repository에서 tag가 어떻게 저장되어있는지 확인해보면 실제로 디렉토리 구조로 tag가 위치하고 있다.

     - [ refs/tags/build/king.v0.1/20120810 ]

     - build를 위한 tag이고 king.v0.1 버전 중 20120810 빌드넘버의 빌드라는 의미로 관리할 수 있는 것이다.

     - 구글에서도 이와 같은 방법으로 tagging을 하고 있다. 그렇다고 이 방법이 꼭 모든 상황에서 좋은 것은 아니다!!!



8. usage

     - 지금까지 이것 저것 tag와 관련해서 많이 알아보았지만,
     - 이렇게 설정한 tag를 어떻게 사용하면 되는지에 대해서는 알아보지 않았다.


$ git checkout build/king.v0.1/20120810

     - tag를 사용하기 위한 checkout을 하는 방법을 구글링을 해보면 일반적으로 위와 같이 알려준다.
     - [ git checkout 태그명 ]
     - 본래 [ git checkout 브랜치명 ]과 같이 사용하지만, 같은 형식으로 tag도 사용할 수가 있다고 나온다.

     - 그런데, 위 스크린샷을 보면 알겠지만 branch 상황이 묘하게 되어있다.
     - 애초 작업하던 master branch가 아닌 아무 것도 아닌 branch에 위치하고 있는 것이다.


$ git checkout -b 20120810 build/king.v0.1/20120810

     - 위와 같이 새로 branch를 만들어주면서 그 곳에서 지정한 tag의 snapshot으로 작업을 하면 된다.

     - 예전에는 바로 checkout이 되었지만,
     - 최근 버전의 git에서는 별도의 branch를 만들면서 tag를 사용해야 하는 것으로 보인다.

     - 정확한 사실은 모르겠다. 하지만, 제대로 사용하기 위해서는 바로 위와 같이 별도로 branch를 생성하면 된다.


이 정도면 git에서의 tag에 대한 거의 대부분의 내용은 다 나온 것이 아닐까 생각해본다.....^^

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git 1.8.1.3 Release  (0) 2013.02.19
Git 명령어 자동 완성 기능 (Source 설치 時)  (0) 2012.08.20
git blame (-e 옵션)  (0) 2012.07.29
git man  (1) 2012.07.25
Gitweb + Apache2  (2) 2012.07.16

Ubuntu를 사용하면서 가장 중요한 것 중 하나가 바로 [ apt-get ] 명령이다.

그런데, 회사에서 Ubuntu를 사용하려고 하면 종종 부딪치는 문제가 바로 proxy이다.
보안을 위해서 또한 여러가지 이유로 어쩔 수 없는 proxy이지만...
사용자 입장에서는 정말 엄청 많이 번거로운 놈이 아닐 수 없다.


Ubuntu에서 기본 네트웍 설정에서 proxy를 설정해주었는데도
[ apt-get ] 명령을 시도하면 repository에 연결이 안되는 경우가 있다.

이는 [ apt-get ]에서 별도로 proxy 설정을 필요로 하기 때문이다.

$ sudo nano /etc/apt/apt.conf

Acquire::http::proxy "http://xxx.xxx.xxx.xxx:8080/";
Acquire::ftp::proxy "ftp://xxx.xxx.xxx.xxx:8080/";
Acquire::https::proxy "https://xxx.xxx.xxx.xxx:8080/";

[ /etc/apt/apt.conf ] 파일이 기존에 없을 것이다(물론 상황에 따라 이미 있는 분도 계시겠지만... 일반적으로).
새로 만들어서 위와 같이 proxy 설정을 해주면.... 슈루룩~

집에서는 당연히 proxy 환경이 아니고... 일부러 proxy 환경을 만들어놓기는 번거롭고...
회사에서는 보안문제로 스크린샷을 찍을 수 없고...
그래서 샘플 화면은 없습니다~!!! ^^


proxy 환경에서도 아름다운 ubuntu 생활을 합시다~ ^^
반응형

SSH 접속을 하게 되면 초기 화면이 좀 썰렁하게 나오곤 한다.

그래서 종종 접속 화면을 꾸미기도 하는데... 그냥 꾸미는 것이 아니라 시스템 정보가 나오면 어떨까?


1. 접속 화면?

     - ssh 터미널 접속을 하게 되면 Ubuntu에서 보여주는 기본 내용이나 공지(?)들이 나오곤 한다.




2. landscape

     - Ubuntu에서는 접속 화면에 시스템 정보를 보여주는 용도의 패키지를 제공해준다.


$ sudo apt-get install landscape-common


     - 이렇게만 하면 끝이다~!!!



3. 접속 화면

     - 아래와 같이 접속화면에 기본적인 시스템 정보가 나타난다.


     - 뭔가 있어보이는 화면이 너무나 손쉽게 설치를 할 수 있다!!!

 
반응형

'OS > Ubuntu' 카테고리의 다른 글

Ubuntu 시간 맞추기 (ntpdate)  (0) 2012.08.11
Ubuntu apt-get proxy  (0) 2012.08.10
Ubuntu에서 distcc 사용하기  (0) 2012.06.30
우분투 버전 확인 (lsb_release -a)  (0) 2012.06.30
Ubuntu in PowerPC (Mac Mini - A1103) - Wireless  (4) 2012.06.17

올림픽의 열기로 그리고 미친 날씨의 후끈한 열기로 정신 못차리고 있는 사이에
VirtualBox의 새로운 버전이 등장했다!!!

4.1.x 버전을 벗어난 4.2.x 버전으로 돌입하기 위한 Beta 버전이 드디어 등장을 한 것이다.

     - https://forums.virtualbox.org/viewtopic.php?f=15&t=50763


중요한 것은 버그 픽스나 새로운 기능 추가로 인한 릴리스가 아니라
테스트를 위한 베타 버전이다.

그래서 설치할 때에도 자꾸 우린 이상 증세에 대해서 책임 없다라고 강조하고 있고,
설치 후 실행할 때에도 자꾸 경고를 한다.


그리고.... 역시나... 이런~
필자의 경우에 베타 버전을 설치하고 기존 버전(4.1.18)에서 잘 사용하고 있던 Ubuntu를 구동하려고 하니...
된장할~! 우이씨~!!!

블루스크린이 짜자잔~ 재부팅 후 다시 실행해도 또 다시 블루스크린이 짜자잔~
메모리 프로텍션이 어찌고 저찌고 해서 예전 XP SP2 였을 때 있어던 문제인가 싶어서
바이오스에 들어가 그 메모리 프로텍션 기능을 다시 켜주고 부팅을 하고 다시 실행해도 여전히 블루스크린이 짜자잔~

베타는 베타인가 보다.... ㅠㅠ

그냥 다시 4.1.18 버전으로 복귀~!!!
그리고 실행을 하니.... 이쁜 Ubuntu가 짜자잔~!!!

베타 2가 나오면 그 때 다시 테스트 해보던지 아니면 베타 딱지를 벗어나면 그 때에 가서 다시 하던지 해야겠다~!!!

반응형

git으로 소스 관리를 하다보면 가끔(실은 종종 ^^) 책임 추궁을 할 일이 발생한다.

빌드를 했는데 에러가 발생했다면,
그 소스파일의 그 라인을 누가 작성한 것인지 알고 싶어지게 된다.

그래야 그 사람에게 그 에러를 해결하라고 말할 수 있기 때문이다.


개발자 입장에서는 조금 부정적인 느낌이 드는 Work-Flow이고,
마음에 들지 않는 명령어이기도 하다. (blame : ...을 탓하다)


하지만, 분명 필요한 명령이기도 하다.



1. General Use

     - 어느 소스코드의 몇 번째 라인을 누가 작성했는지 알고 싶을 때엔 아래와 같이 명령하면 된다.


$ cd /srv/workspace/myrepo
$ git blame -L 1,1 ./readme.txt

     - myrepo라는 repository에 있는 readme.txt 파일의 11번째 라인을 누가 작업했는지 알려달라는 의미이다.

     - [ -L ] 옵션 뒤에는 알고 싶은 라인의 시작과 끝을 명시해줘야 하는데,
       특정 1줄만 알고 싶을 경우에는 위와 같이 같은 숫자를 적어주면 된다.



2. Advanced Use

     - [ git blame --help ] 명령을 해보면 친절한 설명을 볼 수 있다.
     - 혹여라도 도움말이 나오지 않으면, 아래 포스팅을 참조하면 된다.
          ▷ http://whatwant.tistory.com/458

     - 여기에서 살펴볼 것은 [ -e ] 옵션이다.

     - 필자가 최근에 진행하고 있는 업무 중 하나가
     - 빌드 자동화 시스템에 붙여서 빌드 에러가 발생하는 경우 해당 내용의 작성자를 찾은 다음
     - 해당 개발자에게 메일로 에러 내역을 발송하도록 하고자 하는 것이다.

     - 그러기 위해서는 해당 소스 라인의 개발자의 이메일 주소를 잡아내야하는데,
     - 위 스크린샷에서 보는 바와 같이 기본적으로는 개발자의 이름만 보여준다.

     - 그래서 필요한 것이 [ -e ] 옵션이다.


     - 그런데, [ -e ] 옵션이 없는 경우가 있다.
     - 현재 패키지 설치로 했을 경우가 그렇다.
     - 소스 설치로 했을 경우에는 가뿐하게 [ -e ] 옵션을 사용할 수 있다.


가볍게 여기까지~

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git 명령어 자동 완성 기능 (Source 설치 時)  (0) 2012.08.20
Git's Tag - git tag  (8) 2012.08.10
git man  (1) 2012.07.25
Gitweb + Apache2  (2) 2012.07.16
Code Review - Gerrit (Install)  (12) 2012.07.07

네이버 스포츠를 통해 프로야구 생중계를 보거나 할 때에 특정 윈도우를 항상 위로 만들고 싶을 때가 있다.
곰플레이어 같은 경우의 재생중 항상 위로 기능이 필요한 것이다.

이럴 때에 사용하기 괜찮은 유틸리티를 찾다가 발견한 하나~

     - http://www.abstractpath.com/powermenu/



1. License

     - 영국 런던에 살고 있는 개인개발자 'tumtumtum'이 개발한 것으로 보인다.
     - free 버전이지만, donation을 해주면.... ^^


2. Install

     - 홈페이지에서 다운로드 받아서 설치를 진행하면 된다.


     - 그런데, 위의 Download Installer 를 클릭하면 되는데, 확장자가 제대로 되어있지 않다.
     - 다운로드 받은 후에 확장자를 ".exe"를 붙인 뒤에 실행하면 설치가 잘 진행이 된다.
     - 정말 작은 용량이다.


3. Use

     - 설치가 되면 아래와 같이 오른쪽 버튼 메뉴에 새로운 기능이 생겨있다.


     - Priority를 통해서 실행 우선순위를 변경해줄 수도 있고,
     - Transparency를 통해서 해당 창의 투명도를 변경할 수도 있다.

     - Transparency를 50% 설정해주면 아래와 같이 잘 반영이 된다.


     - 본래의 목표인 항상 위 기능을 위해서는 [ Always On Top ]을 설정하면 된다.


     - 위와 같이 포커스를 안주어도 계속 위에 위치하게 된다.



정말 적은 용량의 가벼운 유틸리티를 통해서 정말 편리한 윈도우즈 생활을 할 수 있다!!!


그런데, 이 유틸리티 설치하고도 왠지 좀 불편해서 그냥 모니터 하나 더 연결해서 듀얼로 했다.
확실히 듀얼이 100배는 더 좋다... ^^

하지만, 이 유틸리티는 계속 설치해놓고 사용할만한 가치는 있어보인다~!!!

반응형

'컴퓨팅 팁' 카테고리의 다른 글

보기 싫은 윈도우 업데이트 숨기기  (0) 2014.06.08
일본어 입력하기 (Windows 7)  (0) 2013.12.01
공개 소프트웨어 사용하기  (0) 2010.06.05
팟캐스트를 듣고 봅시다  (3) 2009.01.29
PHP in Windows-XP  (0) 2008.06.09

Redmine에서 정말 유용하고 편하게 잘 사용하고 있는 기능 중 하나 "파일"
그런데, 웹으로 파일을 업로드를 하는 것이다보니, 용량(size)과 관련하여 이슈가 있다.


파일 업로드를 하다가 아래와 같은 에러메시지가 나올 때가 있다.


설정값보다 큰 사이즈의 파일을 업로드하고자 하면 발생하는 에러다.

Redmine에서는 아래와 같이 설정을 통해 파일의 용량 제한을 할 수 있다.


하지만, 이 설정은 웹서버의 설정 이후의 제한이다.
즉, Redmine에서 제아무리 용량 제한을 크게 설정했다고 하여도 nginx에서의 설정보다 큰 용량 업로드는 될 수 없다.


$ sudo nano /opt/nginx/conf/nginx.conf

...
client_max_body_size 400M;
client_body_buffer_size 128k;
...

$ sudo /etc/init.d/nginx restart

이렇게 설정을 하면
파일 용량과 관련하여 이슈는 문제없이 해결할 수 있을 것이다~!!

반응형

'Development Tools > Redmine' 카테고리의 다른 글

Redmine 2.3.0 install in Ubuntu  (6) 2013.03.23
Redmine 2.1.0 install in Ubuntu  (0) 2012.09.29
Ubuntu apt-get repository proxy  (1) 2012.07.21
Redmine - git repository 연결하기  (1) 2012.07.21
Redmine 1.4.4 install in Ubuntu  (0) 2012.07.14

도움말을 보려고 하는데 다음과 같이 에러가 발생한다면, 다음의 소스코드 설치 과정을 다시 한 번 살펴보기 바란다.


     - [005] Install GIt (in Ubuntu) : http://whatwant.tistory.com/289


이제 [ git blame --help ] 해보면...


짜잔~

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Git's Tag - git tag  (8) 2012.08.10
git blame (-e 옵션)  (0) 2012.07.29
Gitweb + Apache2  (2) 2012.07.16
Code Review - Gerrit (Install)  (12) 2012.07.07
[004] 당신은 Git을 어떻게 읽나요?  (1) 2012.06.28

+ Recent posts