슬라이드 1

Similar documents
github_introduction.key

리눅스기초

git CLI 로간단하게조작하기! by 윤선지

<3833C8A35FB0F8C7D05FC6AEB7BBB5E55F F466C6F77B8A65FC8B0BFEBC7D15FC8BFB0FAC0FBC0CE5FBCD2BDBA5FC7FCBBF35FB0FCB8AE5F F322E687770>

6주차.key

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint 프레젠테이션

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta

Remote UI Guide

/chroot/lib/ /chroot/etc/

PowerPoint 프레젠테이션

<31332DB9E9C6AEB7A2C7D8C5B72D3131C0E528BACEB7CF292E687770>

LXR 설치 및 사용법.doc

SourceTree 를이용한 Git 사용법 1

Chapter 1

untitled

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

untitled

슬라이드 1

Solaris Express Developer Edition


<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

네이버 오픈소스 세미나 key

MySQL-Ch10

PowerPoint 프레젠테이션

Interstage5 SOAP서비스 설정 가이드

PowerPoint 프레젠테이션

<3836C8A35FB0F8C7D05FC6AEB7BBB5E55F F466C6F77B8A65FC8B0BFEBC7D15FC8BFB0FAC0FBC0CE5FBCD2BDBA5FC7FCBBF35FB0FCB8AE5F F332E687770>

DE1-SoC Board

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

GIT/GITHUB 사용 1 Git & GitHub 튜토리얼 출처 : [Studio Rini ] Git 을보통어떻게사용하는지간략한 Flow 를보겠습니다. 1. 새프로젝트를생성, 프로젝트폴더에 g

4. 스위치재부팅을실시한다. ( 만약, Save 질문이나오면 'no' 를실시한다.) SWx#reload System configuration has been modified. Save? [yes/no]: no Proceed with reload? [confirm] (

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

RHEV 2.2 인증서 만료 확인 및 갱신

슬라이드 1

슬라이드 1

소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를 제공합니다. 제품은 계속 업데이트되므로, 이 설명서의 이미지 및 텍스트는 사용자가 보유 중인 TeraStation 에 표시 된 이미지 및 텍스트와 약간 다를 수

다. 최신 버전의 rpm 패키지 버전을 다운로드해 다음과 같이 설 치한다. 단 debuginfo의 rpm 패키지는 설치할 필요가 없다. 하기 위한 옵션이고, init는 저장소를 초기화하기 위한 cvs 명령 어이다. - 새로 설치한 경우 : rpm -ivh cvs* -

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

Windows 8에서 BioStar 1 설치하기

Sena Technologies, Inc. HelloDevice Super 1.1.0

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

Copyright 2012, Oracle and/or its affiliates. All rights reserved.,,,,,,,,,,,,,.,..., U.S. GOVERNMENT END USERS. Oracle programs, including any operat

PowerPoint 프레젠테이션

Microsoft PowerPoint - ch07.ppt

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University

슬라이드 1

rmi_박준용_final.PDF

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

YUM(Yellowdog Updater,Modified) : RPM 패키지가저장된서버 ( 저장소 ) 로부터원하는패키지를자동으로설치한다. : YUM 도구는 RPM 의패키지의존성문제를해결

PowerPoint 프레젠테이션

CD-RW_Advanced.PDF

쿠폰형_상품소개서

PowerPoint 프레젠테이션

10X56_NWG_KOR.indd

PowerPoint 프레젠테이션

VOL /2 Technical SmartPlant Materials - Document Management SmartPlant Materials에서 기본적인 Document를 관리하고자 할 때 필요한 세팅, 파일 업로드 방법 그리고 Path Type인 Ph

PCServerMgmt7

초보자를 위한 분산 캐시 활용 전략

thesis-shk

초보자를 위한 C++

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

thesis

매력적인 맥/iOS 개발 환경 그림 A-1 변경 사항 확인창 Validate Setting... 항목을 고르면 된다. 프로젝트 편집기를 선택했을 때 화면 아 래쪽에 있는 동일한 Validate Settings... 버튼을 클릭해도 된다. 이슈 내비게이터 목록에서 변경할

