많은 오프소스들이 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하기 전에 현재 commit이 504개인데, 이게 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 list로 stash 한 것들 조회
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
'오픈소스 컨트리뷰션 아카데미' 카테고리의 다른 글
[2022 OSSCA] Fluent API, DSL(도메인 특화 언어) (0) | 2022.07.18 |
---|---|
[2022 OSSCA] azure function 생성 및 리팩토링 + openAPI document 생성 (0) | 2022.07.12 |
[2022 OSSCA] open source project 개발 환경 설정 (1) | 2022.07.11 |
[2022 OSSCA] 깃허브 협엽 관련 중요 명령어(고급편) (0) | 2022.07.10 |
[2022 OSSCA] 오픈소스 컨트리뷰션 아카데미 발대식 (0) | 2022.07.10 |