반응형

많은 오프소스들이 Dockerfile을 만들어서 유지하고있다. Dockerfile을 뭔지 따로 공부하면 좋은

별다른 설정없이 Dockerfile을 통해서 컨테이너를 한 번에 생성할 수 있음.(개발환경 구축이쉬움)

Dockerfile을 통해서 이미지를 만들고 => 컨테이너 => (pytorch를 위한)특정한 개발환경을 위한 독립된 리눅스 환경 구축됨

 

git clone으로 소스 가져오고 폴더이름을 examples로 바꿈

 

-git 기본 명령어 소개(폴더, 파일 다루기)

ls => 폴더 내용을 확인한다.

mv => 파일명 변경 or 파일 이동

cd : change directory 폴더 이동

pwd : print working directory 현재 경로를 출력한다.

 

현재 진행하고있는 git/github : 오픈소스 프로젝트 pytorch에 개발참여를 한다는 컨셉으로 진행하고 있다.

1.개발환경 구축 : 컨테이너로 했음.

2.fork : 프로젝트 복사

3.clone : 소스 다운로드(git history포함해서 다운됨)

4.프로젝트 개발 현황 파악/분석 (Reading Skill)

5.소스 수정 => commit 히스토리 저장

6.수정내용 제출 => Pull-Request(PR)

 

 

 

 

 

-개발자가 오픈소스를 읽는 방법

1.누가 제일 많이 개발하나

 

git log --oneline | wc-l : 해당 프로젝트가 commit을 몇 번 (수정)했는지 알아냄

git log --oneline 라인으로 수정된 commit 보여줌

git log p 더 세부적인 수정된 commit

git log - -oneline -- mnist/ : 특정 폴더나 파일 기준으로 로그를 보여줌(shortlog처럼 상세 조건 추가 가능)

git log --oneline --before=2020-06-30 --after=2020-06-01 | wc l :한달 간 수정(commit)내역 개수

 

clone => commit 504=> base commits : 내가 commit하기 전에 현재 commit504개인데, 이게 base commits이다. , 내 커밋은 base commits위에 작업하고 있는 것. base를 바꾸려면 rebase명령어. base는 계속 바뀐다. 그러므로 rebase가 필요.

-각 개발자가 얼마나 커밋했는지 랭킹보기(깃허브에서 insights->contributor로 볼 수 있지만 CLI 명령어로 더 자세히 볼 수 있음(ex).원하는 폴더 기준으로 컨트리뷰터 랭킹도 볼 수 있음.(세밀화) - 세밀하게 보는 목적 : 협업(리뷰나 토론할 분을 찾기위함)

git shortlog -sn | nl (해당 프로젝트 커밋 랭킹)

git shortlog sn -- mnist/ (해당 파일 커밋 랭킹)

git shortlog sn --after=2018-01-01 -- mnist/ (2018.01.01.일 이후 커밋 랭킹)

수단 사용을 어떤 목적을 위함인지가 중요하며 그것을 토대로 명령어 입력

git log - -oneline - -no-merges : 병합된 것을 제외하고 커밋 로그 보여줌.

로그가 너무 길어서 명령어가 입력이 안되는 분들은 :q 치시면 다시 명령어 입력창으로 돌아오실 겁니다!

 

git show 6c8e2ba (해당 코드 관련 히스토리 보여줌)

git show 6c8e2ba | grep “diff --git” (몇개의 파일이 수정되었는지)

git show 6c8e2ba | grep “diff --git” | wc l (수정된 개수)

협업 시 적절하게 commit message를 입력해야함.

Fix : 잘못된 것을 고친 것.

Improve : 원래는 잘 되던 것인데, 개선한 것. ex)10-> 5

Add : 없는 기능, 옵션 추가할 때

Implement : 구현하다.(discussion한 부분을 구현했다.)

Support : ex)윈도우 -> 리눅스에서도 가능하게, ARM에서 되는 것을 x86에도 되게

 

git log reverse : 옛날 꺼부터 보기

가장 처음에 만든 commit을 찾는 방법은? git log - -oneline - -reverse | head -1

오류 : git log --oneline - -reverse n 1 :1개 먼저 골라지고 reverse.(우선순위 문제)

# 차후 소스코드 파일수정 내역(commit) 저자(author)정보

$ git config --global user.email "본인메일적으세요"

$ git config --global user.name "본인이름적으세요

#추가적으로 nano에디터 다운받아야함

git config --global core.editor nano