System Recovery 사용자 매뉴얼

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

bn2019_2

라즈베리파이 프로그래밍_130912(최종).indd

Software Verification Team 오준 임국현 주영진 김슬기

03장.스택.key

13주-14주proc.PDF

Apache Ivy

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

PowerPoint 프레젠테이션

Copyright 2012, Oracle and/or its affiliates. All rights reserved.,.,,,,,,,,,,,,.,...,. U.S. GOVERNMENT END USERS. Oracle programs, including any oper

Orcad Capture 9.x

Mango220 Android How to compile and Transfer image to Target

슬라이드 1

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

슬라이드 1

MPLAB C18 C

휠세미나3 ver0.4

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Copyright 2004 Sun Microsystems, Inc Network Circle, Santa Clara, CA U.S.A..,,. Sun. Sun. Berkeley BSD. UNIX X/Open Company, Ltd.. Sun, Su

1217 WebTrafMon II

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

기초컴퓨터프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Dropbox Forensics

/ KOSSLab

단계

chapter1,2.doc

Transcription:

Git 심화 l NIPA KOSSLab. Taeung Song taeung@kosslab.kr 26-09-

Instructor 송태웅 (Taeung Song, https://github.com/taeung) - NIPA KOSS(Korean Open Source Software) Lab. Software Engineer - Linux Kernel 프로젝트 Contributor - 전 ) XS inc. (Embedded, ARM, Server, Linux) 선임연구원

Index Git 내부구조 l Git 협업실습 l Git 서버구축 l Git 추가실습

Git 내부구조 - Git init 으로 생성되는 metadata(.git 폴더 ) - Git 의 저장방식 (object) - Git 의 commit object 살펴보기

1.1 Git Metadata 1) 임의의 폴더를 생성하고 경로 이동해서 # mkdir test; cd test 2) Git init 을 하게 되면 # git init Initialized empty Git repository in /home/taeung/test/.git/ 3) 다음과같이.git 폴더를 확인 할 수 있다. # ls -F.git branches/ config description HEAD hooks/ info/ objects/ refs/

1.2 Git 의 저장방식 (Object) 1) 소스파일 hello_world.c 을 만들어보고 확인해보자. # cat hello_world.c #include <stdio> int main() { printf( hello world!\n ); return 0; } 2) 소스파일 hello_world.c 을 commit 해보자. # git add hello_world.c ; git commit -m first commit 3) hello_world.c 파일을 git 에서 관리할때의 파일명 (hash 값 ) 을 보자. # git hash-object hello_world.c 706896d37e285be34ff9690cae977d133cf5ebb1

1.2 Git 의 저장방식 (Object) 3) hello_world.c 파일을 git 에서 관리할때의 파일명 (hash 값 ) 을 보자. # git hash-object hello_world.c 706896d37e285be34ff9690cae977d133cf5ebb1 4) git 시스템 내부에서 hello_world.c 파일을 어떻게 관리하는지 찾아보자. # find.git/objects -type f.git/objects//765814429e6b1e54d4e1790a050db66c2d26.git/objects/90/f67717553617b2184a23c2fb0f0c49d2f1.git/objects/70/6896d37e285be34ff9690cae977d133cf5ebb1 5) git 시스템 내부에서 hello_world.c 파일을 어떤타입의 object 로 관리하는가? # git cat-file -t 706896d37e285be34ff9690cae977d133cf5ebb1 blob

1.2 Git 의 저장방식 (Object) 6) git 시스템 내부에서 압축된 (zlibc)hello_world.c 파일을 확인해보자. # cat.git/objects/70/6896d37e285be34ff9690cae977d133cf5ebb1 > import sys > import zlib > > input = sys.stdin.read() > result = zlib.decompress(input) > print result > " blob 73#include <stdio.h> int main() { printf("hello world!\n"); return 0; } python -c "

