반응형
728x90
반응형

git 클라이언트를 이용하여 pull 땡기다보면 별의 별 에러들을 다 본다..

pull, commit, push, merge 가 잘 이루어질 경우에는 그 쾌감은 이루 말할 수 없다.
하지만 이와 반대로, conflict를 제외한 "요상한" 에러들이 날 경우에는 그 빡침 또한 이루 말할 수 없다...

이번 포스팅에서는 그 "요상한" 에러들 중 하나를 다룰 것이다..

[에러]

git error;;

There are no candidates for merging among the refs that you just fetched.
Generally this means that you provided a wildcard refspec which had no
matches on the remote end.

git pull 시, 위와 같은 에러가 난다. 그래서 구글링 해봤을 때, 가장 유력했던 글은 아래 링크와 같다.

https://stackoverflow.com/questions/13799108/git-wildcard-refspec-with-no-match-on-remote-when-pulling

 

Git: "wildcard refspec" with no match on remote, when pulling

I have setup a new Git repository at cloufforge and have some unusual problems. When I do a git pull origin master From https://dndigital.git.cloudforge.com/project * branch master ...

stackoverflow.com

위 링크의 내용 중 답변에 해당하는 부분들을 간단히 정리해보면, 
    1. Having different versions of Git clients could become problematic it seems
        -> push 한 곳과 pull 한 곳의 git client 버전이 다른 경우
    2. destination folder being out of space.
        -> git pull 하는 곳의 폴더의 용량이 가득 차서 부족한 경우
    3. Happened to me when I tried to pull from mounted (read sshfs) directory
        -> 마운트된 외부 디렉토리에서 git pull 을 때리는 경우
    4. .git/config 설정 오류

실제로 가능성이 있던 오류들을 정리해보았다.

내 경우에는 3번과 같다.

사진

위와 같은 사진과 같은 환경에서 작업을 한다.

  • 윈도우 os에서 vm 환경으로 우분투 os를 올리고
  • vm 우분투 os 내에서 Apache2 환경을 구성하고
  • Apache2에서 서비스 할 웹 코드를 윈도우 os의 폴더로 마운트하여 사용(Shared Folders)

이런 상태에서 git pull 명령을 ssh 접속하여 우분투 os에서 git 작업을 하니까 발생하는 에러였다.

[해결 방법]

위와 같이 윈도우에서 직접적으로 git 작업을 진행하니까 감쪽 같이 에러가 사라졌다!

728x90
반응형
728x90
반응형

포트 변경 및 서비스 실행 / 중단을 위한 서비스 등록, 재부팅 시 자동 시작 

지난 포스팅(https://typingdog.tistory.com/99)에서 SVN 서버 설치 및 구동 방법을 다루었다. 이번 포스팅에서는 시스템 부팅 시 자동 재 실행, 포트 변경 등을 정리해보았다.1. 서비스 등록자동 재 실행 및 systemctl 등을 통해 명령하기 위해서는 서비스에 등록을 해야한다. 

먼저, svn 을 자동으로 실행하는 데몬을 만든다.

sudo vim /etc/rc.local

# Subversion
svnserve -d -r /svn/svnrepo
위 내용을 rc.local 에 기록하고 저장.

/etc/init.d 디렉토리 내에 svnserve 라는 스크립트를 생성 후, 

아래와 같은 내용을 기록한다. 단,

DAEMON_ARGS="-d -r /svn/svnrepo --listen-port 5012" 

이 부분만 자신에게 맞게 수정한다.

-------------------------------------------

#! /bin/sh
### BEGIN INIT INFO
# Provides:          svnserve
# Required-Start:    $local_fs $syslog $remote_fs
# Required-Stop:     $local_fs $syslog $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start svnserve
### END INIT INFO

# Author: Michal Wojciechowski <odyniec@odyniec.net>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="svnserve"
NAME=svnserve
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-d -r /svn/svnrepo --listen-port 5012"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "$DAEMON" ] || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start()
{
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
                        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                                $DAEMON_ARGS \
                                || return 2
                        }

                do_stop()
                {
                        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
                        RETVAL="$?"
                        [ "$RETVAL" = 2 ] && return 2
                        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
                        [ "$?" = 2 ] && return 2
                        rm -f $PIDFILE
                        return "$RETVAL"
                }

        case "$1" in
                start)
                        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
                        do_start
                        case "$?" in
                                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
                        esac
                        ;;
                stop)
                        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
                        do_stop
                        case "$?" in
                                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
                        esac
                        ;;
                restart|force-reload)
                        log_daemon_msg "Restarting $DESC" "$NAME"
                        do_stop
                        case "$?" in
                                0|1)
                                        do_start
                                        case "$?" in
                                                0) log_end_msg 0 ;;
                                                1) log_end_msg 1 ;; # Old process is still running
                                                *) log_end_msg 1 ;; # Failed to start
                                        esac
                                        ;;
                                *)
                                        # Failed to stop
                                        log_end_msg 1
                                        ;;
                        esac
                        ;;
                *)
                        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
                        exit 3
                        ;;
        esac

        exit 0

