git revert git reset 차이점

분류없음 2017.10.17 14:22 Posted by 김한별 behonestar

git revert


소스코드를 한단계 이전의 commit 내용으로 롤백하기 위해 아래와 같이 입력한다.


git revert HEAD~


소스코드만 보면 한단계 이전으로 돌아간 것처럼 보이지만, 내부적으로는 새로운 commit이 발행된다.


Rollback한 이력이 모두 기록되기 때문에 안전한 방법이다.







git reset


소스코드를 한단계 이전의 commit 내용으로 롤백하기 위해 아래와 같이 입력한다.


(hard 옵션을 주면 최근의 커밋을 완전히-작업트리까지- 버리고 이전의 상태로 되돌린다.)


git reset --hard HEAD~


git revert와 달리 local/master의 HEAD가 한단계 뒤로 돌아가며 이후의 commit은 삭제된다.








공용 브랜치(origin/...)에서는 git reset 사용하지 말 것!


git reset 후 push를 하면 origin/master의 HEAD도 3번째 commit을 가리키며, 이후의 commit은 삭제된다.


하지만 다른 작업자의 local/master의 HEAD는 여전히 4번째 commit을 가리킨다.


git pull을 실행해도 origin/master의 commit으로 되돌아가지 않는다.


# git pull

From https://github.com/myproject/project

 + 2fdd108...0143329 master     -> origin/master  (forced update)

Already up-to-date.


origin/master 보다 새로운 commit을 갖고 있는 것으로 인식해버리기 때문이다.


# git status


On branch master

Your branch is ahead of 'origin/master' by 1 commits.

  (use "git push" to publish your local commits)


이 경우 다른 개발자도 local/master의 HEAD를 origin/master의 HEAD와 맞춰줘야 한다.


git reset --hard origin/master





git reset 후, 나의 local/master는 아래쪽의 작업트리를 타지만, 다른 개발자의 local/master는 여전히 윗쪽의 작업트리를 탄다. 


즉, `git reset --hard` 이후에 서로 다른 작업트리를 타기 때문에 공용 브랜치에서는 사용하지 말아야 한다.



출처

https://www.atlassian.com/git/tutorials/undoing-changes

crontab 사용법

Linux 2017.08.31 17:58 Posted by 김한별 behonestar

출처 : https://mytory.net/archives/601


# crontab -e

───────

0 5 * * * /home/mytory/svn_export.sh


0 5 * * * : 매일 5시 0분에 실행.

5 * * * * : 매시 5분이 될 때마다 실행. 즉, 한 시간 간격으로 실행.

* * * * * : 1분에 한 번씩 실행.

0 5 1 * * : 매달 1일 새벽 5시에 실행.

*/5 * * * * : 5분에 한 번씩

0 */5 * * * : 5시간에 한 번씩

0 5,11 * * * : 새벽 5시와 밤 11시.

0 5,11 * * 0,3 : 매주 일요일과 수요일 새벽 5시와 밤 11시.


'Linux' 카테고리의 다른 글

[nginx] https 적용하기  (0) 2018.06.22
[nginx] digest 인증 적용하기  (0) 2018.06.22
crontab 사용법  (0) 2017.08.31
Ubuntu Nginx 빌드  (0) 2017.07.20
sshd 디버깅 로그 보기  (0) 2017.07.05
openssl arm cross complie  (0) 2017.01.10

Ubuntu Nginx 빌드

Linux 2017.07.20 15:06 Posted by 김한별 behonestar

nginx 소스코드 다운로드

sudo su

mkdir ~/nginx_src

cd ~/nginx_src

apt-get build-dep nginx

apt-get source nginx


nginx 모듈 다운로드

cd ~/nginx_src/

git clone https://github.com/arut/nginx-rtmp-module


빌드 & 설치

cd ~/nginx_src/nginx-1.10.3


./configure --with-cc-opt="-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2" --with-ld-opt="-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now" --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=../nginx-rtmp-module


make

make install



'Linux' 카테고리의 다른 글

[nginx] digest 인증 적용하기  (0) 2018.06.22
crontab 사용법  (0) 2017.08.31
Ubuntu Nginx 빌드  (0) 2017.07.20
sshd 디버깅 로그 보기  (0) 2017.07.05
openssl arm cross complie  (0) 2017.01.10
zeromq arm cross complie  (0) 2017.01.10

sscanf를 활용한 쿼리 파라미터 파싱

분류없음 2017.07.06 19:32 Posted by 김한별 behonestar
샘플 코드

string streamName = "ce2b87e233cb_wlHByc?token=abcd&expiration=1234";

char strStreamName[64] = {0};

char strToken[128] = {0};

char strExpiration[64] = {0};


sscanf(STR(streamName), "%63[^?]?token=%127[^&]&expiration=%63[^&]", strStreamName, strToken, strExpiration);


설명

%63[^?] : ^가 나오기 전까지의 문자열 (최대 64자)
%127[^&] : &가 나오기 전까지의 문자열 (최대 128자)
%63[^&] : &가 나오기 전까지의 문자열 (최대 63자)

주의
- token의 길이가 127자를 초과하면 expiration이 파싱되지 않는다.
- 파라미터 순서가 바뀌면 파싱되지 않는다.


TAG C, sscanf

sshd 디버깅 로그 보기

Linux 2017.07.05 09:32 Posted by 김한별 behonestar

1. /etc/ssh/sshd_config 수정

# Logging

SyslogFacility USER