1.3 Git 의 commit object 살펴보기 1) 이전에 commit 했을때 생긴 commit ID 을 살펴보자. # git show --quiet commit 90f67717553617b2184a23c2fb0f0c49d2f1 Author: Taeung Song <treeze.taeung@gmail.com> Date: Sat Sep 3 00:28:22 26 +0900 first commit 2) git 내부에서 commit object 의 타입은 무엇인가? # git cat-file -t 90f67 commit 3) git 내부에 저장된 commit object 90f67 의 내용은 무엇인가? # git cat-file -p 90f67 tree 765814429e6b1e54d4e1790a050db66c2d26 author Taeung Song <treeze.taeung@gmail.com> 147283 +0900 committer Taeung Song <treeze.taeung@gmail.com> 147283 +0900 first commit

Git 협업실습 - Git 필수명령 리뷰 및 실습준비 - Rebase 는 언제 쓸까? - A, B 로 역할 나누어 협업실습 하기

2.1 Git 필수명령 리뷰 < Git 필수 명령 > add : 커밋할 목록에 추가 commit : 커밋 ( 히스토리의 한단위 ) 만들기 push: 현재까지 역사 (commits) Github 에 밀어넣기 add 커밋할 목록 (the index) - 파일 1 - 파일 2 커밋 3 commit 커밋 2 커밋 1 커밋 3 push 커밋 3 커밋 3

2.2 Git 실습목표 본 강의는 실습 90% 이론 10% ( 스파르타 ) 나중에 하는건 없다 무조건 오늘 목표는 이루고 가자 질문은 모두를 이롭게 한다 내 손으로 명령어를 직접 입력해보자 터미널 환경 경험하자 GUI(Graphic User Interface) 대신 CLI(Command Line Interface) 경험하자 vi 에디터를 사용해보자

2.3 Rebase 이해하기 Rebase 와 Merge 의 차이는? 둘다 두 branch 의 차이점 (commits) 을 합치는것은 매한가지나 Rebase 는 합치기 전에 되감기 (rewinding) 를 하고 Merge 는 안하고 합친다.

2.4 Rebase 는 언제 쓸까? commit 을 역사의 한단위 ' 블럭 ' 이라 하고 블럭들의 모임을 'tree' 라 할때 내가 쌓은 블럭을 잠시 빼고 ( 뺀 나머지 ) 기준이 되는 tree 를 최신 업데이트 한 후에 그 위에 다시 내 블럭을 쌓아 올릴때 쓸 수 있다.

2.5 협업을 위한 2 인팀짜기 옆사람과 2 인팀을 만들자! (A 역할, B 역할 각각 담당 ) 한번의 선택이 오늘 실습의 결과를 좌우한다.. 똑똑한 친구를 고르도록 하자.. 협업실습 참고 URL : https://github.com/advanced-git-training-team1/linux-perf

2.6 협업을 위한 organization 만들기 한 사람의 계정으로 organization 을 만들자

2.6 협업을 위한 organization 만들기 팀이름, 메일 입력하고 생성하기

2.6 협업을 위한 organization 만들기 팀원추가해주고 생성완료

2.6 협업을 위한 organization 만들기 새로운 remote 저장소 만들기

2.6 협업을 위한 organization 만들기 프로젝트명 쓰고 생성하기

2.6 협업을 위한 organization 만들기 생성된 URL 복사하기

2.7 perf 소스 초기 commit & push 1) 아래 다운로드 링크를 통해서 perf 소스를 다운 받자. https://www.dropbox.com/sh/xvmgaje0z5uwffo/aaawdmqflq1no7ivicyz5ybza?dl=1&pv=1 2) 압축풀고 linux-perf 폴더로 들어가서 git 초기화 하자. # cd mkdir linux-perf; test; cd git testinit 3) 초기 commit 을 만들자. # git mkdir add test; -A; git cd test commit -m [Advanced Git] Initial Commit 4) organization 에서 만든 Remote 저장소 URL 등록후 push 하자. mkdir test;add cd origin test # git remote <remote 저장소 URL> # git push origin master

2.7 perf 소스 초기 commit & push 아래와 유사하게 push 가 정상적으로 완료가 되면 setting 에 들어간다.