-------------------------------------------

저장이 완료되었다면, 다음 명령을 통해서 실행 권한을 설정한다.

sudo chmod u+x /etc/init.d/svnserve

서비스를 등록한다.

sudo update-rc.d svnserve defaults

실행한다.

sudo service svnserve start

리부트 한 뒤, 아래 명령을 통해서 실행 중인지 확인해보고 실제 svn 브라우저를 통해서도 확인해본다.

netstat -tnl

728x90
반응형
728x90
반응형

전에 다니던 회사에서는 SVN을 전통적으로(?) 사용을 하고 있었다. 그래서 정말 뜻 깊은 경험을 하게 되었다. 그래서 로컬에서 한 번 깔아보려고 한다.

1. subversion 설치

sudo apt install subversion

이미 깔린 광경을 목격할 수 있다.

2. 저장소 설정

SVN 서버를 운영하기 위해서는 변경 이력들 및 svn 관련 데이터를 저장할 저장소를 만들어야 한다.

나는 루트 디렉토리(/) 아래에 svn 이라는 디렉토리를 저장소로 사용할 것이다.

 sudo mkdir /svn

sudo svnadmin create svnrepo

위의 명령어를 작성하면 여러 설정 파일들이 생성되는데 아래의 경로로 들어가면 svnserver.conf 파일이 존재하는데 이 파일을 통해 설정을 진행할 예정이다.

노란 색으로 칠한 부분을 주석을 해제하면 된다.

anon-access = read  # 익명 엑세스의 경우 읽기까지 가능
auth-access = write  # 권한있는 엑세스의 경우 쓰기까지 가능
password-db = passwd # 사용자 계정 정보 DB로 passwd 파일 사용 
authz-db = authz # 사용자 계정 권한 정보 DB로 authz 파일 사용

3. 유저 설정 및 권한 설정

유저 설정

아래의 경로로 들어가면 passwd 파일이 존재하는데 이 파일을 통해 설정을 진행할 예정이다.

아래와 같이 아이디 = 비밀번호 형식으로 맞춰주면 된다.

유저 권한 설정

아래의 경로로 들어가면 authz 파일이 존재하는데 이 파일을 통해 유저의 권한 설정을 진행할 예정이다.

아래와 같이 아이디 = 권한(r or rw) 형식으로 맞춰주면 된다.

4. svn 서비스 실행

sudo svnserve –d –r SVN 저장소 경로

위 명령을 실행하면 SVN 서비스가 실행된다. 그리고 형상 관리할 프로젝트를 "import" 하면 svn 저장소에 이력들이 올라간다!!!

문제!!

show log 하려는데 svn "Item is not readable" 등의 오류가 발생할 경우에는 아래와 같이 수정한다. 일종의 버그라고 한다.

sudo vim ./svnserve.conf
sudo vim ./authz

 

다음 포스팅에서는 포트 변경 및 서비스 실행 / 중단을 위한 서비스 등록, 재부팅 시 자동 시작 등을 다룰 것이다.

 

 

 

 

 

 

 

 

728x90
반응형
728x90
반응형

간단한 프로젝트를 진행하던 도중, 형상 관리를 해두는게 났지 않을까..? 싶어서 Git을 이용하여 업로드를 해보자 라는 결심을 하게 된다. 마침 Gitlab도 구축해 놓았겠다[typingdog.tistory.com/36]. 해봅시다.

나의 전제는 다음과 같았다.

  • 업로드 할 빈 Git 프로젝트를 마련해놓았다.
  • 이미 여럿 부분 작성된 프로젝트가 존재한다

즉, 이미 생성되어 있는 빈 git 프로젝트에 이미 작성된 프로젝트를 통째로 첫 번째 Commit/Push로 삼는다는 소리이다.

이렇게 git 프로젝트(레퍼지토리)가 생성되어 있다.

1. git init

먼저, 프로젝트가 있는 디렉토리에서 "이 디렉토리는 git을 적용하겠어요" 라는 의미의 초기화 명령어를 입력한다.
위의 명령을 작성하면 다음과 같이 ".git" 디렉토리가 생성된다. 숨겨진 파일로 생성된다는 뜻이다.
이는 리눅스나 윈도우나 마찬가지임.

.git이 생성되었다

2.
git config --global user.name "하고 싶은 이름"

git config --global user.email "하고 싶은 이메일"

이메일과 이름을 기재한다.

3. git remote add origin 원격 서버 주소

이미 생성해 놓은 git 프로젝트에 저장할 것이라는 것을 알리는 명령어이다. 아래와 같이 작성한다.

