Skip to content

leejunhyeong1024/oss_git_example

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OSS 1_1

Octoverse at GitHub

OSS(Open Source Software)란?

소프트웨어 저작권 소유자가 모든 사람에게 소스 코드를 게시, 사용, 복사, 수정 및 배포할 권리를 부여한 소프트웨어

OSS License

오픈소스 소프트웨어의 사용, 복제, 수정, 배포 권한 범위 지정

  1. 상용화 관점
    Commercial SW (E.g. Windows)

    • 개별 이용 허락
    • 로열티 지급
    • 실행 바이너리만 제공
    • 복제, 배포, 수정 불가
    • 사용기간과 목적 제한

    Open Source SW

    • 일괄 사전 이용허락
    • 로열티 없음
    • 소스코드 제공
    • 복제, 배포, 수정 허용
    • 기간/목적 제한 없음
  2. 철학적 관점 Free Software VS OSS

    • Richard Stallman (Free Software)

      • Creater of GNU project
      • FSF(Free SOftware FOundation 1984~)
      • copyleft(no SW patent, NO DRM)
    • Eric S. Raymond (OSS)

      • OSI(Open Source Initiative 1998~)
      • Ambiguity of free
      • Combination of OSS and Closed Source SW(오픈소스와 상용 소프트웨어 인정 및 결합)
      • License under Law

OSS License

Linking with Propertary SW(상용 소프트웨어와의 연동)

  • GPL 2.0: No → GPL은 강력한 copyleft라서 GPL 코드와 연결(link)된 소프트웨어는 전체가 GPL을 따라야 함.
  • LGPL: Yes → 라이브러리 수준에서 링크는 허용되며, 수정한 부분만 공개하면 됨.
  • MIT / BSD: Yes → 매우 자유로움
  • Apache 2.0 / MPL: Yes → 둘 다 linking은 허용.

Must Publish Modification(수정 시 공개 의무)

  • GPL 2.0: Yes → 수정본을 배포할 때 반드시 소스코드를공개.
  • LGPL: Yes → 라이브러리수정 시 공개 의무가 있음.
  • MIT / BSD: No → 자유롭게 수정 가능하나, 소스코드 공개 의무 없음.
  • Apache 2.0: Yes → 수정한 파일에는 고지(Notice)를 남겨야 함. GPL처럼 전체 소스를 공개할 필요는 없음.
  • MPL 1.0/1.1: Yes → 수정한 파일 단위로 공개해야 함 (file-level copyleft).

Patent Protection(특허 보호 조항)

  • GPL 2.0: No → 특허에 대한 명시적 보호 조항 없음.
  • LGPL: No → 특허에 대한 명시적 보호 조항 없음.
  • MIT / BSD: No → 특허에 대한 명시적 보호 조항 없음.
  • Apache 2.0: Yes → 특허 라이선스(사용자에 대한 특허권 허여 조항)가 포함됨.
  • MPL 1.0/1.1: Yes → 특허 조항이 포함됨.

OSS 2_1

VCS(버전관리 시스템)

시간 흐름에 따른 변화를 추적하여 언제든지 이전 작업 버전으로 쉽게 돌아가도록 돕는 시스템

VCS가 없다면?

  • Make a single backup copy
  • Add a version number, date
  • Use a shared folder so other people edit together

VCS software

  • CVS(Cocurrent Version System) - 최초의 VCS
  • SVN(Subversion) - 두 번째
  • Mercurial
  • Dracs
  • Git

Repository(Repo) - 버전 정보가 모두 저장되는 저장소