2.7 perf 소스 초기 commit & push 협업을 할 친구의 ID 를 등록한다.

2.8 각자 fork 를 해놓자. 각자 본인의 ID 로 로그인해서 fork 를 한다.

2.9 STAGE 0 : A, B 미션 1) 각자 본인이 fork 해서 만든 프로젝트 URL 로 clone 받자 # cd mkdir ~ test; cd test # git clone < 본인계정아래 fork 된 프로젝트 URL>

2.9 STAGE 1 : A 미션 프로젝트 세팅 1) 아래 다운로드 링크를 통해서 A 미션을 위한 준비물 파일을 받고 압축풀자. https://www.dropbox.com/sh/5bwcrcfvnntqrai/aac2rkrzlunbhhyrn3vnnftga?dl=1&pv=1 2) 방금 clone 받은 프로젝트로 경로를 이동 후 브랜치 생성 # cd mkdir linux-perf; test; cd git testcheckout -b develop 3) ~/Downloads/A/PR-1 폴더 내에 있는 patch 파일을 commit 으로 만들자. # git mkdir amtest; 00-perf-config-Tidy-up-the-code-setting-buildid-dir.patch cd test 4) 방금 만들어진 commit 을 내 이름으로 수정해보자. mkdir test;--amend cd test--author= 본인이름 < 본인이메일 > # git commit 5) 수정이 잘되었나 저자명 (Author) 을 확인하자 # git mkdir show test; cd test

2.9 STAGE 2 : B 미션 프로젝트 세팅 1) 아래 다운로드 링크를 통해서 B 미션을 위한 준비물 파일을 받고 압축풀자. https://www.dropbox.com/sh/aumb6aqc780twt3/aadpdf-ju0p-xe8fyg8rowh5a?dl=1&pv=1 2) 방금 clone 받은 프로젝트로 경로를 이동 후 브랜치 생성 # cd mkdir linux-perf; test; cd git testcheckout -b develop 3) ~/Downloads/B/PR-1 폴더 내에 있는 patch 파일들을 commit 으로 만들자. # git mkdir amtest; 00-perf-config-Introduce-perf_config_set-class.patch cd test # git am 00-perf-config-Let-show_config-work-with-perf_config_se.patch 4) 방금 만들어진 commit 을 내 이름으로 수정해보자. # mkdir test;--amend cd test--author= 본인이름 < 본인이메일 > git commit # git show

2.9 STAGE 3 : A 미션 pull-request 하기 1) PR-1 폴더에 있는 내용 commit 으로 적용했다면 push 한다. # git mkdir push test; origin cd test develop

2.9 STAGE 3 : A 미션 pull-request 하기 develop 브랜치 성공적으로 push 했다면 pull-request

2.9 STAGE 3 : A 미션 pull-request 하기 Pull-request 보내기

2.9 STAGE 3 : A 미션 pull-request 하기 Pull-request 보냈다면 아래 처럼 organization 의 본래 프로젝트에 확인 가능

2.9 STAGE 4 : B 미션 comment 달기 Commit 이 한번에 많은 내용이 담겼습니다. 3 개정도로 나누는게 좋을것같습니다. 답변적는다.

2.9 STAGE 5 : A 미션 피드백에 맞춰서 두번째 pull-request 1) 기존 commit 를 지우고 원래 상태로 복원한다. # git mkdir reset test; HEAD^; cd test git checkout -- tools/ 2) PR-2 폴더에 있는 내용 patch 파일들을 새롭게 적용한다. # git am 00-perf-config-Remove-duplicated-the-code-calling-set_b.patch # git am 00-perf-config-Rework-buildid_dir_command_config-to-per.patch # git am 00-perf-config-Rename-v-to-home-at-set_buildid_dir.patch

