본문 바로가기

git17

TIL - [Linux/Git] 리눅스는 역시 아직 많이 낯설다! 하지만 느낀점은 이게 익숙해지면 엄청 편할 것 같다!! Command-Line Interface 컴퓨터를 조작하기 위해서는 다양한 입력(Input)이 필요한데, 화면을 보기 위해 마우스를 사용하거나 메세지를 입력하기 위해 키보드를 사용하기도 한다. 입력을 담당하는 키보드나 마우스를 입력 소스(Input source)라고 한다. 반대로, 입력 소스에 의해 또는 작성된 프로그램에 의해 모니터에 화면을 나타내거나, 음악을 재생하거나 사용자가 인식할 수 있도록 하는 일을 출력(Output)이라고 한다. 컴퓨터를 조작하기 위한 입력과 출력을 간단하게 I/O( Input/Output )라고 한다. 리눅스의 터미널은 키보드의 입력과 모니터의 출력으로 모든 작업을 할 수 있다. 리눅스.. 2023. 2. 24.
<16> 생활코딩 - GIT Git을 이용한 프로젝트 흐름(Git Flow) 1 위의 그림이 git에서 폭넓게 받아들여지고 있는 기술을 잘 사용하는 방법 중 하나인 git flow를 처음 고안한 사람이 만든 이미지이다. 여기서 가장 중요한 브랜치가 master 브랜치와 develop 브랜치가 있다. 이 두가지가 중심되는 축이다. 이 두개의 역할분담을 해놓고 있는게 가장 중요한 의미이다. 여기서 첫번째, 실제로 개발이 진행되는 것은 우리가 깃을 처음 사용할 때는 마스터에서 개발을 한다. 하지만 git flow에서는 마스터에서 개발을 하지 않고 마스터에서 파생된 브랜치 develop이라고 하는 브랜치에서 실질적인 개발이 이루어진다. 여기서 개발을 쭉 해나가다가 어떤 특정한 기능을 개발해야 되는 그런 경우가 생겼을 때 git flow에서.. 2022. 12. 5.
<15> 생활코딩 - GIT Git - Rebase 1/3 merge 마스터의 내용을 feature로 가져오고 싶다면 git checkout feature / git merge master 마스터 브랜치의 최신 커밋과 feature의 최신커밋을 공통의 조상으로 하는 새로운 커밋이 만들어진다. 그리고 이 공통의 조상인 커밋과 3 way merge 기법으로 비교해서 자동으로 병합해주고 그럴 수 없는 경우는 comfilict를 해서 사람이 병합하 게 한다. ㅇ rebase feature입장에서 베이스는 두번째 커밋이다. 왜 저것이 베이스가 되냐면 feature브랜치가 파생된 브랜치는 마스터이다. 마터와 feature가 공통으로 가지고 있는 커밋, 이것이 바로 베이스가 되는 것이다.(feature입장에서) 그럼 feature가 rebase.. 2022. 12. 4.
<14> 생활코딩 - GIT Git - 2 tag 1 (기본 사용법) tag는 branch와 비슷한 듯 다르다. 내부적인 메커니즘은 거의 비슷하고 실제 사용되는 용도는 많이 다르다. 어떤 특정한 커밋 id를 가리키는 커밋 버전을 가리키는 것이지만 tag는 언제나 똑같은 것을 가리킨다. branck는 항상 바뀐다. 외부적으로는 이런 차이점이 있다. tag를 만들어보자. 어김없이 파일을 만들고 내용을 입력하여 커밋을 두번했다. 커밋2 현재 버전 상태를 사용자들에게 다운로드 할 수 있게 하고 싶다면, 그런데 시간이 지나면 현재 브랜치 마스터 브랜치가 가리키고 있는 버전이 바뀔테니깐 내가 버전1을 릴리즈 했다라고 하면 나중에 시간이 지난 다음에도 그 버전이 어떤 커밋에 해당되는 지를 알고 싶을 수가 있다. 그런 경우에 tag를 쓴다. 현재.. 2022. 12. 3.
<13> 생활코딩 - GIT Git - 원격 저장소의 원리 지역 저장소와 원격 저장소가 상호 작용할 때 내부적으로 git에서는 어떤 일이 일어나는가 git에서 파일을 만들고 내용 입력 후 add, commit하고 github에서 저장소를 만들어 준 뒤 ssh 링크를 복사한다. 다시 지역 저장소로 돌아와 원격저장소 주소를 붙여 넣기 해야하는데 그때 사용하는 명령이 remote이다. 지역 저장소 관련 기능이 모여있다. 그 뒤에 add라고 적으면 원격 저장소를 연결하겠다라는 뜻. 그 뒤의 파일이름은 연결하고자 하는 원격 저장소의 이름이고 그 이름은 뒤의 링크(ssh주소)이다. git remote add origin [ssh주소] 이렇게 입력했을 때 내부적으로는 어떤 일이 일어나는가 살펴보자. config라는 파일 하나만 수정되었다. 파일.. 2022. 12. 3.
<12> 생활코딩 - GIT Git - 동기화 방법(Github) 이번 강의에는 하나의 원격 저장소를 중심으로 해서 두 개의 지역 저장소가 하나의 원격 저장소를 중간 매개로 해서 작업을 동기화 하는 모습을 배운다. 우선 저장소를 두개 만든다. 집과 회사에서 사용한다는 의미로 git_home, git_office라는 이름으로 지어본다. **지역저장소에 있는 내용을 바꾸는 것은 자신의 컴퓨터에 있는 동안에만 해야되고 그 이후에는 하면 안된다라고 생각하자. push를 한 이후의 내용은 수정하지 말자. git__home , 집에서 프로젝트를 하다가 회사에서 하는 경우. git__home 에서 파일의 내용을 추가하고 커밋함. push 하여 저장소로 올림. 이제 회사에서 작업을 시작하기 전에는 항상 무얼 먼저 시작하냐. git pull : 지.. 2022. 12. 3.
<11> 생활코딩 - GIT Git - 원리 : 3 way merge 위의 사진에 대한 설명. 현대 Me라는 브랜치는 현재 브랜치라고 생각해도 된다. 그리고 또 다른 브랜치를 체크아웃 했고 그 브랜치의 이름음 Other이다. Me 브랜치에서는 A라는 부분을 그대로 뒀고 Other브랜치에서는 지웠다. B부분은 두 브랜치 둘다 그대로 뒀고 C부분은 Me브랜치는 1로 변경했고 다른 브랜치 역시 2로 변경. D부분은 Me브랜치에서는 내용을 지웠고 다른 브랜치는 그대로 뒀다. 여기서 Me브랜치와 Other브랜치는 가운데 있는 코드를 공통으로 갖는다. 이런 코드를 Base라 부른다. 현재 브랜치에서 Other브랜치를 병합하려고 하면 깃은 어떻게 자동으로 병합을 시도하려고 할까. 병합하는 방법은 두가지가 있다. 2way merge / 3way.. 2022. 12. 2.
<10> 생활코딩 - GIT Git - 원리 : working copy & index & repository git reset 이라는 명령을 사용할 때 우리가 사용할 수 있는 옵션이 몇가지가 있다. 메뉴얼을 먼저 보자. git reset --help reset의 세가지 옵션들이 각각 무엇을 리셋 하는가 working derectory working tree woking copy (실제 작업을 진행하는 곳) index staging area cache ( git add를 했을 때 그것이 포함되는 곳) repository history tree ( 실제로 버전,커밋들이 저장되는 곳) git reset --soft git reset --mixed git reset --hard Git - 원리 : merge & conflict(충돌) 충돌.. 2022. 12. 2.
<9> 생활코딩 - GIT Git - 원리 : reset checkout 깃에서 아주 중요한 기능 중의 하나가 과거로 돌아가는 기능이다. reset, revert 이러한 기능이 있다. 또 다른 방면으로는 checkout으로도 과거로 돌아갈 수 있다. 이 중에서 reset과 checkout 이라는 것을 실행했을 때 어떻게 과거로 돌아 가는가 라는 것을 보면서 내부적으로 어떻게 돌아가는지 보고 두가지가 어떻게 다른가를 이해해보자. f1.txt를 만들어 a,b,c,d내용을 입력할 때마다 커밋을 해주었다. 내가 id가 52로 시작하는 커밋3으로 돌아가고 싶다면 나의 저장소를 저걸로 옮기고 제일 최신 커밋4를 취소하고 싶다면 어떻게 해야 할까? git reset --hard 528e52a720382477435b89790cf1488551af.. 2022. 11. 28.
<8> 생활코딩 - GIT Git - 원리 : branch git의 내부가 브랜치를 사용하는 과정에 어떤 변화를 겪게 되는가 git init을 했을 때 생기는 파일들. HEAD라는 파일은 git을 처음 생성 했을 때 생성이 되면서 그 동시에 ref:refs/heads/master 라고 적혀있다. 이것은 파일의 이름인데 아직은 존재하지 않는 상태. f1.txt라는 파일에 a라는 내용을 넣고 add, commit을 하면 왼쪽 사진에 보이는 것과 같이 파일들이 생기고 그 중 아까 언급한 rdfs/heads/master 파일이 생겼다. 파일을 클릭해보면 오브젝트 id값을 가지고 있고 오브젝트 내용을 클릭해 보면 방금 내가 커밋한 커밋을 가리키는 id 였다. 정리하자면 깃을 처음 만들면 HEAD라는 파일이 반드시 생기고, 이 HEAD라는 .. 2022. 11. 28.
<7> 생활코딩 - GIT stash stash는 감추다, 숨겨두다 라는 뜻을 가지고 있는 말이다. 이것은 언제 쓰냐면 내가 브랜치를 가지고 활발하게 작업하다 보면 아직 그 브랜치에서 작업하던 내용이 다 끝나지 않았는데 다른 브랜치로 체크아웃해서 다른 일을 해야되는 경우가 있을 수 있다. 이러한 경우에, 아직 작업할 작업이 끝나지 않은 작업을 커밋하기에도 애매하고 커밋을 안하면 체크아웃을 할 수 없고 이러한 문제가 발생할 수 있다. 이런 경우에 stash를 이용하게 되면 내가 작업했던 내용을 어딘가에 숨겨 놓을 수 있다. 그리고 그 브랜치에 가장 최신 커밋, 다시 말해서 head의 버전(브랜치로)으로 이동해서 현재 브랜치의 상태를 깔끔하게 만들고 다른 브랜치로 체크아웃 할 수 있다. git stash [생략] or git stas.. 2022. 11. 27.
<6> 생활코딩 - GIT branch 수련 https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EC%99%80-Merge-%EC%9D%98-%EA%B8%B0%EC%B4%88 Git - 브랜치와 Merge 의 기초 Merge 시에 발생한 충돌을 다루는 더 어렵고 요상한 내용은 뒤에 고급 Merge 에서 다루기로 한다. git-scm.com 어떤 사람이 저장소를 만들고 커밋을 마스터 브랜치로 세 번 하였다. 그런데 이 상태에서 어떤 이슈가 발생한다. (여기서 말하는 이슈는 기능이 추가 또는 버그 같은 일.) 이 이슈를 해결하기 위해서 일반적으로 깃에서는 브랜치를 만든다. 그 브랜치를 만들기 위해서 git checkout -.. 2022. 11. 25.
<5> 생활코딩 - GIT Git - branch 우리가 작업하고 있는 소스코드를 그대로 두면서도 예를 들면 어떤 고객사에게 제공하는 커스텀 된 기능이 추가되는 경우에 우리는 우리의 원래 소스코드를 변경하지 않으면서 그 고객을 위한 기능등을 추가해야 될 때가 있을 것이다. 이런 경우에 브랜치 하기 딱 좋은 경우이다. 또 다른 경우는 누군가가 어떤 기능을 우리에게 개발해 달라고 했는데 필요없는데 개발해달라고 하는 경우 나중에 정말 필요가 없으면 버려야 될 수도 있다. 이럴때 우리가 쉽게 버릴 수 있는 방법은 분기를 해서, 브랜치를 만들어서 작업을 진행하는 것이다. 등등 여러가지 용도에 사용이 가능하다. 일단 브랜치를 만들어보자! 그러기 위해 사용할 명령은 git branch라는 명령이 있다. 입력하면 * master 이렇게 나온다... 2022. 11. 24.
<4> 생활코딩 - GIT commit메세지가 길지도 않은데 파일이 수정될 때마다 add 하고 editor를 띄어서 거기서 commit메세지를 작성하는 과정이 귀찮은 일이다. 이런 경우에는 어떻게 하면 되는가? 우리가 메뉴얼을 찾아서 알아낼 수 있는 것인데 git commit --help 라고 하면 커밋 메세지에 대한 도움말을 볼 수가 있다. -a 와 -all은 똑같이 사용된다. 이것은 우리가 수정이나 삭제한 파일들을 자동적으로 stage에 올린다라는 뜻. 예를 들어, vim f1.txt 입력하여 '4'라는 내용을 입력하고 나와서 파일을 add해주고 commit을 하여 commit 메세지를 입력하였는데 git commit -a를 하면 바로 commit 메세지를 입력하는 단계가 실행된다. 이제는 이렇게 이디터를 키는 것도 귀찮을 수.. 2022. 11. 21.
<3> 생활코딩 -GIT 과거로 돌아가기 (reset) 지금부터 우리가 살펴 볼 명령은 말하자면 커밋을 취소하는 명령인데 어렵고 주의해서 해야한다. 강의 뒷쪽에 깃의 원리를 보고 다시 이 내용을 보면 더 이해가 잘 간다고 하니 꼭 다시 보기! 현재의 log를 취소해서 과거로 돌아가고 싶다. 예를 들면 현재 최신 commit은 5인데 3으로 돌아가고 싶다. 크게 두가지 방법이 있다. 바로 reset과 revert가 있는데 이 두가지가 비슷한듯 다르다. 또한 reset이 여러가지 옵션들이 있기 때문에 상당히 복잡하고 어렵다고 한다. 1. reset git log 에서 5와 4를 삭제하고 3으로 돌아가고 싶다라고 하면 어떻게 하면 될까? 제일 쉬운 건 reset이다. git log [commit 3 id] --hard를 입력하고 gi.. 2022. 11. 11.
728x90