LogLevel DEBUG2


2. sshd 재시작

sudo service sshd restart


3. 로그 확인

tail -f /var/log/syslog


'Linux' 카테고리의 다른 글

crontab 사용법  (0) 2017.08.31
Ubuntu Nginx 빌드  (0) 2017.07.20
sshd 디버깅 로그 보기  (0) 2017.07.05
openssl arm cross complie  (0) 2017.01.10
zeromq arm cross complie  (0) 2017.01.10
rabbitmq-c arm cross complie  (0) 2017.01.10

[AWS] CloudFront Signed URL로만 데이터 접근 허용하기

분류없음 2017.06.09 10:00 Posted by 김한별 behonestar

AWS CloudFront Signed URL로만 데이터 접근을 허용하려면 아래 두가지를 모두 설정해줘야 합니다.


CloudFront만 S3 Bucket Read 가능하도록 정책 변경

CloudFront > Origins > Edit

 - Restrict Bucket Access : Yes

 - Grant Read Permissions on Bucket : Yes, Update Bucket Policy


Signed URL만 CloudFront 접근 가능하도록 변경

CloudFront > Behaviors > Edit

 - Restrict Viewer Access : Yes

[Python] sqlalchemy "Mysql Gone Away" 오류

Python 2017.05.22 16:04 Posted by 김한별 behonestar

증상

sqlalchemy로 DB 세션을 열었더라도 mysql의 wait_timeout동안 요청이 없으면 mysql에서 연결을 끊어버립니다. 따라서 이후의 요청은 Mysql Gone Away 오류가 발생합니다.


대책

mysql의 wait_timeout보다 작은 값으로 pool_cycle을 지정하면 됩니다. 특정 시간 간격으로 재연결하는 옵션입니다.


engine = create_engine("mysql://%s:%s@%s:%s/mydb" % (db_user, db_pass, db_host, db_port), pool_recycle=3600, echo=False)


MPEG TS Packet Structure

분류없음 2017.05.11 14:56 Posted by 김한별 behonestar

  H264 Frame → PES Packet → TS Packets 변환


1. H264 Frame(ES)에 PES Header를 붙이면 PES 패킷이 된다.

 - PES Header에는 PTS, DTS 정보가 들어있다.


2. PES 패킷을 쪼개서 TS Header를 붙이면 TS 패킷이 된다.

 - PES 패킷은 TS 패킷 크기(188 Bytes)에 맞춰 쪼개진다.

 - 마지막 PES 패킷은 188 Bytes를 채우지 못하므로 Adaption Field를 0xFF로 채운다.




  TS Packet (188 Bytes)

*MPEG-2 TS Packet Analyzer 캡쳐

 

1. TS Header

0x47 : sync_byte

0x40 :

 0 : transport_error_indicator

 1 : payload_unit_start_indicator

 0 : transport_priority

 0 : packet_identifier (PID)

 0 : .. 

 0 : ..

 0 : ..

 0 : ..

0x41

 0 : ..

 1 : ..

 0 : ..

 0 : ..

 0 : ..

 0 : ..

 0 : ..

 1 : ..

0x3E :

 0 : transport_scrambling_control 

 0 : ..

 1 : adaptation_field_control (11=adaption field, payload 모두 존재)

 1 : ..

 1 : continuity_counter (1씩 증가)

 1 : ..

 1 : ..

 0 : ..


2. Adaption Field

0x07 : adaptation_field_length

0x50

 0 : discontinuity_indicator

 1 : random_access_indicator

 0 : elementary_system_priority_indicator

 1 : PCR_flag (0=적응필드가 PCR 필드 포함하지 않음)

 0 : OPCR flag

 0 : splicing_point_flag

 0 : transport_private_data_flag

 0 : adaptation_field_extension_flag

0x09~ : PCR 관련 필드들


3. PES Packet

TS 패킷의 Payload에는 PES 패킷이 쪼개져서 담긴다.


3-1. PES Header

0x00 : packet_start_code_prefix

0x00 : ..

0x00 : ..

0x01 : ..

0xE0 : stream_id (E0=Video Stream 224)

0x2D : PES_packet_length

0x7D : ..

0x81

 1 : optional PES header indicator

 0 : ..

 0 : PES_scrambling

 0 : ...

 0 : PES_priority 

 0 : data_alignment 

 0 : copyright

 1 : original_or_copy

0x80 

 1 : PTS_flag

 0 : DTS_flag

 0 : ESCR_flag

 0 : ES_rate_flag

 0 : DSM_trick_mode_flag

 0 : additional_copy_info_flag

 0 : PES_CRC_flag

 0 : PES_extention_flag

0x05 : PES_header_data_length 

0x21~0xD9 : PTS, DTS (계산 방식은 Wikipedia 참고)


※ PTS 계산 방법

 

21 4D 41 15 D9

= 00100001 01000001 01000001 00010101 11011001

= 0010 000 1 010000010100000 1 000101011101100 1


  0010 : PTS 정보만 포함함을 의미

  000  : 부호 비트 (양수)

  1 : 마커 비트

  010000010100000 : PTS 상위 비트

  1 : 마커 비트

  000101011101100 : PTS 하위 비트

  1 : 마커 비트

 

∴ PTS = 010000010100000000101011101100(2) = 273681132


3-2. PES Payload

H.264 Frame이 담긴다.



참고

1. http://www.ktword.co.kr/abbr_view.php?id=716&m_temp1=3504&nav=2