프로그래머스 Hash
1. 완주하지 못한 선수
def solution(participant, completion):
participant.sort() # nlog(n)
completion.sort() # nlog(n)
for p, c in zip(participant, completion):
if p != c:
return p
return participant[-1]
2. 전화번호 목록
def solution(phone_book):
phone_book.sort()
for i in range(len(phone_book) - 1):
if phone_book[i] in phone_book[i+1]:
return False
return True
Git (inflearn - 지옥에서 온 Git)
Version Control System
-
Version Control System - Version Management, not by changing the file name
- Backup
- Recovery
- Collaboration
-
CVS, SVN, GIT : Version Control System (Dropbox, Google Drive)
-
Why is it difficult to use GIT? Because real life is more hell than GIT
- Complexity of Code(10) + Complexity of GIT(100) = Complexity of Project(100)
- Complexity of Code(100) + Complexity of GIT(10) = Complexity of Project(80 or less)
- Git은 필요한 상황에서 사용해야 효용성이 있다.
-
What is 'Version'? : '의미 있는 변화' -> 완결된 작업
-
git init
-
git status
-
git add <file name>
orgit add .
-> stage area -
git commit -m "message"
(-m "message"
없이, vim에서 바로 편집도 가능) -> repository -
commit message는 간결하고, 그러면서 풍부하게...
git log, git diff
git log -p
: [가장 최신 commit]과 [그 이전 commit]의 차이를 포함한 commit log 출력 / commit별 차이점git diff <commit id>..<commit id>
: 각 commit id에 해당하는 시점의 차이를 출력
git reset, git revert -> 'commit을 여러 방식으로 되돌릴 수 있다.'
git reset <commit id> --hard
- commit id 에 해당하는 commit을 최신 상태의 commit으로 하고 이후의 버전은 삭제하고(필요하면 복구가 가능하지만 주의) 돌아감.
- 협업할 때, 공유한 이후에는 절대 reset 하지 말 것.
--hard
: 우선은 사용하지만, 추후 위험성을 이해하고 사용할 것.
##### `git revert`
Git
1. 가지(branch)치기
branch 만들기
git checkout -b feature_x
,feature_x
는 만들고자 하는 branch의 이름
master(main으로 바뀜) branch로 branch 이동하기
git checkout master(main)
branch 삭제하기
git branch -d feature_x
branch push(발행하기)
git push origin <branch name>
2. 갱신과 병합(merge)
로컬 저장소를 원격 저장소에 맞춰 갱신하기
git pull
- 원격 저장소의 변경 내용이 로컬 잡업 디렉토리에 받아지고(fetch), 병합(merge)된다.
다른 branch에 있는 변경 내용을 현재 branch에 병합하기
git merge <branch name>
git pull
, git merge <branch name>
병합 중 충돌
git pull
,git merge <branch name>
둘 다 자동으로 변경 내용을 병합 하기위한 시도를 한다.- 문제는, 항상 성공하는 것이 아니라 충돌(conflicts)이 일어나기도 하는데, 충돌이 발생하면 git이 알려주는 파일의 충돌 부분을 직접 수정해서 병합이 가능하도록 해줘야 한다.
변경 내용을 병합하기 전에, 어떤 것이 바뀌었는지 비교해보기
git diff <기준 branch> <대상 branch>
3. 꼬리표(tag) 달기
- 소프르퉤어의 새 버전을 발표할 때마다 꼬리표를 달아놓으면 좋다. (꼬리표는 SVN등에 이미 존재하는 기능)
git tag 1.0.0 1b2e1d63ff
:1.0.0
이라는 tag를 추가한다.1b2e1d63ff
는 tag가 가리킬 확정본(commit)의 식별자- 확정본(commit) 식별코드의 앞부분 일부만 입력해도 tag를 붙일 수 있지만, 그 일부분이 고유하다는 조건이 필요.
git log
: 확정본(commit)목록, 식별코드를 확인할 수 있다.
4. 로컬 변경내용 되돌리기
git checkout -- <file name>
: 변경 내용을 변경 전 상태(HEAD)로 되돌려준다. (이미 인덱스에 추가된 변경내용과 새로 생성한 파일은 그대로 남는다.)- 로컬에 있는 모든 변경내용과 commit을 포기하려면,
git fetch origin
으로 원격 저장소의 최신 이력을 가져오고,git reset --hard origin/master
로 로컬의 master branch가 가져온 이력을 가리키도록 할 수 있다.
5. 유용한 명령어
git config color.ui true
: 콘솔에서 git output을 컬러로 출력하기git config format.pretty oneline
: log에서 commit을 한 줄만 표시하기git add -i
: 파일을 추가할 때 대화식으로 추가하기
'Temp' 카테고리의 다른 글
20210216, Netwhat 단계별로 밟아가기 (IP ~ OSI 7 Layer) (0) | 2021.02.17 |
---|---|
20210206, 프로그래머스 문제 (0) | 2021.02.08 |
20210205, 프로그래머스 문제 (0) | 2021.02.08 |
20210204, 프로그래머스 문제 - 스택/큐 (0) | 2021.02.08 |
20210203, Network (1) (0) | 2021.02.08 |