git sudo apt install y nano

 

git config list 입력한 정보 보기(정보 입력 잘못했을 때)

 

#개발 참여를 위한 수정(commit)작업

작업의 시작 : ”브랜치(branch) 생성

git 브랜치란? ”작업의 단위

우리는 프로젝트 참여자 관점.

브랜치를 언제 만들ᄁᆞ ? :Fix 작업을 시작할 때

 

# Branch 생성(만약 오류뜰 경우 잘못된 파일 생성된 것이므로 ls로 확인 후 “rm 잘못된파일명렁어 실행해서 제거 or git reset --hard 입력해주시고 브랜치 생성하면 됨.)

$ git checkout b fix-mnist

브랜치 효과/기능 : 같은 폴더인데 다른 세상느낌(파일을 다 지워도 master파일로 이동하면 다 있음 git checkout master)

브랜치 삭제 : git branch D fix-mnist

 

수정해보기

nano mnist/main.py 들어가서

코드 수정 후 ctrl+o엔터, ctrl+x, git diff하면 바뀐 거 볼 수 있음

 

git add mnist/main.py

git commit m “”

 

push : 나의 프로젝트에 commit 업로드 하는 용도

pull request : 팀프로젝트에 내가 만든 commit 제출

push를 하기위한 토큰 생성 https://github.com/settings/tokens/

(1)Generate token 버튼 클릭

(2)토큰명 적기 (: test_token)

(3)workflow 체크박스

(4)Generate token 버튼 클릭해서 생성

(5)생성된 토큰 복사

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

1.git push origin fix-mnist

2.토큰 붙여넣기

3.패스워드 그냥 엔터

 

pr할 해당 깃허브 프로젝트 들어가서 내 브랜치(fix-mnist)선택하여 pr 날림

 

-Rebase

최신역사로 베이스 업데이트해야함. 왜냐하면 과거 베이스 커밋에 업데이트하면 코드가 겹쳐버릴 수 있기때문.

rebase를 사용하지 않았다면 다른사람과 프로페셔널한 협업을 안해봤다는 것. 분업을 했을 뿐

 

diff수정결과 체크

git stash : 수정내용 잠시 저장해두기

git stash pop : 저장한 수정 내용 다시 복구

git stash liststash 한 것들 조회

 

git checkout -- mnist/main.py : 수정된 파일을 원상복구 시키는 방법

stash, checkout 차이점 :

아까는 브랜치 생성할 때 쓴 checkout은 무슨 의미일까? : 도서관(히스토리 창고=git폴더) 책을 대출받을 때 = 히스토리 창고(.git)에서 가져온다는 느낌으로 이해하기. (브랜치 변경 명령어가 아님)

ex)git checkout -- ./ : 현재 경로의 모든 폴더를 원상복구

 

#git reset (커밋될 코드 취소)

ex)nano mnist/main.py 로 파일 수정해서 git add mnist/main.py 까지했을 때 git reset으로 취소 가능

 

# 수정한 내용 기준으로 commit 할 준비하기

$ git add mnist/main.py

# commit 만들기

$ git commit -m "Add import json"

# 생성한 commit 정보 확인하기

$ git show

$ git log --oneline -1

 

# commit 정보 삭제하기

# 참고: HEAD~1 은 가장 위에서 첫번째 내용을 삭제한다는 의미

$ git reset --hard HEAD~1

# 삭제 후 가장 최신 commit 확인하기

$ git log --oneline -1

 

-라이센스 서명 넣어서 커밋하기

-s m or sm을 커밋할 때 넣으면 Signed-off-by가 생김. ? 라이센스 서명 절차(서명 안하면 소송 걸릴 수도 있음 안하는 곳도 있고, CLA로 미리 절차를 밟는 경우도 있음)

#기존의 commit을 수정하기

--amend 옵션으로 수정할 수 있다.

최신 commit을 수정할 수 있다.

# 최신 commit 수정이전 commit ID 확인하기

$ git log --oneline -1

106d167 (HEAD -> fix-mnist) Add import requests

# 내용 수정하기

# 수정한 내용 commit 할 준비 하기

$ git add mnist/main.py

# 최신 commit 수정하기(이 전에 커밋한 내용 흡수)

$ git commit amend (amend들어갔을 때 커밋 메시지도 수정 가능)

# 최신 commit 수정 이후 commit ID 확인하기

$ git log --oneline 1 or git show

9786c82 (HEAD -> fix-mnist) Add import requests

 

+ Recent posts