오늘은 화, 수요일 이틀에 걸쳐 송태웅 강사님의 GitHub 특강이 있는 날이다~
GitHub·goorm 회원 가입하고 goorm IDE에 리눅스(컨테이너) 개발환경 추가. SW stack은 Pytorch
<프로젝트 협업 참여 시나리오>
1. fork 프로젝트 복사
2. clone 소스코드 다운로드
3. 프로젝트 분석·경향 파악
4. commit 코드 수정 작업
5. push 작업 commit 업로드 (fork 프로젝트 O / 팀 프로젝트 X)
6. Pull-Request 나의 작업(commit) 제출
commit : commit message(코멘트. 수정한 이유) + diff(소스 파일의 변화분)
Merge commit : 병합 커밋. 수정 내역(diff)은 없음. 빈 깡통 커밋
<Git 기본 명령어>
pwd : print working directory. 현재 작업 위치 확인
ls : 폴더 안에 내용 확인
cd : 폴더 경로 이동하기. cd ..은 상위 폴더로 나가기
mv 원본 파일명 변경할 파일명: 파일명 변경하기 or 파일 경로 이동시키기
touch 파일명: 빈 파일 생성하기
rm 파일명: 파일 삭제하기
clear : 작업창 비우기
df -h / : 현재 메모리 사용 현황
Pytorch 예제
# 해당 오픈소스에서 "누가 제일 개발을 많이할까?"
# 참고: nl 명령은 파일의 line number 명시 (순위표시용으로 사용)
git shortlog -sn | nl
# git shortlog -s 옵션이란? "개발자별 commit 개수 요약"
git shortlog -h | grep summary
-s, --summary Suppress commit descriptions, only provides commit count
# git shortlog -n 옵션이란? "개발자별 commit 개수 순위 정리"
git shortlog -h | grep number
-n, --numbered sort output according to the number of commits per author
# 전체 소스파일 수정내역(commit) 개수 세기
git log --oneline | wc -l
# 참고: wc -l 명령은 (파일) 라인수 개수 측정
# 전체 소스파일 수정내역(commit) 리스트
git log --oneline
git log --oneline --no-merges
# 참고: 'q' 키 눌러서 나가기
# 소스수정 내역(commit) 한가지 확인하기
git show 6c8e2ba
# 해당 commit(6c8e2ba)의 수정한 파일들 확인하기
git show 6c8e2ba | grep "diff --git"
# diff --git a/dcgan/main.py b/dcgan/main.py
# diff --git a/fast_neural_style/download_saved_models.py b/fast_neural_style/download_saved_models.py
# diff --git a/run_python_examples.sh b/run_python_examples.sh
# diff --git a/word_language_model/main.py b/word_language_model/main.py
# 해당 commit의 수정한 파일 개수 확인 : 4
git show 6c8e2ba | grep "diff --git" | wc -l
# 전체 소스파일 수정내역(commit) 리스트
git log --oneline
# 전체 소스파일 수정내역(commit) 자세히 보기
git log -p
# 특정 폴더를 기준으로 소스 수정내역(commit) 리스트 확인하기
git log --oneline -- mnist/
# 2020년 6월 한달간 소스 수정내역(commit) 개수
git log --oneline --after=2020-06-01 --before=2020-06-30 | wc -l
# 소스파일 수정내역(commit) 옛날 것부터 살펴보기
git log --reverse
<commit message 첫 단어>
Fix : 잘못된 것을 고침
Improve : 잘되던 것을 개선 ex) 10→5초
Add : 없던 기능·옵션을 추가
Support : ex) 윈도우→리눅스, x86→ARM
Refactor : 코드 재배치
Implement : 구현
소스파일 수정내역(commit) 내용 확인
오픈소스 개발 참여 준비
Git 설정, Git 기본 편집기(nano) 설정
git config --global user.name "Jiyeon Lee"
git config --global user.email ljy9969@gmail.com
git config --global core.editor nano
sudo apt install -y nano
git config --list # Git 설정 내용 확인하기
Branch : 같은 폴더의 다른 세상
git checkout -b fix-mnist # fix-mnist라는 이름의 Branch 생성
touch hi.txt # hi라는 이름의 텍스트 파일 생성
git add hi.txt # 새로운 파일의 수정내역(commit) 생성
git commit -m "test: add hi.txt file"
git checkout master # Branch를 master 브랜치로 변경
ls # 폴더 내 hi.txt 파일 존재여부 확인
git checkout fix-mnist # Branch를 fix-mnist 로 변경 후 hi.txt 파일 존재여부 확인
ls
git checkout master
git branch -D fix-mnist # Branch 삭제
git status # 현재 소스파일 상태(status) 확인, nothing to commit = 커밋할게 없다
오픈소스 개발 참여를 위한 수정(commit) 작업
nano mnist/main.py # 원하는 편집기로 mnist/main.py 파일 수정
git diff # 수정한 내용 확인
git add mnist/main.py # 소스 수정내역(commit) 만들기 준비
git status # Commit 할 준비완료 상태 확인
git commit -m "Correct typo in default value within help" # commit을 만든 이유 작성
git show # 내가 작성한 commit 확인
Pull-Request : PR. 오픈소스 프로젝트에 내가 만든 commit 작업 제출
git branch # 나의 작업 브랜치 fix-mnist 확인
git remote -v # GitHub와 잘 연동됐는지 확인
git push origin fix-mnist # 내 commit을 나의 Fork 저장소 GitHub에 업로드해서 제출(PR) 준비
git stash : commit 임시저장
git status # 수정한 파일 확인
git stash # 수정한 내용 잠시 저장(stash)
git status # 현재 소스폴더 상태 확인: 아무 수정분 없음
git stash pop # stash 내용 복구
git status # 복구된 수정한 파일 확인
git checkout -- mnist/main.py : 파일을 지정해서 최신 역사를 기준으로 파일 내용을 복구시킴, 덮어쓰기
git add mnist/main.py # commit할 준비
git status
git reset # add 명령 취소
git status # commit할 준비 취소 후 상태 확인
commit 삭제
git add mnist/main.py # 수정한 내용 기준으로 commit할 준비
git commit -m "Add import json" # commit 만들기
git show # 생성한 commit 정보 확인
git log --oneline -3 # 위에서부터 3번째 행까지 조회
git reset --hard HEAD~1 # commit 정보 삭제. HEAD~1 은 가장 위에서 첫번째 내용을 삭제함
git log --oneline -3 # 삭제 후 가장 최신 commit 확인
라이선스 서명 넣어서 commit message 넣기
git add mnist/main.py # 수정한 내용 기준으로 commit할 준비
# commit 만들기. -s 옵션 포함시 라이센스 서명을 commit message 안에 포함함
git commit -s -m "Add import requests" # -sm 동일함
git show # commit message 안에 Signed-off-by 확인
commit b875ceb20214246a5a43c9495dcd226aced8d3b3 (HEAD -> fix-mnist)
Author: Jiyeon Lee <ljy9969@gmail.com>
Date: Tue Feb 8 06:51:04 2022 +0000
Add request
Signed-off-by: Jiyeon Lee <ljy9969@gmail.com>
diff --git a/mnist/main.py b/mnist/main.py
index dc816d2..b2d9a61 100644
--- a/mnist/main.py
+++ b/mnist/main.py
@@ -6,7 +6,7 @@ import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.optim.lr_scheduler import StepLR
-
+import requests
class Net(nn.Module):
def __init__(self):
git commit --amend : 최신 commit 수정. commit ID가 새로 부여됨
git log --oneline -3 # 최신 commit 조회
106d167 (HEAD -> fix-mnist) Add import requests # 첫번째 행의 commit ID 확인
git add mnist/main.py # 수정한 내용 commit 할 준비
git commit --amend # 최신 commit 수정
git log --oneline -3
9786c82 (HEAD -> fix-mnist) Add import requests # 최신 commit 수정 이후 commit ID 확인
origin : 나의 Fork 저장소 GitHub
upstream : 오픈소스 공식 GitHub(또는 팀 프로젝트)
오픈소스 프로젝트 개발 참여 중 Rebase가 필요한 상황 : 협업하는 사람이 많으므로 최신 역사로 베이스를 업데이트
upstream에 merge 하는 것과 upstream에서 fetch/rebase 후 origin에 force push 하는 것은 다름
# 오픈소스 공식 GitHub 프로젝트 URL를 upstream으로 등록
git remote add upstream https://github.com/taeung/pytorch-example
git remote -v # GitHub와 잘 연동됐는지 확인
git fetch upstream master # 공식 upstream 저장소에서 최신 commit history 가져오기
git rebase upstream/master # 최신 commit history 기준으로 베이스 갱신 (rebase)
git push --force origin fix-mnist # Fork한 저장소(GitHub)도 수정하기 (PR 자동 갱신)
1. 1/17 월 | 2. 1/18 화 | 3. 1/19 수 | 4. 1/20 목 | 5. 1/21 금 |
취업 특강 | 파이썬 환경 설정 (파이참, 아나콘다, 주피터 노트북) |
파이썬 데이터 타입 (list, tuple) |
파이썬 데이터 타입 (range, string, dictionary, set, bool) |
파이썬 사용자 정의 함수, 객체지향, 사용자 정의 클래스 |
6. 1/24 월 | 7. 1/25 화 | 8. 1/26 수 | 9. 1/27 목 | 10. 1/28 금 |
파이썬 사용자 정의 클래스, 사용자 정의 모듈 |
DB(MySQL) DBMS, MySQL 환경 설정, DB/테이블 생성, DB 입력·활용, Index |
DB(MySQL) View, 백업과 복원, DB 모델링, 관계(PK, FK), DML(CRUD), 데이터 타입 |
DB(MySQL) DML(CRUD), WHERE 조건, 패턴 매칭, SubQuery, 정렬, 그룹핑, 집계 함수, 트랜잭션(ACID 특성) |
DB(MySQL) JOIN, UNION, NOT IN, WEB |
11. 2/3 목 | 12. 2/4 금 | 13. 2/7 월 | 14. 2/8 화 | 15. 2/9 수 |
WEB WebStorm 환경 설정, HTML, CSS, JavaScript, jQuery CDN |
WEB jQuery 문법, Selector, Method |
WEB jQuery Method, Event, AJAX |
GitHub 특강 소스코드 관리, Fork, Clone, Branch, Commit, Push, Pull-Request, Rebase |
GitHub 특강 프로젝트 관리 |
* 협업을 위한 Git 프로젝트 경향 파악과 diff 읽는 능력 기르기!