3. git add ./*

프로젝트에서 추가되거나 변경될 내역이 인덱스에 추가되는 작업인데, 빈 git 프로젝트에서 시작되었으니 전체 파일이 대상이 된다.

이렇게 아무것도 안 뜨는 것이 정상이다.

4. git commit -m "주석"

프로젝트의 변경되거나 추가되는 사항들이 앞의 git add 명령을 통해서 인덱스에 추가 되었다면, 이번에는 git commit 명령을 통해서 Head에 반영되는 작업이다. 

commit 성공 시 위와 같이 나온다.

 

Project Directory  --(add)--> Index[stage] --(commit)--> Head --(push)--> Remote Repository

위의 흐름대로 git 에는 반영이 된다. 필요에 의해서 작성해본다. 빨강색은 반영이 되어지는 대상이고, 파란색은 명령어이다.
즉, 우리는 commit 단계이므로 Head에 저장된다. 그 말은 아직 원격 저장소에는 저장이 되지 않는다는 의미.

.git 디렉토리의 내부.

5. git push origin master

이제 드디어 원격 서버의 git 프로젝트에 업로드하는 과정이다. origin master 는 때에 따라 다르다. 나중에 필요에 의해 작성할 것.

실행 결과

이로써 git에 내 프로젝트를 업로드하기 완료이다.

728x90
반응형
728x90
반응형

 

어느 날 터미널 ssh 를 통해서 서버에 접속했을 때, 메모리 점유율이 4% -> 30% 이상에 육박하길래 확인해보았더니,
gitlab이 약 2기가 가량을 먹고 있어서 안 쓸 때에는 중지를 시켜놓아야겠다 싶어서 까먹을까봐 정리한다.

현재 서버에서 돌아가고 있는 gitlab-ce의 상태를 확인하는 명령어이다

sudo gitlab-sudo gitlab-ctl status

현재 모두 종료되어 있는 상태이다.

 

다음은 gitlab을 중지하는 명령어이다.

sudo gitlab-ctl stop

gitlab 서비스를 중지한 모습
종료 후 173MiB로 낮은 점유율을 보여준다 

다음은 gitlab을 중지하는 명령어이다.

sudo gitlab-ctl start

2기가로 늘어난 메모리 점유율ㅋㅋ

 

추가적으로 재시작 명령어는 다음과 같다.

sudo gitlab-ctl start

728x90
반응형
728x90
반응형

 

우분투 Ubuntu 20.04.1 Version에서 Gitlab CE 를 설치를 해보았다.
우분투 Ubuntu 22.04.2 Version에서도 설치 테스트를 진행해 본 결과 유효하다.

 

1. 먼저 필수적인 의존성 라이브러리 설정 및 설치를 진행한다.

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates 

2. 메일 발송을 위한 Postfix 를 설치한다.

메일 발송을 위한 Postfix가 꼭 필요한 모양이다. 그렇기 때문에 설치를 하지만 당장은 필요하지 않다.
필요한 경우에 나중에 다시 설정을 하면 되므로 아래와 같이 선택한 후, 적절하게 입력한다. 
말이 적절이지, 특수문자를 제외하고 아무렇게나 입력해도 되는 듯 싶다. 나중에 재설정 가능하다.

sudo apt install postfix

postfix 설치 과정 중...

3. Gitlab 패키지 레퍼지토리를 추가한 후 설치한다.

다음 명령어를 입력하여 Gitlab 패키지 레퍼지토리를 추가한다.

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash 

그 후 , 환경 변수 설정과 함께  gitlab-ce 를 설치한다. 아래와 같은 명령어로, 알아서 설치를 잘 한다.

sudo EXTERNAL_URL="http://gitlab.example.com/" apt-get install gitlab-ce 


아래와 같이 나오면 설치가 완료된 모습이다.

Gitlab 설치가 성공한 모습이다.

4. 내 입맛에 맞게 IP와 PORT 를 설정한다.

먼저, IP 및 PORT의 설정은 /etc/gitlab/gitlab.rb 파일에서 설정을 변경할 수 있다. vim 을 통해서 변경을 하였다.sudo vim /etc/gitlab/gitlab.rb 변경해야할 항목은 다음과 같다.

  • external_url

먼저, external_url 을 설정한다. 기존에 gitlab.example.com:[port] 으로 되어 있으나, 자신의 주소와 포트에 맞게 변경한다.
[port] 부분을 각자 정의한 포트 번호로 기재하면 된다.

Text Editor는 가림용이다.

그리고 다음의 명령어로 gitlab 서비스를 재시작 한다.

sudo gitlab-ctl reconfigure 

그리고 설정한 아이피와 포트로 접속했을 때 다음과 같이 뜬다면 성공한 것이다.

 

5. 처음에 "root" 계정에 대한 비밀번호 변경.

처음 회원가입하고, 로그인할 경우 내가 생성한 계정은 당연스럽게도 pending 상태에 들어간다. 승인이 있어야 가입할 수 있다는 소리이다. Pending 상태를 풀어주려면 당연히 root 계정으로 접속을 해야한다.
root 계정의 비밀번호를 알기 위해서는 다음 명령어를 통해서 알아낸다.

sudo cat /etc/gitlab/initial_root_password | grep Password

root 비밀번호를 알아내는 과정

이제 비밀번호도 알았으니 저 비밀번호를 복붙하여 로그인도 하고, root 비밀번호 변경과 동시에 가입한 아이디의 pending 상태 또한 풀어서 이용하면 되겠다.

728x90
반응형

+ Recent posts