2.9 STAGE 5 : A 미션 피드백에 맞춰서 두번째 pull-request 3) 방금 적용한 3 개 commit 을 모두 rebase -i 로 수정한다. (3 개 모두 edit 으로 지정 ) # git mkdir rebase test;-i cdhead~3 test 4) commit 을 하나씩 차례차례 수정한다 x3 (3 번 반복 ) mkdir test;--amend cd test--author= 본인이름 < 본인이메일 > # git commit # git rebase --continue 5) commit 수정 완료했다면 push 한다. # git mkdir push test; origin cd test develop -f

2.9 STAGE 5 : A 미션 피드백에 맞춰서 두번째 pull-request push 만 했음에도 불구하고 자동으로 pull-request 두번째 버전이 이어진 다는것을 확인

2.9 STAGE 6 : 최초 프로젝트 생성한 멤버의 미션 최초에 프로젝트 생성한 멤버가 해당 commit 을 merge 시킨다. merge 하기

2.9 STAGE 7 : B 미션 rebase 하기 1) 본래의 organization 의 프로젝트 URL 을 upstream 으로 등록하자. # git mkdir remote test;add cd upstream test https://github.com/<organization 명 >/linux-perf.git 2) A 미션에 의해서 merge 된 새로운 commit 들을 가져오자. # git mkdir fetch test; upstream cd test 3) base( 기존 commit 들 ) 가 변경되었으니 rebase 하자. # git mkdir rebase test;upstream/master cd test First, rewinding head to replay your work on top of it... Applying: perf config: Introduce perf_config_set class Applying: perf config: Let show_config() work with perf_config_set

2.9 STAGE 8 : B 미션 pull-request 하기 1) 이젠 B 의 차례이다. rebase 마무리 되었다면 push 하자. # git mkdir push test; origin cd test develop

2.9 STAGE 8 : B 미션 pull-request 하기 develop 브랜치 내용을 기반으로 Pull-request 보내기

2.9 STAGE 9 : A 미션 소스라인에 comment 달기 첫번째 commit 을 열어보자.

2.9 STAGE 9 : A 미션 소스라인에 comment 달기 free(item value); 코드라인에 아래와같이 comment 를 달자.

2.9 STAGE 9 : A 미션 소스라인에 comment 달기 두번째 commit 을 열어보자.

2.9 STAGE 9 : A 미션 소스라인에 comment 달기 struct list_head *sections = &set sections; 소스라인에 comment 달기

2.9 STAGE 10 : B 미션 피드백에 맞춰서 두번째 pull-request 1) 기존 commit 를 지우고 원래 상태로 복원한다. # git mkdir reset test; HEAD^^ cd test && git checkout -- tools && git clean -f 2) PR-2 폴더에 있는 내용 patch 파일들을 새롭게 적용한다. # git mkdir amtest; 00-perf-config-Introduce-perf_config_set-class.patch cd test # git am 00-perf-config-Make-show_config-use-perf_config_set.patch

2.9 STAGE 10 : B 미션 피드백에 맞춰서 두번째 pull-request 3) 방금 적용한 2 개 commit 을 모두 rebase -i 로 수정한다. (2 개 모두 edit 으로 지정 ) # git mkdir rebase test;-i cdhead~2 test 4) commit 을 하나씩 차례차례 수정한다 x2 (2 번 반복 ) mkdir test;--amend cd test--author= 본인이름 < 본인이메일 > # git commit # git rebase --continue 5) commit 수정 완료했다면 push 한다. # git mkdir push test; origin cd test develop -f

2.9 STAGE 11 : 최초 프로젝트 생성자미션 merge 하기 B 가 작업한 두번째 pull-request 정상확인 되었다면 merge 하자.

2.9 STAGE 12 : A 미션 새로운 commit 들 추가 1) feature 폴더에 있는 patch 파일들을 차례로 적용시킨다. (develop 브랜치 ) # git mkdir amtest; 00-perf-ordered_events-Introduce-reinit.patch cd test # git am 00-perf-session-Make-ordered_events-reusable.patch # git am 00-perf-data-Add-perf_data_file switch-helper.patch