General Action in VCS

  • Checkin - 파일의 변경 사항을 저장소에 기록

  • Checkout - 저장소에 있는 파일의 특정 버전을 작업 공간으로 가져옴

  • Diffs - 버전 간의 차이점 확인

  • Branching - 버전 관리를 여러 분야로 나눔, 코드를 분리하여 독립적인 개발 공간을 만듦

  • Merging - 분리된 Branch의 변경 사항을 다른 Branch와 합침

  • Conflicts - 동일 코드를 여러 사람이 수정 후 각자의 변경 사항을 저장하려 할 때 발생, 자동으로 해결되지 않음

    • Re-apply - 자신의 변경 사항 재적용 (E.g. Joe의 변경 사항 + Sue의 변경사항)
    • Override - 자신의 변경 사항을 덮어씌움(권장하지 않음)
  • Tagging - 특정 버전에 tag(label) 지정

VCS의 종류

  1. Centralized VCS (E.g. CVS, SVN)

    • 중앙 서버 존재
    • 하나의 저장소만 존재, 모든 사용자가 여기에 연결
  2. Decentralized VCS(E.g. GIT, Mercurial, Dracs)

    • 모든 사용자가 개인의 저장소를 가짐
    • 별도의 원격 저장소와 동기화
    • 원격 저장소와 함께 새로운 협업 방식 사용 - fork, pull request

GIT

Linus Torvalds가 리눅스 커널 개발 협업을 위해 개발

  • Workplace - 사용자가 파일을 수정하는 공간
  • Index(Stage) - 다음 커밋에 포함될 파일을 준비하는 공간
  • Local Repository - 로컬 컴퓨터에 커밋된 파일의 이력 저장
  • Remote Repository - 다른 사용자와 공유하기 위해 원격 서버에 존재하는 저장소

GIT Workflow

Workflow

  • git clone

원격 저장소(Remote Repository)의 전체 이력과 파일을 로컬 컴퓨터로 복제, 명령어는 로컬 저장소와 작업 공간(Workspace) 을 동시에 생성, 최초 1회 내려받을 때 적합

  • git add

작업공간에서 수정한 파일을 인덱스에 올려 다음 커밋에 포함될 준비

  • git commit

인덱스에 있는 변경사항을 로컬 저장소에 영구적으로 기록, 저장 시 메시지를 남겨 변경 내용 설명

  • git commit -a

add 생략, 모든 변경 사항을 add + commit

  • git push

로컬 저장소의 커밋 이력을 자신이 업로드 권한을 가진 원격 저장소에 업로드하여 다른 사람과 공유

  • git fetch

    동료가 작업한 내용을 내려받음, 반복해서 내려받을 때 적합, 내 로컬 저장소가 아닌 별도의 공간(부 로컬 저장소)에 저장

  • git merge

부 로컬 저장소 + 내 로컬 저장소, 내가 작업한 내용과 fetch한 작업 내용이 합쳐짐, 한 파일은 한 사람만이 소유권을 가짐, 자동으로 실행되지 않음

  • git pull

fetch + merge 원격 저장소의 최신 이력을 즉시 로컬 브랜치에 통합, 권장하지 않음

  • git diff

현재 작업 공간의 파일과 인덱스, 또는 특정 커밋과의 차이점을 보여줌

  • git diff HEAD

현재 작업 공간의 파일과 가장 최근 커밋간의 차이점을 보여줌

  • fork

다른 사람의 원격 저장소 전체를 복사하여 자신 아래 새로운 원격 저장소를 만듦

  • pull request

fork한 저장소에서 수정한 내용을 원래의 원격 저장소에 병합해달라고 요청함

fork와 pull request는 GIT 내부 기능, 명령어가 아님

OSS 3

Markdown

일반 텍스트 편집기로 형식이 지정된 텍스트를 만들기 위한 경량 마크업 언어

John Gruber, Aaron Swartz가 개발 (2004)

GITHUB의 REAEME 파일 작성 등 널리 사용됨

