Programmer Application Note

레이블이 gitlab인 게시물을 표시합니다. 모든 게시물 표시
레이블이 gitlab인 게시물을 표시합니다. 모든 게시물 표시

2016년 6월 7일 화요일

docker gitlab 설치

오후 10:17 Posted by PAN.SPOT , , No comments
$sudo docker search gitlab
$sudo docker pull gitlab/gitlab-ce
$sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 222:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab
  • docker run 시 옵션은 상황에 맞게 조정하도록 함.

image backup

$sudo docker commit gitlab gitlab-backup //컨테이너 이미지로 저장
$sudo docker save gitlab-backup > ~/gitlab.tar // 이미지 파일로 백업
$sudo docker load < ~/gitlab.tar // 백업한 파일로 복구 

참고 : https://hub.docker.com/r/gitlab/gitlab-ce/

2016년 2월 15일 월요일

git ^M 문자 제거 및 diff ^M 문자 표시 제거

오후 6:35 Posted by PAN.SPOT , , No comments


linux 사용자일 경우 아래와 같이 설정 하면 된다.


$ git config --global core.autocrlf input

$ git config --global core.whitespace \ trailing-space,space-before-tab,cr-at-eol


보다 자세한 내용은 아래참조.

(출처 : https://git-scm.com/book/ko/v1/Git%EB%A7%9E%EC%B6%A4-Git-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0)


core.autocrlf

윈도에서 개발하는 동료와 함께 일하면 줄 바꿈(New Line) 문자에 문제가 생긴다. 윈도는 줄 바꿈 문자로 CR(Carriage-Return)과 LF(Line Feed) 문자를 둘 다 사용하지만, Mac과 Linux는 LF 문자만 사용한다. 아무것도 아닌 것 같지만, 크로스 플랫폼 프로젝트에서는 꽤 성가신 문제다.
Git은 커밋할 때 자동으로 CRLF를 LF로 변환해주고 반대로 Checkout할 때 LF를 CRLF로 변환해 주는 기능이 있다. core.autocrlf 설정으로 이 기능을 켤 수 있다. 윈도에서 이 값을 true로 설정하면 Checkout할 때 LF 문자가 CRLR 문자로 변환된다:
$ git config --global core.autocrlf true
줄 바꿈 문자로 LF를 사용하는 Linux와 Mac에서는 Checkout할 때 Git이 LF를 CRLF로 변환할 필요가 없다. 게다가 우연히 CRLF가 들어간 파일이 저장소에 들어 있어도 Git이 알아서 고쳐주면 좋을 것이다.core.autocrlf 값을 input으로 설정하면 커밋할 때만 CRLF를 LF로 변환한다:
$ git config --global core.autocrlf input
이 설정을 이용하면 윈도에서는 CRLF를 사용하고 Mac, Linux, 저장소에서는 LF를 사용할 수 있다.
윈도 플랫폼에서만 개발하면 이 기능이 필요 없다. 이 옵션을 false라고 설정하면 이 기능이 꺼지고 CR 문자도 저장소에도 저장된다:
$ git config --global core.autocrlf false

core.whitespace

Git에는 공백 문자를 다루는 방법으로 네 가지가 미리 정의돼 있다. 두 가지는 기본적으로 켜져 있지만 끌 수 있고 나머지 두 가지는 꺼져 있지만 켤 수 있다.
먼저 기본적으로 켜져 있는 것을 살펴보자. trailing-space는 각 줄 끝에 공백이 있는지 찾고 space-before-tab은 모든 줄 처음에 tab보다 공백이 먼저 나오는지 찾는다.
기본적으로 꺼져 있는 나머지 두 개는 indent-with-non-tab과 cr-at-eol이다. intent-with-non-tab은 tab이 아니라 공백 8자 이상으로 시작하는 줄이 있는지 찾고 cr-at-eol은 줄 끝에 CR 문자가 있어도 괜찮다고 Git에 알리는 것이다.
core.whitespace 옵션으로 이 네 가지 방법을 켜고 끌 수 있다. 설정에서 해당 옵션을 빼버리거나 이름이-로 시작하면 기능이 꺼진다. 예를 들어, 다른 건 다 켜고 cr-at-eol 옵션만 끄려면 아래와 같이 설정한다:
$ git config --global core.whitespace \
    trailing-space,space-before-tab,indent-with-non-tab

2016년 2월 14일 일요일

git 명령어 모음

오후 7:52 Posted by PAN.SPOT , , No comments

git 유용한 명령어 모음

  • 삭제된 파일만 되돌리기
    • git ls-files -d | xargs git checkout --
  • git remote 정보 보기
    • git remote show origin
  • branch 생성과 동시에 checkout 하기
    • git checkout -b <branch>
  • branch 생성과 동시에 checkout 하고 remote와 동기화 하기
    • git checkout -b <branch> origin/<branch>
  • 로컬 브랜치를 원격 브랜치로 push 하기
    • git push origin <branch>
  • 로컬 브랜치를 remote의 master브랜치에 push 하기
    • git push origin <branch>:master
  • 로컬 브랜치 삭제하기
    • git branch -D <branch>
  • 원격 브랜치 삭제하기
    • git push origin :<branch>
    • git push origin :heads/<branch>
  • 원격 브랜치와 로컬브랜치 tracking 정보 설정
    • git branch --set-upstream-to=origin/<branch> <branch>
  • git pull 할 때 3-way merge message 없이 깔끔하게 pull 하기
    • git pull --rebase
  • git pull --rebase 기본 옵션으로 사용하기
    • git config --global pull.rebase true
  • 임시저장 - commit 하지 않고 다른 git 명령어 사용하고 싶을때(pull,push등)
    • git stash //임시저장
    • git stash pop //임시저장 불러오기
  • 마지막 커밋 메세지 수정
    • git commit --amend
  • git tag 목록
    • git tag
  • git tag 생성
    • git tag v1.1 //Lightweight
    • git tag -a v1.1 -m "message"//Annotated
  • git tag push
    • git push origin --tags
  • git tag 삭제
    • git tag -d v1.1
  • 원격 tag 삭제하기
    • git push origin :<tag>
    • git push origin :tags/<tag>
  • merge 충돌 없이 하기
    • git merge -Xours <branch> (작업사본 우선)
    • git merge -Xtheirs <branch> (대상 우선)
  • log option
    • git log OPTION
OPTION
  • -p 각 커밋에 적용된 패치를 보여준다.
  • --stat 각 커밋에서 수정된 파일의 통계정보를 보여준다.
  • --shortstat --stat 명령의 결과 중에서 수정한 파일, 추가된 줄, 삭제된 줄만 보여준다.
  • --name-only 커밋 정보중에서 수정된 파일의 목록만 보여준다.
  • --name-status 수정된 파일의 목록을 보여줄 뿐만 아니라 파일을 추가한것인지, 수정한 것인지, 삭제한 것인지도 보여준다.
  • --abbrev-commit 40자 짜리 SHA-1 체크섬을 전부 보여주는 것이 아니라 처음 몇 자만 보여준다.
  • --relative-date 정확한 시간을 보여주는 것이 아니라 “2 weeks ago”처럼상대적인 형식으로 보여준다.
  • --graph 브랜치와 머지 히스토리 정보까지 아스키 그래프로 보여준다.
  • --pretty 지정한 형식으로 보여준다. 이 옵션에는 oneline, short,full, fuller, format이 있다. format은 원하는 형식으로 출력하고자 할 때 사용한다.
  • format option
    • git log --pretty=format:"OPTION"
FORMAT OPTION
  • %H 커밋 해시
  • %h 짧은 길이 커밋 해시
  • %T 트리 해시
  • %t 짧은 길이 트리 해시
  • %P 부모 해시
  • %p 짧은 길이 부모 해시
  • %an 저자 이름
  • %ae 저자 메일
  • %ad 저자 시각 (형식은 –date= 옵션 참고)
  • %ar 저자 상대적 시각
  • %cn 커미터 이름
  • %ce 커미터 메일
  • %cd 커미터 시각
  • %cr 커미터 상대적 시각
  • %s 요약

2015년 11월 18일 수요일

2015년 10월 18일 일요일

jenkins 설치 및 gitlab 연결 하기

오후 6:40 Posted by PAN.SPOT , , No comments

1. Jenkins 

jenkins는 오픈소스 지속적통합 CI(continuouus intergration) tool

2. Install jenkins Debian packages 
This is the Debian package repository of Jenkins to automate installation and upgrade. To use this repository, first add the key to your system:
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
Then add the following entry in your /etc/apt/sources.list:
deb http://pkg.jenkins-ci.org/debian binary/
Update your local package index, then finally install Jenkins:
sudo apt-get update
sudo apt-get install jenkins
See Wiki for more information, including notes regarding upgrade from Hudson.

※ 만약 8080포트가 사용 중이라면 /etc/default/jenkins에서 HTTP_PORT를 변경하여 재시작.

3. plugin 설치 

jenkins에 접속 하여 gitlab plugin 설치

4. ssh key 설정
sudo su - jenkins
git config --global user.name "jenkins"
git config --global user.email "jenkinse@DOMAIN"
ssh-keygen -t rsa -C "jenkins@DOMAIN"

gitlab의 jenkins에서 사용할 프로젝트의 설정에서 Deploy Keys로 추가하여 권한을 준다.





2015년 7월 21일 화요일

git 계통관계

오후 11:46 Posted by PAN.SPOT , , No comments
^ : 해당 커밋의 부모
^2 : 두번쨰 부모 (즉 부모가 두가지로 나눠져 있을 떄)
~: 해당 커밋의 부모
~2 : 해당 커밋의 부모의 부모

HEAD^^ = HEAD~2


2015년 4월 22일 수요일

git 삭제된 파일만 되돌리기

오후 4:59 Posted by PAN.SPOT , , No comments
svn을 쓰다가 git으로 넘어온 사람들을 보면 간혹 svn update와 같이 동작 하는것을 원하는 사람들이 있다.
삭제된 파일만 되돌리기를 하고 싶은경우 이다.
즉 여러개의 파일이 있을 때 수정된 파일을 제외 하고 삭제된 파일만 다시 reset 하고 싶을경우 이다.
먼저 UNDO 하는 방법을 알아보자.
1.모든 파일을 되돌릴 때
$git reset --hard HEAD
2.특정 파일만 되돌릴때
$git checkout -- file
2번을 이용하면 특정파일만 되돌릴 수 있으나 파일을 일일이 기입하는 것은 여간 귀찮은일이 아니다. 그래서 돌리고 싶은 파일만 삭제한 후 아래와 같이 입력한다.
$git ls-files -d | xargs git checkout --
파이프와 xargs를 이용한 방법으로 명령어를 해석해보면 다음과 같다.
- git ls-files -d 는 삭제된 파일만 출력한다.
- 파이프라인은 왼쪽에 있는 명령어의 출력을 오른쪽 명령의 입력으로 전달한다.
- 여기에서 xargs를 이용하면 git ls-files -d의 출력 결과를 checkout --의 인자로 전달하여 사용할 수 잇다.
자세한 사항을 알고 싶을경우 xargs에서 -t 옵션을 넣어서 확인해 본다.

2015년 4월 21일 화요일

Gitlab error “fatal: The remote end hung up unexpectedly”

오후 7:00 Posted by PAN.SPOT , No comments
최초 데이터를 push 할 때
"fatal: The remote end hung up unexpectedly"가 난다면?

1.chunked boad size가 작아서 error 나는지 log를 확인 한다.
$ su -
$ vi /var/opt/gitlab/nginx/logs/gitlab_error.log
[error] 23946#0: *885 client intended to send too large chunked body: 524304336 bytes, client: xxxx, server: xxxx
2.gitlab의 nginx max body size를 변경한다.
$ vi /etc/gitlab/gitlab.rb
nginx['client_max_body_size'] = 'XXXm' // XXXmbyte
$ sudo gitlab-ctl reconfigure
3. 로컬 저장소에서 git push 가 제대로 동작하는지 확인
4. 나의 경우에는 너무 큰용량(약 8기가) 이였고, http 프로토롤을 사용 하였기 때문에 git push가 더 이상 error는 나지 않는데 멈춰 있는 현상이 발생하였다. 그래서 ssh프로토콜로 변경 하여  push를 다시 시도 하여서 성공함. http 프로토콜은 느려서 대용량에는 적합하지 않은듯 하다.

참고 ssh 공개키 생성 하여 ssh로 접속하기
$ssh-keygen -t rsa -C "gltlab mail 주소"
$sudo chmod -R 700 ~/.ssh
$cat /home/계정/.ssh/id_rsa.pub
나오는 내용을 복사 하여 gitlab profile의 ssh key 등록에 추가.

만약 ssh포트도 변경해야 한다면?
$ vi /etc/gitlab/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 2222 // 22 port -> 2222 port
$ sudo gitlab-ctl reconfigure



git ignore 파일 쉽게 만들기

오후 5:45 Posted by PAN.SPOT , , No comments
리눅스 프로젝트를 하게 되면 make시에 각종 object 파일들이 생성되거나 변경 된다. 이 때 git에 적용하지 않을려면 .gitignore 파일에 무시할 폴더나 파일을 기록 하면 되는데 폴더가 많으면 쉽지 않다. 그렇때 아래의 커맨드를 이용해보자.

1. 최초 프로젝트를 make clean 한다.
$make clean 
2. 프로젝트를 git server에 push
$git add -A
$git push
3. 프로젝트를 컴파일 한다.
$make
4. git status를 하면 make시에 생성되는 파일들이 나온다.

5. make 후 생성된 모든 파일들을 .gitignore에 저장한다.
$git status --porcelain | grep '^??' | cut -c4- >>.gitignore
위의 커맨드를 분석하자면, 
git status --porcelain는 svn status 처럼 앞부분에 현재 상태를 출력된다. 
grep '^??'는 첫 단어가 ?? 으로 시작하는 untracked되는 파일들만 grep 한다.
cut -c4 는 앞에 ??를 삭제 하고 .gitignore에 저장하기 위함이다.

6.만약 추가되는 파일 이외에 수정된 파일도 제외 하려면
$git status --porcelain | grep '^ M' | cut -c4- >>.gitignore
7.수정된 파일들은 이미 버전관리 대상이기 때문에 버전관리 대상에서 지워준다.
$git rm -r --cached 제외할파일명
이때 파일은 그대로 남아 있다.
8.버전관리 대상에서 삭제한 파일들 커밋하기
$git commit -m 'delete file'
9.상태확인
$git status





2015년 4월 13일 월요일

gitlab backup

오후 11:17 Posted by PAN.SPOT , No comments

#gitlab backup
$sudo gitlab-rake gitlab:backup:create
$sudo ls /var/opt/gitlab/backups

#backup 위치 변경
$sudo vi /etc/gitlab/gitlab.rb
gitlab_rails['backup_path'] = '변경될 위치'
$sudo gitlab-ctl reconfigure

# limit backup lifetime to 7 days - 604800 seconds
$sudo vi /etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 604800
$sudo gitlab-ctl reconfigure

# restoring backup
$sudo cp 1393513186_gitlab_backup.tar /var/opt/gitlab/backups/
# Stop processes that are connected to the database
$sudo gitlab-ctl stop unicorn
$sudo gitlab-ctl stop sidekiq
# This command will overwrite the contents of your GitLab database!
$sudo gitlab-rake gitlab:backup:restore BACKUP=1393513186
# Start GitLab
$sudo gitlab-ctl start
# Create satellites
$sudo gitlab-rake gitlab:satellites:create
# Check GitLab
$sudo gitlab-rake gitlab:check SANITIZE=true

#scheduling a backup
$crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

gitlab git-data 위치 변경

오후 11:11 Posted by PAN.SPOT , No comments
git-data의 위치를 A서버에서 B서버로 변경 하려면??

A 서버 = gitlab server
B 서버 = data server (gitlab이 설치되어 있지않은 data server)

1. A서버의 git 계정의 uid와gid 정보를 가져옴.(uid:999,gid:999)
2. B서버에 git 계정을 추가
$sudo adduser --uid 999 git (A서버와 uid,gid를 일치 시킴 일치 시키지 않으면 permission denied 에러에 빠져 헤어나오지 못함.)
3. B서버(data가 저장될) 설정
$sudo mkdir git-data
$sudo chown git:git git-data/
4. B서버 삼바설정
$$sudo gitlab-ctl stop
$sudo system-config-samba (git-data 공유 설정)
$sudo service smbd restart
5. A서버(gitlab이 설치된) 설정
$sudo apt-get install cifs-utils
$sudo mkdir /mnt/git-data
$sudo mount -t cifs -o username=git,password=xxx //B서버주소/git-data /mnt/git-data
※A서버와 B서버의 git계정의 uid,gid를 동일 하게 변경 하였기 때문에 mount를 하면 A서버에도 git-data폴더는 git:git으로 표시된다. 만약 동일하지 않으면 B서버의 git계정의 (uid,gid)가 표기 되며, 이 후 작업 과정에서 permission denied 에러에 빠지게 될 것이다.
$sudo rsync -av /var/opt/gitlab/git-data/repositories /mnt/git-data/
$sudo vi /etc/gitlab/gitlab.rb
  git_data_dir '/mnt/git-data'
$sudo gitlab-ctl reconfigure
6.gitlab-satellites이 생성되었는지 확인
$sudo ls git-data/
7.gitlab 재시작
$sudo gitlab-ctl start
8.fstab 등록
$sudo vi /etc/fstab
//B서버주소/git-data    /mnt/git-data   cifs    username=git,password=xxxx  0   0
9.A서버 재부팅
$sudo reboot



2015년 4월 12일 일요일

gitlab 서버 구축

오후 5:52 Posted by PAN.SPOT , No comments
ubuntu 14.04 버전 (64bit)

1. Install and configure the necessary dependencies
$sudo apt-get install openssh-server
$sudo apt-get install postfix
2. Download the Omnibus package and install everything
$wget https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab_7.9.2-omnibus-1_amd64.deb
$sudo dpkg -i gitlab_7.9.2-omnibus-1_amd64.deb
3. Configure and start GitLab
$sudo gitlab-ctl reconfigure
4. Browse to the hostname and login
Username: root
Password: 5iveL!fe

nginx web포트 변경
1. 8000 포트로 변경
$sudo vi /etc/gitlab/gitlab.rb
external_url 'http://localhost:8000'

※ 설치 후 기존 80포트는 apaches 서버로 사용 되고 있었기 때문에 포트를 변경할 필요가 있었다. 이때 생각 없이 8080포트로 변경 후 사용 하였을때, 아래와 같은 에러가 발생한다.
502 GitLab is not responding.
이유는 omnibus gitlab readme에서 확인 할 수 있다.
By default, Unicorn listens at TCP address 127.0.0.1:8080. Nginx listens on port 80 (HTTP) and/or 443 (HTTPS) on all interfaces.
그래서 포트를 8000으로 변경 해서 사용함.