2.9 STAGE 13 : A 미션 rebase 하기 1) 본래의 organization 의 프로젝트 URL 을 upstream 으로 등록하자. # git mkdir remote test;add cd upstream test https://github.com/<organization 명 >/linux-perf.git 2) B 미션에 의해서 merge 된 새로운 commit 들을 가져오자. # git mkdir fetch test; upstream cd test 3) base( 기존 commit 들 ) 가 변경되었으니 rebase 하자. # git mkdir rebase test;upstream/master cd test First, rewinding head to replay your work on top of it... Applying: perf ordered_events: Introduce reinit() Applying: perf session: Make ordered_events reusable Applying: perf data: Add perf_data_file switch() helper

2.9 STAGE 14 : A 미션 develop 브랜치에 있는 commit 들 feature 브랜치로 옴기기 1) master 브랜치로 변경한다. # git mkdir checkout test; cd master test 2) 새로운 브랜치 feature 를 만든다. # git mkdir checkout test; cd -btest feature 3) develop 브랜치에 있는 3 개의 commit 을 가지고 온다. cherry-pick ( 오래된 커밋 )..( 최신커밋 ) 범위지정 가능 # git cherry-pick develop~3..develop [feature 2cbd1c1] perf ordered_events: Introduce reinit() Author: Wang Nan <wangnan0@huawei.com> Date: Wed Apr 13 08:21: 26 +0000 2 files changed, 10 insertions(+) [feature f7de143] perf session: Make ordered_events reusable Author: Wang Nan <wangnan0@huawei.com> Date: Wed Apr 13 08:21: 26 +0000 1 file changed, 5 insertions(+), 1 deletion(-) [feature ada1f7d] perf data: Add perf_data_file switch() helper Author: Wang Nan <wangnan0@huawei.com> Date: Wed Apr 13 08:21:05 26 +0000 2 files changed, 51 insertions(+), 1 deletion(-)

2.9 STAGE 15 : B 미션 develop 브랜치에 있는 commit 한개 feature 브랜치로 옴기기 1) feature 폴더에 있는 patch 파일을 적용시킨다. (develop 브랜치 ) # git mkdir amtest; 00-perf-config-Fix-abnormal-termination-at-perf_parse_f.patch cd test 2) master 브랜치로 변경한다. # git mkdir checkout test; cd master test 3) 새로운 브랜치 feature 를 만든다. # git mkdir checkout test; cd -btest feature 4) develop 브랜치에 있는 가장최신 1 개의 commit 을 가지고 온다. # git cherry-pick develop [feature d84ff6b] perf config: Fix abnormal termination at perf_parse_file() Date: Mon Jun 6 19:52:52 26 +0900 1 file changed, 7 insertions(+), 9 deletions(-)

Git 서버구축 - Git 서버로 push 할 준비태세 - ssh 접속하기 - 미니 git 서버 구축하기 - Git 서버에 내 SSH 공개키 등록하기 - 내 프로젝트 push 하기

3.1 Git 서버로 push 할 준비태세 1) Git 서버에 push 할 임의의 프로젝트 생성 ( 용량작아야함 ) # mkdir advanced_git; cd advanced_git 2) Git 초기화 및 한개 commit 생성 # git init; touch test; git add test; git commit -m first 3) 나중에 사용할 ssh public key 생성하기 (Linux/Mac OS 와 Window 약간다름 ) Public key 생성도중에 나오는 입력값은 모두 Enter 키 눌러서 default 값으로 진행 # ssh-keygen -t rsa or # ssh-keygen.exe -t rsa 4) id_rsa.pub 내용미리 공개키 내용 복사해두기 ( 우 클릭 Copy) # cat ssh-keygen ~/.ssh/id_rsa.pub -t rsa

3.2 SSH 접속하기 1) Linux/Mac OS 환경이라면 터미널에서 ssh 접속 (ip 및 id/pw 는 현장에서 공지 ) # ssh git@192.168.xxx.xxx 2) Window 환경이라면 putty 설치해서 접속 Download Link : https://the.earth.li/~sgtatham/putty/latest/x86/putty.exe 사용법 참고 : http://ooz.co.kr/89