Markdown 문법

  • 볼드, 이텔릭

    • 볼드체

      글자 바깥에 ** 사용

      **볼드체** -> 볼드체

    • 이텔릭

      글자 바깥에 _ 사용

      _이텔릭_ -> 이텔릭

    • 함께 사용 가능

      _**함께 사용**_ -> 함께 사용

  • 헤더

    # 개수로 글자 크기 조정

    Header one

    Header one

    Header one

    Header one

    Header one
    Header one
  • 링크

  • 인라인 링크

    링크할 텍스트를 []로 감싼 뒤, 링크 주소를 ()로 표시

    [Markdown](https://www.markdowntutorial.com/) -> Markdown

  • 참조 링크

    [깃허브][github] 
    [구글][google]
    [GITHUB][github]
    
    [github]: www.github.com
    [google]: www.google.com 
    
    

깃허브

구글

GITHUB

  • 이미지

    • 인라인 이미지

      ![텍스트](링크) 로 사용, 링크와 동일하나 앞에 느낌표 추가

      ![Image](https://upload.wikimedia.org/wikipedia/commons/5/56/Tiger.50.jpg) ->

      Image

      • 참조 이미지
      ![Black cat][Black]
      
      ![Orange cat][Orange]
      
      [Black]: https://upload.wikimedia.org/wikipedia/commons/a/a3/81_INF_DIV_SSI.jpg
      
      [Orange]: https://upload.wikimedia.org/wikipedia/commons/5/56/Tiger.50.jpg``` -> 
      
      
      

Black cat

Image

  • 인용문

    문장 앞에 > 기호로 표시

    > 인용문 ->

    인용문

  • 리스트

    • unordered list

      각 항목 앞에 *로 표시

      * 우유
      * 계란
      * 연어
      * 버터
      
      
    • 우유

    • 계란

    • 연어

    • 버터

    • ordered list

    *표 대신 숫자로 표시

    1. 보울 위에 계란 세 개를 깨뜨린다
    2. 우유 3.7L를 보울에 붓는다
    3. 버터를 힘차게 연어에 문지른다
    4. 연어를 우유,계란을 쏟은 보울에 넣는다
    
    
  1. 보울 위에 계란 세 개를 깨뜨린다

  2. 우유 3.7L를 보울에 붓는다

  3. 버터를 힘차게 연어에 문지른다

  4. 연어를 우유,계란을 쏟은 보울에 넣는다

    • 중첩 리스트

      앞 항목보다 한 칸 더 들여쓰기로 중첩 리스트 사용 가능

      * 틴틴
       * 기자
       * 얼간이 같은 주황색 머리
       * 세상에서 제일 멋진 개와 친구들
      
      * 햅덕
       * 선장
       * 멋진 턱수염
       * 위스키 좋아함
       * 아마 스카치도?
      
      
  • 틴틴

    • 기자
    • 얼간이 같은 주황색 머리
    • 세상에서 제일 멋진 개와 친구들
  • 햅덕

    • 선장
    • 멋진 턱수염
    • 위스키 좋아함
    • 아마 스카치도?
  • 한 줄을 건너띄고 다음줄을 들여쓰기하여 단락으로 만들 수 있음

     1. 보울에 계란 3개를 깨뜨린다.
    
     여러분은 흘리지 않고 계란을 깨뜨리고 싶을거에요.
    
     만약 여러분이 좀 흘렸으면, 휴지를 사용해 닦아주세요!
    
    
  1. 보울에 계란 3개를 깨뜨린다.

    여러분은 흘리지 않고 계란을 깨뜨리고 싶을거에요.

    만약 여러분이 좀 흘렸으면, 휴지를 사용해 닦아주세요!

  • 단락

    Markdown에서는 단순 줄 변경(Enter 키)으로 줄을 구분할 수 없음

    줄 나누기를 위해서는 문장 뒤에 공백 두 번(Space Bar 두 번)으로 줄 바꿈을 할 수 있음

줄바꿈을 하지 않았을 때

나는 나 자신과 모순되는가? 그렇다면 아주 잘되었다… 나는 나 자신과 모순이다, (나는 크다… 나는 다량의 것을 품고 있다.)

줄바꿈을 했을 때

나는 나 자신과 모순되는가? 그렇다면 아주 잘되었다…
나는 나 자신과 모순이다,
(나는 크다… 나는 다량의 것을 품고 있다.)

About

OSS 실습 1

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%