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
반응형

Apache2 VHost 설정하기

  • Apache Vhost 설정

Vhost란? Apache2의 Virtual host 기능을 통해서 하나의 아파치 서버에서 독립된 서버 공간을 나누는 작업을 의미한다.

설정 파일 조작

vhost에 필요로 하는, 수정해야하는 설정들은 위 그림에서 처럼 3가지이다.

ports.conf : 각 vhost 마다 사용할 포트 등록.
sites-available, -enabled : vhost에 필요한 설정 파일 등록.

먼저, /etc/apache2 경로의 sites-available/ 디렉토리 내에 필요한 파일을 구비할 것인데, sites-available 디렉토리현재 비활성 중인 사이트들의 설정 파일을 담고 있는 디렉토리이다. 

001-autotag.api 라는 이름으로 가상 환경을 나눈다. 내용은 다음과 같다.

<VirtualHost *:7011> 과 같이 해당 가상 환경에서 사용할 포트를 기재해주고,
ServerName 에는 도메인 주소가 들어간다.
DocumentRoot 의 경우, 렌더링할 웹 문서 파일이 존재하는 Default 경로라고 생각하면 되겠다.
ErrorLog 및 CustomLog 는 해당 vhost에서 발생하는 로그들을 어디에 저장할 것인가를 지정한다.
<Directory ~ > 부분은 해당 vhost에 대한 옵션들이라고 생각하면 된다.

--------------------------------------------------------------------------------------------------------------------------------------------------
[해당 내용]
<VirtualHost *:7011>
ServerName autotag.api
ServerAdmin ysho0707@gmail.com
DocumentRoot /server_app/autotag.api
ErrorLog ${APACHE_LOG_DIR}/django.api/error.log
CustomLog ${APACHE_LOG_DIR}/django.api/access.log combined
          <Directory /server_app/autotag.api>
                    Options All
                    AllowOverride All
                    Require all granted
          </Directory>
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
--------------------------------------------------------------------------------------------------------------------------------------------------

그리고 다음으로는 sites-enabled 디렉토리를 수정할 것이다. sites-enabled 디렉토리는 현재 활성 중인 사이트의 설정 파일들을 갖는 디렉토리인데, 보통 sites-available 디렉토리에서 심볼릭 링크를 걸어서 설정 파일을 채워넣는 형태로 진행이 된다. 그 부분을 다음에서 확인할 수 있다.

sudo ln -s /etc/apache2/sites-available/001-autotag.api.conf /etc/apache2/sites-enabled/001-autotag.api.conf

위의 명령어를 통해 심볼릭 링크를 건다.

728x90

Port 수정

다음으로는 port를 재설정할 것이다.

위와 같은 경로에 ports.conf 파일이 존재하는데 이 부분에 해당 Virtual Host 공간의 접속 포트를 추가하면 된다. 위 과정 중에서 sites-available 디렉토리 내에 001-autotag.api.conf 의 가장 첫 줄에 포트 번호가 있다. 그 번호를 추가한다.

포트를 추가하면 기본 default로 정했던 7010 포트 뿐만 아니라, autotag.api 이름의 가상 호스트의 포트 또한 접속 요청으로 수용할 수 있다.

Apache2 재시작

아파치를 위와 같이 재시작하고, 접속을 시도해본다.

접속 및 테스트

위와 같이 깔끔하게 접속이 잘 된 모습을 볼 수 있다. 해당 페이지는 “hello” 를 출력하는 페이지 파일을 001-autotag.api.conf 의 DocumentRoot 경로에 기술한 경로에 사전에 집어넣어 렌더링 된 상태이다. 

해당 디렉토리에 아무 것도 넣지 않고 접속하면 아무 것도 출력되지 않으니 확인을 해야한다.
/etc/hosts를 수정한다면 다음과 같이 접속 또한 가능하다.

/etc/hosts 파일을 다음과 같이 수정하게 되면 autotag.api 라는 주소는 앞으로 192.168.0.112로 바꿔서 해석하겠다 라는 의미를 갖는다. 

여기서 중요한 것은 그 말인 즉 슨 내 컴퓨터 내에서만 적용되는 규칙이다. 외부 사람들은 백 날 autotag.api를 친다 하더라도 접속이 되지 않을 것이다.

아래와 같이 접속이 잘 되는 것을 확인할 수 있다.

 

 

 

 

 

 

728x90
반응형
728x90
반응형
728x90
반응형
728x90
반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

출처는 프로그래머스이다.

문제는 다음 링크를 타고 들어가면 확인할 수 있다. ( programmers.co.kr/learn/courses/30/lessons/42889 )

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
/*
N    stages    result
5    [2, 1, 2, 6, 2, 4, 3, 3]    [3,4,2,1,5]
4    [4,4,4,4,4]    [4,1,2,3]
*/
 
bool CmpPair(const pair<intdouble>& i, const pair<intdouble>& j)
{
    if(i.second == j.second)
        return i.first < j.first;
    return i.second > j.second;
}
 
vector<int> solution(int N, vector<int> stages) {
    vector<int> answer;
    vector<int> stage_fcnt; 
    // 각 스테이지 별로 몇 명 통과했는지를 기록 | [0]은 1번 스테이지, [1]은 2번 스테이지 ...
    vector<pair<intdouble>> failpair;
    // 각 스테이지 별 실패율이 어떤 지를 확인.
    // 이렇게 묶어두면 정렬하기가 매우 편리하다.
    
    // 스테이지의 갯수만큼 벡터 요소들 추가한다.
    for(int i=0; i<N; i++)
        stage_fcnt.push_back(0);
    
    // 각 스테이지 별로 몇 명 묶여 있는지 파악.
    for(vector<int>::iterator it=stages.begin(); it!=stages.end(); it++)
        if(*it < N+1// 1부터 N 스테이지의 실패율만 알면 되기 때문에.
            stage_fcnt[*it-1]++;
    
    // 각 스테이지 별 실패율을 구한다.
    for(int i=0, now_cnt=stages.size(); i<stage_fcnt.size(); i++)
    {
        if(stage_fcnt[i] == 0// 스테이지를 아무도 묶여 있지 않다면
            failpair.push_back(make_pair(i+10)); // 그냥 0 처리하며 now_cnt는 줄이지 않는다!!
        else 
        {
            failpair.push_back(make_pair(i+1, (double)stage_fcnt[i] / (double)now_cnt));
            now_cnt-=stage_fcnt[i];        
        }
                               
    }
 
    // 정렬을 하되 CmpPair 조건에 맞도록 정렬한다.
    sort(failpair.begin(), failpair.end(), CmpPair);
    
    // 실패율을 기준으로 pair를 정렬했으니 pair 중 stage에 해당하는 값만 answer에 저장.
    for(vector<pair<intdouble>>::iterator it=failpair.begin(); it != failpair.end(); it++)
        answer.push_back(it->first);
    
    return answer;
}
cs
728x90
반응형
728x90
반응형
728x90
반응형

+ Recent posts