3.3 SSH 접속 후 Git 서버구축하기 주의 : 다른사람의 Git 저장소 폴더를 지우지 말자.. 1) /repo/git/ 경로에서 본인의 이름으로 폴더 생성 # cd /repo/git; mkdir < 본인 영문이름 > 2) 자신의 프로젝트명으로 Git remote 저장소 구축하기 # cd < 본인 영문이름 >; mkdir advanced_git.git 3) Git remote 저장소 초기화 하기 # cd advanced_git.git; git init --bare

3.4 Git 서버에 내 SSH 공개키 등록하기 주의 : 다른사람의 SSH Public Key 를 지우지 말자.. 1) 현재는 ssh 접속되어 있는상태인데 /home/git/.ssh 경로로 이동한다. # cd /home/git/.ssh 2) authorized_keys 파일에 내 공개키를 추가로 덧붙힌다.(append) 반드시 >> 두개를 이용할것.. > 하나만 쓰면 남의 key 를 지워버리게 된다.. ( 조심 ) # echo < 아까 복사한 내 ssh public key 내용 > >> authorized_keys

3.5 내 프로젝트 push 하기 1) 내가 3.1 에서 만들어둔 폴더로 이동하자. # cd advanced_git 2) Git 초기화 및 한개 commit 생성 # git remote add origin git@<git 서버 IP>:/repo/git/< 본인이름 >/< 프로젝트명 > 만약 이전에 Git 서버에서 /repo/git/ 아래 만들어둔 본인의 이름이 taeung 프로젝트명이 advanced_git.git 이라면 아래와 같다. # git remote add origin git@<git 서버 IP>:/repo/git/taeung/advanced_git.git 3) 마지막으로 미리 구축해둔 미니 Git 서버에 push 한다. 성공했다면 미션 완료!! # git push origin master

Git 추가실습 - node.js 소스 Git 으로 살펴보기 미션 - submodule 간단한 실습 - stash 간단한 실습

