1. Git
보존하는 Version 관리를 하는 시스템이다.
- 만약, 수정을 잘 못 해서 복구할 수 없거나 이미 저장해 버린 상태라면?
- 심지어 여러 사람이 하나의 파일을 다 같이 작업 중이라면?? 근데 문제가 터진다면???
- 과제할 때 만들던, 최종, 진짜 최종, 리얼 찐막 같은걸 계속 저장해 두는 것 과 같다.
- 스냅숏 : 날짜별로 저장된 백업 파일
- commut : 스냅숏을 만드는 활동
- Gtihub 와는 다르다! : 깃허브는 깃을 이용한 저장소이다.
- commut : 스냅샷을 만드는 활동
- Gtihub 와는 다르다! : 깃허브는 깃을 이용한 저장소이다.
즉, 깃을 이용해 백업 혹은 프로젝트를 저장하고, 그것을 깃 허브에 올려서,
누구든지 혹은 자신 스스로 환경에 구에 받지 않고 사용할 수 있게 한다.
- Fork : 내가 프로젝트에 기여하고 싶다면? 그 프로젝트(오픈소스)를 내 원격 저장소로 가져와야 한다. 이것이 Fork다.
- Clone : Fork한 소스코드를 내 컴퓨터로 가져온다 -Push : 나의 작업이 끝나면 다시 Push 해서 모두가 다시 사용할 수 있도록 원격 저장소로 옮겨 준다.
- Pull : 또 변경사항이 있을때는 Pull 해서 내 컴퓨터로 가져올 수 도 있다. 위의 과정을 통해서 github애 서 받아온 clone 들을 내 컴퓨터로 가져올 수 있다.
(git clone 깃허브에서 가져온 주소 명령어 사용)
2. Git 명령
- git init : 폴더를 하나 지정해서, 이 폴더를 Repository로 지정함.
- git config --global user.name "이름" : 사용자 이름을 정한다.
- git config --global user.email "메일 주소" : 사용자 메일 주소를 정한다.
- git status : 지금 Staging area 와 Unstaged files를 알아본다.
- git restore 파일 이름 : Work space의 변경사항을 clone을 처음 받아온 상태로 돌린다.
- git add. : 싹 다 Staging area로 옮겨라 (원래는. 대신 파일 이름)
- git commit (메시지를 넣으려면? -m "메시지(메시지도 변수 이름 정하는 것과 마찬가지로 보기 의미 있게, 직관성 있게 작성한다.)" :
말 그대로 커밋. 이 시점의 파일들을 저장한다.
- git log : 이때까지 만든 commit들을 확인한다.
- git reset 돌아갈 시점의 commit 코드 앞 6개 : 그 시점의 commit으로 돌아간다.
- 이때, 코드 뒤에 --hard를 붙이면, 원래 있던 시점으로는 갈 수 없게 된다. 원래 있던 파일들의 기록 정보를 함께 버린다.
- git revert 취소할 시점의 commit 코드 앞 6개 : 과거에 했던 기록을 보고 그것과 똑같은 새로운 commit을 만든다. (git rest과 비슷하긴 하나 조금 다르다.)
- 이때, 코드 뒤에 HEAD^ 를 붙이면 바로 전의 commit을 취소할 수 있다.
- git branch 만들 branch이름 : 지금의 시점에서 branch(가지)를 치겠다. 즉, 새로운 분기를 만들어 저장하겠다.
(ex : 엔딩이 여러 개인 게임을 위해 분기점에 저장하는 것)
- git checkout 넘어갈 branch이름 : 다른 branch로 이동하겠다.
- git merge 가져올 branch이름 : 가져올 branch를 지금 있는 branch에 합친다.
- git branch -D 지울 branch 이름 : 다 사용한 branch를 지운다.
- git push origin master(거의다 기본 설정인 origin에 master) : 이제 다 작업되고 merge까지 마친
'master' branch를 Remote Repository에 업로드한다.
- git remote : 원격 repository를 확인할 수 있다.
3. 혼자 작업 시 merge 시 충돌.
만약, 서로 다른 branch 사이에 같은 파일의 같은 코드를 다른 내용으로 수정했다면, 충돌이나 아예 branch 이동조차도 되지 않는다.
수정을 하고 옮기라고 경고창이 바꿔야 할 파일 이름과 함께 뜬다. VScode에서 보면 어떤 것이 충돌이 났는지 색깔로 확실히 볼 수 있다.
4. Github를 이용한 업로드
여러 명이서 함께 작업하거나, 혼자서 작업을 하더라도 Remote Repository에 작업물을 업로드하는 것이 중요한데, 이것을 github에 하면 된다.
- 어떻게 하는가?
- 깃허브에 가서 Repository를 만들어준다.
- 만든 Repository에 코드가 있다. 그것을 이용해 내 컴퓨터의 Repository를 등록하고 그때 뜨는 주소를 명령어 git remote add 주소로 등록까지 한다.
(거의 rocal의 master branch가 원격의 origin이라는 master를 추적한다고 뜬다. 이것이 기본 설정인 이름들이라서 그렇다.)
- github에 가서 확인한다.
- 이제 git push origin master를 입력하면 github에 업로드가 된다.
- 만약, 공개된 오픈 소스라도 유저 정보와 같이 함께 공유되서는 안 되는 내용이 있다면?
- gitignore 파일을 만든다. 이후 add 해서 commit 하고 push 하면 github에서는 안 보이는 파일이 만들어진다!
- 실행하면 패키지가 받아진다던지, 코드를 이용해 생산되는 것이라거나, 보안이 중요한 정보들을 이곳에 작성하면 된다.
- 이미 골격이 있는 프로그래밍 프로젝트를 보면. gitignore파일을 볼 수 있다.
내용은 깃에 올릴 필요가 없는 것이나 컴퓨터의 ID 세팅이 나와 있다고 한다.
5. 작업 주고받기
remote repository와 local repository의 설정이 끝난 이후, remote add 상대 이름 주소로 repository를 연결해 준다.
- 작업 주고받기에 쓰이는 명령어
- git remote -v : local repository와 연결된 remote repository목록을 확인할 수 있다.
- git fetch : 입력 후에 git status를 입력해 보면 github에 올라와 있는 상황을 알려준다.
- git pull 원격명 브랜치 이름 : 업데이트된 내용을 github에 직접 가지 않고도 다운로드하여 준다. commit 내용도 동기화시켜 준다.
6. 여럿이서 작업 중에 merge와 pull로 인한 충돌
예를 들어, 이미 A라는 사람이 어떤 commit을 받아 수정하고 push까지 마쳤는데, B는 그것을 pull 받기 전에 이미 고쳐 버렸다. 이럴 때 충돌이 일어난다.
혹은 혼자 작업할 때처럼 같은 부분을 고쳤을 때도 마찬가지.
이럴 때는 알아서 합의를 보고 수정한다. 이후 add 하고 commit 하고 push 해서 업로드까지 하면 된다.
몹시 편한 기능이다. 하지만 사용할 때 오류가 난다면 상대에게 민폐가 될 수 있기도 하다.
그러므로 혼자서 연습을 많이 해 보는 것이 좋겠다.
코드를 다룰 때 고민하는 시간을 줄이는 것이 좋겠다. 그 시간에 뭔가 적으면서 답에 가까워지면서 바로 틀리고
다시 수정하는 방법이 가장 빠르게 실력을 늘려가는 방법이라고 한다. 그리고 물론, 정답은 계속 최대한 안 보는 것이 좋겠다.
주말 동안 다시 한번 이중 반복문의 소수 구하는 방법을 정리할 예정이다. 이제 이중 반복문도 조건문처럼
익숙하게 사용은 할 수 있는데
소수만 나오면 너무 헷갈린다. 조금 더 매달려 봐야겠다.