깃헙을 사용하기 위해 소스트리(Source Tree)를 사용하였습니다.
이 소스트리는 제가 에디터(Braket)에서 작성한 코드를 파일로 저장했을 때, 그 저장한 파일이 있는 주소와 소스트리 저장소와 동일하게 하여
소스트리에 에디터에서 저장한 파일이 자동으로 업로드 되고 그 업로드한 파일을 커밋(Commit)하기위해 사용하는 것입니다.
저장소를 만드는 과정 = init
아무거솓 수정 안하면 흰색으로
수정하면 초록색줄로 보임
삭제된 부분은 붉은 색임.
그리고 앞에 -가 붙음
수정했을시 브라켓에서 저장하면 자동으로 소스트리에 주황색배경에 연필모양으로 바뀜 그걸 다시 스태그파일로 올리고 커밋해줘야함 롤오버해보면 modify가 뜸
두개 한꺼번에 하려면 두개를 쉬프트로 둘다 클릭시 같이 커밋하면된다.
2개를 같이 올리면 하나의 버전에 여러개의 파일이 생성된다..
업로드 할때마다 파일의 개수에따라 버전은 포함할 수가 있음.
하지만 그 상황에서 수정사항이 별개라 별도로 만들려면
1개만 따로 커밋을 다시하ㅣ면됨. 그러면 다시 별도로 버전이 생김
즉 남아있는 README.md가 있는 Unstaged files의 공간은 수정된 파일들의 목록이 표시되는 공간이고 // 워킹카피라고함
Unstaged files를 드래그해서 Staged files로 이동하게 되면 Commit을 통해서 버전에 포함될 파일들의 목록이 표시되는 공간입니다.//체크를 add라고 함
그리고 위쪽 공간을 인덱스나 스테이징 에어리어라고 불름.
커밋을 하기전에 중간단계가 존재하는 것임. 연결된 파일들만 모아서 하나의 버전으로 그룹핑을 할수 있는것임.
그리고 저 버전들이 나열되있는 공간이 레파짓토리 , 저장소라고 불림
언스테이지 파일스에서 바로 커밋하면 커밋버튼이 안눌러집니다
또한, 리드미.엠디라는파일을 스테이징 에어리어에 올리고 다시 에디터에서 리드미파일을 저장하면 언스테이지에 추가로 또 올라오게됨.
이미 스테이징 에어리어에 있는 파일은 수정하기 전 파일이고 언스테이지에 있는 파일은 수정된 파이임
그리고 언스테이지 에어리어로 파일이 올라가있는 상태에서 다시 리드미를 저장해서 언 스테이지파일에 올라와있는데
스테이지 파일 에어리어에서 언스테이지로 돌려보낸다면 그파일은 사라지게된다.
언스테이지 파일에있을땐 되돌리기를 할 수 있습니다. 바로 discard 입니다. discard를 눌러 discard Changes를 누르면 되돌릴 수 있습니다.
삭제했을때는 붉은색으로 표시되며 앞에 마이너스 (-)가 뜨는데 이럴때 되돌릴수가 있다.
소스트리 상단에 discard를 누르면 현재 커밋하지않는 수정된 파일들이 나오는데 그상태에서 클릭후 디스카드 체인지를 누르면
파일명확인창이 나오고 그것을 확인 누르면 다시 수정하기 전의상태로 돌아가게된다.
또한 최종커밋전으로 옮길수있다. 여기서 신기한 부분은 연결되어있는 에디터의 상태에서도 되돌리기가 된다는 것이다.
또한 수정하고 추가된 내용을 최종적으로 리뷰할수 있는 공간이 바로 아래 사진의 공간입니다.
커밋하기 전에 꼭 무조건 한번 더 확인하고 커밋을 하는 습관을 들여야 합니다.
또한 이후의 버전 모두를 reset하려면 원하는 위치에서마우스 오른쪽 버튼을 클릭후 reset current branch to this를 클릭 한후 hard버전을 클릭하면 클릭한거 이후에 커밋된 모든 버전이 삭제됩니다.
또한 현재 수정한 워킹카피의 상태는 유지하면서 일정 부분의 위로 모두 삭제하고 싶다면 똑같이 reset current branch to this를 클릭후 Mixed를 클릭하면 워킹카피에 상태는 남아있으면서 클릭한 이후의 버전들은 모두 삭제되게 됩니다.
충돌..
하나의 파일에서 같은 위치의 내용을 각각 다른쪽의 브렌치에서 변경했을때, 다른브렌치에서
저장소 만들기.
저장소 경로설정
브렌치에 커밋. 커밋 코멘트쓰는거
수정. 삭제. 초록 붉은
추가했음. 추가했을시 전단계의 삭제한 붉은 색은 없어지고 추가한부분만 나옴 가장 최근을 상태로 전단계만 보여줌
브렌치이름은 띄어쓰기가 안댐.
브렌치간의 이동클릭은 더블릭이나 체크아웃 브렌치
두번째 브렌치에 첫번째 브렌치파일을 수정하여 커밋.
같은 위치에서 수정한 브렌치 파일을 하나의 브렌치 파일로 합칠때는 브렌치 오른쪽버튼누르고 머지 인투 브렌치를 해주면 된다.
서로 다른브렌치에 있음에도 같은 위치가 변경되었을경우 깃은 우리에게 선택권을 넘겨주고 컴플릭트 오류를 낸다.
컴플릭트오류가 나게되면
<<<<<HEAD 와
=====
>>>>> 브렌치이름
이런 상태가 되는데.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Hello world</h1>
<ul>
<li>깃 수정.</li>
<li>추가</li>
<<<<<<< HEAD
<li>두번째 브렌치에 내용추가 내용 수정</li>
=======
<li>두번째 브렌치에 내용추가</li>
>>>>>>> 깃테스트두번재브렌치
</ul>
</body>
</html>
이러한 오류이다.
저기서 HEAD는 우리가 현재 사용하고 있는 브렌치고 이퀄을 중심으로 아래 >>>브렌치이름 이것은 원래 저기있었던 브렌치라는 것이다.
즉 서로 다른 위치에있는 브렌치에서 같은 위치를 변경할떄 라는것을 알려주는것이다.
만약에 밑에있는 브렌치가 필요 없다 하면
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Hello world</h1>
<ul>
<li>깃 수정.</li>
<li>추가</li>
<li>두번째 브렌치에 내용추가 내용 수정</li>
</ul>
</body>
</html>
이렇게 아래 내용추가에대한<li>와 브렌치와 나머지것들을 지우면 되고. 둘다 필요하다 하면
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Hello world</h1>
<ul>
<li>깃 수정.</li>
<li>추가</li>
<li>두번째 브렌치에 내용추가 내용 수정</li>
<li>두번째 브렌치에 내용추가</li>
</ul>
</body>
</html>
리스트들은 남기고 기호들만 지우면 된다.
그리고 에디터에서 해당 사항들을 수정한 다음 트리소스에서 처리했다고 확인하려면 언스테이지파일에 있는 파일을 마우스로 오른쪽 클릭 한다음에
리졸브 컴플릭트를 클릭후 마크 리졸브드를 해주면 변경된 사항이 하나로 통합되어 스테이지 파일로올라가서 커밋할수 있는 상태가 된것을 확인할수 있습니다.
두개의 브렌치를 병합했을때 충돌한다음 우리가 잘못된 커밋을 할걸 알고 깃이 미리 컴플릭트를 내주는것이다.
그리고 컴플릭트를 해결하면 커밋칸에 알아서 이런게 있었다하고 알려줌
커밋하는 도중 중간으로 돌아가고 싶다면 해당 돌아갈 위치의 버전에 오른쪽 버튼을 누르고 리젯 투 커밋을 클릭 후
유징모드 후 하드하고 오케이를 하면 해당 이동 브렌치 수정사항 이후의 모든 브렌치가 삭제되고 스테이지에 올려논내용이 전부다 깔금하게 사라집니다.
역시나 에디터에서도 사라짐을 확인할수 있다.
하지만 이기능은 조심해서 사용해야합니다. 소중한 버전들이 다 사라지기때문에 조심해서 사용해야합니다.
위쪽으로 갈수록 '이후'입니다. 순차적으로 쌓이기때문에
그리고 소스트리와 에디터가 항상 동일한 상태인데 버전은 삭제가 되는데 내 에디터 즉 워킹상태는 변경되게하려면 역시 reset을 사용하면 된다.
커밋을 만약에 했는데 아직 커밋할때가 안됬다고 생각할때,, 또는 웹서비스를 이용할때 인증과관련된 프로그램을 돌릴때
정보는 들어갔는데 인증을 위해 커밋이 나중에 되야할경우 삭제가 필요할수도 있는경우 사용할수도 있다.
역시 reset to commit을 클릭 후 믹스트를 클릭해주면 된다.
해당 믹스드를 할 폴더 이후로 모두 다시 언스테이지 상태로 돌아오고 해당 부분을 수정해서 다시 커밋해주면 된다.
원치않은 정보가 커밋에 포함되지 않도록 수정가능하고 버전을 전부 삭제후 다시 올리지 않아도 이렇게 사용하면 수정이 가능하다.
리버스커밋 = 리버트
만약 수정한 사항을 나두고 이전의 사항으로 되돌아 가고 싶을시 마우스 오른쪽 버튼 클릭후 reverse commit을 클릭하면 파일 자체가 삭제되고 변경되는것이 아니라 클릭한 이전의 사항이 다시 커밋되어 버전으로 업데이트 되는데 앞에 Revert라고 붙습니다. 근데 리버스는 한번에 한단계의 전까지만 가능하기 때문에, 이전 이전의 상태로가려면 역순으로 파일을 계쏙 리버트 해줘야합니다 해당파일을 선택해줘야 합니다. 만약 2단계를 넘어갔을 시, 컴플릭트 오류가 발생하게 됩니다. 만약 실수로 2단계를 넘어갔을 시 되돌리는 방법은 discard를 이용하여 되돌리기 해주면 됩니다.
가급적이면 버전은 유지시키는게 좋지만
삭제하지않고 수정상태로 돌아가고 싶다면 마우스 오른쪽 클릭후 리버트커밋을 눌러주면되는데, 수정하려는 버전은 남아있고 그위로 Revert라는 글이 추가된 버전이 다시 생성이 된다.
그런데 새로 생성이아니라 바로 이전상태로 돌아가고 싶다면
하지만 상태는 리버트한 그 이전의 파일의 상태로 되는것입니다.그래서 그상태에서 다시 수정해서 커밋을 해줘야 합니다.
하지만 2번째 이전의 상태를 수정하고싶으면 첫번째파일 리버스커밋, 그 두번쨰도 리버스 하면서 역순으로 계속 리버스를 해주면서 돌아가야합니다.
두개이상씩 넘어갈시 컴플릭트가 생기기때문입니다.
리버트로 생성됬을때 에디터로 돌아가서 다시 해당파일을 수정하고 커밋하면 됨.
원래는 안되는데 리버스를 하면 가능함.
마스터브렌치는 기본적으로 주는 1개의 브렌치의 이름일뿐이고 이름또한 바꿀수 있다.
브린치를 2개 만드는 이유가 몇가지 있는데 그중 하나는 실험적으로 하고 하나는 완성된 파일만 업로드하기위해 사용하기도한다
브렌치는 디렉토리처럼 폴더라고 생각하면 되고 우리가 평소에 사용하듯이 실험적폴더1 작업적폴더1 이런식으로 사용하는듯이 사용하면된다.
또한 워킹카피에 파일이 있는 상태에서 브랜치를 옮겨갈경우 워킹카피에 파일을 해당 브랜치로 옮길것인가의 경고창이 뜨며, 워킹카피를 커밋을 해야 브랜치로 이동할 수 있습니다.
상단에 브렌치를 클릭하면 브렌치를 만들수 있다.
더블클릭하면 해당 브렌치로 이동됩니다.
브랜치 - 새로운 실험적인 버전을 만들어서 가지를 치는것입니다. 아에 다른버전으로 만들어지며 원래의 버전과는 완전히 다른 파일입니다. 즉 새로운 시도를 해볼때 브렌치를 만든다고 볼 수 있습니다. 아니면 두가지 버전을 따로 만든다던지.
그리고 브렌치에서 에디터를 띄워놨다가 다른 브렌치로 이동한 상태에서 에디터를 클릭하면 현재 브런치의 상태로 에디터가 변경된다.
브렌치 2개에서 커밋을 할경우 왼쪽의 그래프에서 다르게 표현됩니다.
여기서 보시면, 실험이라는 브렌치에서 계속 커밋이 되어오다가 "새로 추가해서 내용추가"이부분에서 새로운 브렌치를 생성하거나 이동한 후에 새로 커밋을 하였습니다.
저와 같은 경우는 실험 브렌치에서 커밋을 하다가 마스터 브렌치에서 커밋을 5번 진행 하였습니다. 그다음에 다시 실험 브렌치에서 "키읔추가"라는 커밋의 브렌치를 생성해준 결과입니다.
초록색 박스가 master브렌치에서 추가한 다섯 부분입니다. 빨간색 원사이의 화살표와 같이 실험의 브렌치는 중간에 마스터를 건너뛰고 바로 추가되어 표시되는것을 알 수 있습니다.
마스터에서 추가하면 마스터에서 쌓이고 실험에서 추가하면 실험에서 추가되는 것입니다.
허나 바로브랜치를 새로만들고 첫번째 파일을 만들었을때는 그냥 보여지는데 다른 브렌치로 이동해서 새로 파일을 커밋하면 그때 왼쪽 그래프 가지가 보이기 시작합니다.
새로 브렌치를 추가하고 파일을 커밋 바로 가지가 안보이고 전의 브렌치에 연결된상태로 확인되는데 이게 왜그런건가요? 그리고 추가한 다른 브렌치에서 추가로 커밋을 해야 가지를 생성해야 가지가 생성이 되는데 왜그런건지 궁금하거 이게 맞는건지 또한 궁금합니다. 원래 그런거임
색갈변화없이 한칸 올라가고 다른 브렌치에서 생성해줘야 추가 브렌치가 가서그래프가 생성됨.
정상인 거였습니다.
에디터는 처음 1개 브랜체만 보이는게 맞는건지
병합할때는 받는쪽으로 체크아웃을 한 상태로 다른 브렌치에 오른쪽 클릭후 머지 인투 커런트 브렌치해주면 됨.
병합이 된 브렌치는 합쳐지기 때문에 병합후에 병합되어진 브렌치를 삭제해도 무방하다.
병합할때는 항상 컴플릭트를 주의해야함 같은 파일을 두개의 브렌치에서 수정했을때 같은 위치가 변경되었을시 컴플릭트가 생기며, 다른위치를 병합할경우는 합쳐지게 됩니다. 단, 다른 폴더를 각각 다른 브렌치에서 사용하다가 병합할경우는
※
브렌치를 생성할때, 현재 체크아웃된 브렌치에서 또 브렌치가 나오는것이다.
merge 즉 병합을 할땐 체크 아웃상태가 된 브렌치로 다른 브렌치를 병합하는 것입니다.
문제는 이제 컴플릭트가 발생 했을 때 입니다.
자연스럽게 병합이 되면 정말 아름답고 좋겠지만.. 매우 많은 경우로 컴플릭트가 발생합니다.
컴플릭트가 발생했을때 소스트리는 자연스럽게 사용자가 선택하여 수정할 수 있게 제어권을 넘기게 됩니다.
그상태에서 >>>>와 =====와 <<<<를 모두 지우면 그상태로 통합이 되며, 그상태에서 지운 후 새로 추가하여 저장하여도 통합이 됩니다.
밑에있는 브랜치가 필요없을경우는 밑에껄 지우면되고 위에께 필요없으면 위에껄 간단히 지운 후 커밋하면 됩니다.
그리고 통합한 다음 커밋을 하려면 자동으로 컴플릭트가 났었다는 멘트가 커밋창에 나타나게 됩니다. 그의 경우 지워도되고 이력을 남겨도 되는 부분입니다.
또한 충돌을 최소화하기 위한 방법은 브랜치가 추가되었을떄 지속적으로 병합해주면서 작은 충돌만을 해결하면서 작업하는 것입니다. 나중에 코드가 아주 길어졌을때 충돌을 해결하려면 너무많은 코드를 다시봐야하기 때문에 계속 보는것이 좋습니다.
이제 소스트리에서 원격 저장소를 생성해 보겠습니다..
상단 메뉴바에서 레파지토리를 클릭후 Add Remote를 클릭합니다.
그럼 아래와 같은 화면이 알람으로 뜰것입니다. 보시면 알 수 있지만 Remote 하고 s가붙은 것을 알 수 있습니다. 이는 한번에 여러게의 원격 저장소를 생성하여 연결할 수 도 있음을 의미합니다.
Add를 클릭하면
이러한 화면이 뜨는데.
푸쉬를 눌러야 연동이 되고 푸쉬를 누르면 여러 브랜치를 선택할 수 있습니다.
브렌치를 선택하여 동기화 할 수 있습니다.
개인적인 실험은 제외하고 마스터르
Pull - > 원격 저장소의 내용을 로컬 저장소로 다운 받는 행위입니다.
협업을 진행할때 자신이 수정한 내용을 업로드하기 전에 다른사람이 업로드해논 코드를 먼저 Pull한다음에 확인 후 그다음 Push를 하는 것입니다.
두개의 작업자가 작업할때는 깃헙 홈페이지에서 clone하여 소스트리에 연결시켜주어야 합니다. 해당 깃헙의 clone할 주소를 쓰고 아래는 자신이 업로드할 경로를 설정하고 사용하면 됩니다.
또한, Push를 하기전엔 반드시 Pull을 하여 동기화 후 작업을 해줘야 진행이 됩니다.
pull -> work -> commit -> pull -push 이방법대로 해야합니다 왜냐하면 중간중간에 다른 개발자가 푸쉬를 했을 수 있기때문에 지속적으로 풀을 해줘야 하는것입니다.