4.1 Blame 이란 해당 소스라인 대해서 누가 마지막으로 수정을 했는지 commit ID 추적이 가능하다. 078006 5f9273d6 5f9273d6 5f9273d6 5f9273d6 078006 078006 078006 078006 078006 078006 078006 4b6ab94e 0b93da17 aa61fd05 205ca1 078006 Documentation/perf_counter/config.c tools/perf/util/config.c tools/perf/util/config.c tools/perf/util/config.c tools/perf/util/config.c Documentation/perf_counter/config.c Documentation/perf_counter/config.c Documentation/perf_counter/config.c Documentation/perf_counter/config.c Documentation/perf_counter/config.c Documentation/perf_counter/config.c Documentation/perf_counter/config.c tools/perf/util/config.c tools/perf/util/config.c tools/perf/util/config.c tools/perf/util/config.c Documentation/perf_counter/config.c (Ingo Molnar (Namhyung Kim (Namhyung Kim (Namhyung Kim (Namhyung Kim (Ingo Molnar (Ingo Molnar (Ingo Molnar (Ingo Molnar (Ingo Molnar (Ingo Molnar (Ingo Molnar (Josh Poimboeuf (Namhyung Kim (Wang Nan (Taeung Song (Ingo Molnar 2009--20 21-12-13 21-12-13 21-12-13 21-12-13 2009--20 2009--20 2009--20 2009--20 2009--20 2009--20 2009--20 25-12-15 24--14 25-07-21 26--14 2009--20 15:00:56 22:52: 22:52: 22:52: 22:52: 15:00:56 15:00:56 15:00:56 15:00:56 15:00:56 15:00:56 15:00:56 09:39:39 12::15 11:13:34 16:53:18 15:00:56 +00 +0900 +0900 +0900 +0900 +00 +00 +00 +00 +00 +00 +00-0600 +0900 +0000 +0900 +00 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12) 13) 14) 15) 16) 17) /* * config.c * * Helper functions for p.. * Originally copied from.. * * Copyright (C) Linus Torval.. * Copyright (C) Johannes S.. * */ #include "util.h" #include "cache.h" #include <subcmd/exec-cmd.h> #include "util/hist.h" #include "util/llvm-utils.h" #include "config.h"

4.1 Node.js 소스 Git 으로 살펴보기 미션 1 : node_http_parser.cc 의 Parser 클래스 만든 최초 Commit 을 찾아내라. 1) Node.js 소스 받기 # git clone https://github.com/nodejs/node.git 2) node_http_parser.cc 가 있는 해당 경로로 이동하자. # cd node/src/; 3) blame 을 통해서 Parser 클래스 소스구현 라인중에 최초 commit 을 찾아보자. # git blame node_http_parser.cc;

4.1 Node.js 소스 Git 으로 살펴보기 미션 2 : node.cc 파일이 탄생한 진짜 최초 Commit 을 찾아내라. 1) node.cc 가 있는 해당 경로로 이동하자. # cd node/src/; 2) git log 을 통해서 node.cc 파일이 생성된 최초 commit 을 찾아보자. # git log --reverse -- node.cc; node_http_parser.cc; 3) 만약 최초 생성 commit 이 아니라 단순 경로 이동이라면 그 commit ID 를 바로 직전 commit 의 시점으로 돌아가보자. # git reset --hard <commit ID>~1 4) src/ 폴더아래가 아닌 node/ 아래로 이동해서 다시한번 log reverse 로 추적. # git log --reverse -- node.cc; node_http_parser.cc;

4.1 Node.js 소스 Git 으로 살펴보기 미션 3 : node 프로젝트 자체가 처음 만들어질때 최초부터 Commit 3 개 찾아내라. 1) rev-list 명령을 통한 최초 commit 찾기 # git rev-list --max-parents=0 HEAD 2) 최초 commit 을 확인해보자. # git show <commit ID> 3) 최초부터 3 개까지 commit 을 찾고 show 를 통해서 살펴보자. # git rev-list HEAD tail -3; git show <commit ID>

4.2 Submodule 이란 프로젝트를 수행하다 보면 다른 프로젝트를 함께 사용해야 하는 경우가 종종 있다. Git 저장소 안에 다른 Git 저장소가 들어갈 수 있다는것이 서브모듈이다.

4.2 Submodule 간단한 첫번째 실습 1) 임의 프로젝트 생성 후 해당 경로로 이동 # mkdir submodule_test; cd submodule_test; 2) Git 초기화 및 한개 commit 생성 # git init; touch test; git add test; git commit -m first 3) 서브모듈 추가하기 # git submodule add https://github.com/taeung/git-training.git 4) 추가한 모듈에 대해서 확인해보자 # cat.gitmodules

4.2 Submodule 간단한 두번째 실습 1) 서브모듈을 포함하는 프로젝트 clone 하기 # git clone https://github.com/erkobridee/lab-angularjs.git 2) 포함된 서브모듈정보를 확인해본다 # cat.gitmodules 3) 원래 포함해야하는 서브모듈에 대한 초기화 # git submodule init 4) 비어있던 서브모듈 소스 받아오기 ( 업데이트 ) # git submodule update

4.3 Stash 간단한 실습 Stash 란 add 하지 않은 변경사항 임시저장 해두는 기능 taeung ~/git/linux-perf/tools/perf :> git status On branch perf/config/default-value-v6 Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: modified: util/config.c util/config.h no changes added to commit (use "git add" and/or "git commit -a")

4.3 Stash 간단한 실습 1) 하나의 프로젝트를 clone 해서 내려받아서 # git clone https://github.com/taeung/git-training.git 2) README.md 파일을 임의로 수정해보고 stash 로 임시저장하자. # cd git-training; vi README.md; git stash 3) 현재 임시저장된 사항에 대한 리스트를 확인한다 # git stash list 4) 특정 stash 기록을 적용한다 # git stash apply stash@{0} 5) 특정 stash 기록을 삭제한다 # git stash drop stash@{0}

Thank You References l Namhyung Kim - Advanced Git Usasge (Git internals and useful tips) Scott Chacon, Ben Straub - Pro Git chapter 10.