[항해99] 토이프로젝트 2일차 - 브로콜리 너마저!🥦

LIHA·2023년 1월 10일
0

항해99

목록 보기
10/54
post-thumbnail

문제: git pull oirigin main 했는데 templates 폴더가 오지 않는다.

main 외에 브랜치가 두 개 더 생겼다. Pull을 했더니 이런 메시지가 떴다.

error: Your local changes to the following files would be overwritten by merge:
app.py
Merge with strategy ort failed.

뭔소리야?
여기 참고 -> 해결 못함🤔
여기도 참고 -> 해결!
git clone (리포지토리 주소) (브랜치이름) 명령어를 사용해서, sub1이라는 브랜치를 받아서 작업하기로 했다.
▶이는 나중에 또 push가 안돼서 매니저님 도움을 통해 해결했다.


우영님의 아이디어 : 야채 이름 입력받을때 중복을 어떻게 할 것인가? 에 대하여
▶받을때는 한개의 변수로, 중복 된것과 안 된것의 저장 위치를 바꾸자.
->저장 위치요? DB를 바꾸는건가?
->저장되는 key:value에서 key 이름을 바꾸겠다는 얘기였다. title하고 title1로 나눠서 저장하겠단 얘기.

뭐야 부트스트랩 왜 안돼?
▶라이브러리가 필요하다고 한다!
지윤님 덕분에 title 밑에 라이브러리 태그를 추가해서 무사히 붐따 부트스트랩을 적용했다.

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.0/font/bootstrap-icons.css">

그런데 내 프로젝트 폴더에서 push하려니, commit은 되는데 push는 불가능했다.
뭐야 왜안돼?

메시지:
$ git clone fatal: refusing to merge unrelated histories sub1
fatal: Too many arguments.
▶이것의 원인은 local에 없는 이력이 원격 저장소(origin)에는 있기 때문에 push 혹은 pull 할수 없다는 얘기.
보통 로컬에서 하지 않은 커밋 같은게 원격에 존재해서(내가 모르는 새에 푸쉬됐거나, 리드미 같은게 커밋됐거나 등) 발생한다.
아래 명령어로 무관한 내용도 다 가져와 달라고 하면 해결된다고 한다.

git pull --allow-unrelated-histories origin (브랜치명)

▶나는 지윤님 리포 URL를 타겟으로 그대로 clone 해와서, 내가 push했을때 들어가는건 내가 fork 떠간 리포가 아니라 지윤님 리포일 것이다.
우리는 main 브랜치 외의 2개의 브랜치가 더 있고, 3번째 브랜치에서 작업을 하려고 했다.

※그래서 폴더를 삭제하고 다시 clone한 뒤에 다시 push 하려니 또 실패했다.
왜또안돼?

메시지:
fatal: 'sub1' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate

검색결과 이건 내가 local과 원격리포에 같은 이름의 폴더가 있어서, 깃배쉬가 내가 말하는 sub1이 로컬폴더인지 원격 리포인지 헷갈렸다는 것 같다.
참고를 이용해서 git switch (브랜치 이름) 을 이용해 branch를 지정해 봤다.

참고

그러나 그럼에도 pull에 실패했다.

error: Your local changes to the following files would be overwritten by checkout:
.idea/misc.xml
.idea/vcs.xml
.idea/veggi.iml
Please commit your changes or stash them before you switch branches.

뭐라는거야?
▶이건 내가 pull 받아올 경우 아래의 파일들이 덮어씌워 지므로, commit을 하든 stash를 하든 해서 지금의 내 데이터를 어디 다른 곳에 저장해놓고 pull 받으라는 얘기 같았다.

내가 포크떠온 리포에 푸쉬 시도
error: src refspec sub1 does not match any
error: failed to push some refs to 'https://github.com/liha-engineer/veggi.git'

지윤님의 원본 리포에 푸쉬 시도(권한 승인받음)
error: src refspec sub1 does not match any
error: failed to push some refs to 'https://github.com/JellyKingdom/veggi.git'

둘다 실패했다. 이 뒤로도 한참 불가능했는데 원인을 못 찾았다.


작업이 막히고 있다.

추천 버튼을 만들고 싶다. 1클릭당 추천수가 1씩 증가하고, 그 추천수가 버튼에 표시되게 구현하고 싶다.

참고1 참고2

                type: 'GET',
                url: '/veggie',
                data: {},
                async:false,

여기서 async : false 한 이유 : 전역변수로 쓰기 위해서였다.
흠🤔


하던 작업을 stash 해봤더니 이런 메시지가 떴다.

조원분들의 자료를 pull 받아야 하니, 내가 지금 하던 작업은 중간저장 하고 싶었다.
어떻게 하는걸까? commit을 하면 브랜치에 병합되어 버릴텐데.🤔
->stash를 써봤더니 이렇게 저장이 되었다. 이건 나중에 git stash pop 으로 가져올 수 있다고 한다.

$ git stash save
Saved working directory and index state WIP on main: 91317d1 Merge pull request #3 from JellyKingdom/sub1

->나중에 git stash pop 했더니 에러 없이 불러와졌다.
stash 관련 내용 참고


지금 나의 가장 큰 문제(오후)

오전에 push나 pull이 안되던 것은 작업폴더를 삭제해버리고 git clone을 다시 해서 처리한 것으로 기억한다.
그러나, 조원분들이 push 해주신 git 작업물들을 내가 Pull해와도 바뀌지 않는다.
(Git의 수정본이 내 local에 반영이 안된다.)
언제까지고 계속 브랜치 폴더를 통채로 삭제하고 다시 clone할수도 없는데!😖

  • 매니저님의 도움
    ▶commit을 안하고 pull을 하면 대부분은 안된다고 보면 된다.
    ▶이럴땐 지금 작업을 stash 하고 먼저 pull 한 다음에 stash pop 하면 된다.
    ▶Git은 다 같은 원본을 떠와서 사용하는것이라 해도, 누군가 먼저 push를 하는 순간 다른 버전이 되어 버린다.
    ▶그러므로 main에서 그냥 다 작업을 하는 trunk 빌드를 사용할 경우, 작업 도중 push 할때마다 본인 작업 잠깐 stash 해두고 pull해서 가져와야 한다.
    이거 안하면 나중에 버전 안맞아서 본인 작업 push 못함!
    Git은 기본적으로 동기화 개념의 형상관리 툴이기 때문.
    ▶원격 저장소에서 pull 해왔으면 새로 merge된 빌드를 stash pop 해서 기존 본인작업을 끌어와야 한다.

우선 리포와 푸쉬 풀 문제들이 지금은 해결되었다.

그래서 내가 기억해야 할 부분

내가 클론해온 리포 : 지윤님 리포/ sub1 브랜치
내가 푸쉬할 리포 : 지윤님 리포/ sub1 브랜치
머지 리퀘스트 할 리포 : 지윤님 리포/ main 브랜치


gitflow에 대해서 - gitflow vs Trunk-based 영상 링크

Trunk? 메인브랜치에서 작업하는것.
일반적으로는 원본이 되는 release 브랜치가 있고, 이를 토대로 브랜치를 새로 따서 아래로 내려가서 작업하고 온다.
gitflow / githubflow / trunk-based / gitlabflow 등등 많다.

작업의 시초가 되는 원본 뼈대를 머지없이 그냥 보관용으로 남기고 싶다면 -> 브랜치를 따로 따서 보관하는게 맞다!
메인브랜치 말고 다른데에서 작업후 머지하다가 잘 되면 메인에 머지하고 싶다 -> 이것도 브랜치를 따로 따서 보관하는게 맞다!

  • gitflow의 골자는 크게 다섯 개 정도의 브랜치를 운영하는 것이다.
    즉, 각자 따로따로 빌드관리를 하려면 브랜치를 여러개 파야하는게 맞다.

main
release
hotfix - 심각한 버그, 급히 처리가 필요한 것 등
develope
feature

오늘의 매니저님 교훈: BFF: Backend For Frontend.
백엔드는 기본적으로 프론트엔드에게 일을 시키면 안된다
DB에게도 일을 시키면 안된다. listing, sorting 등은 코드로 서버에서 해야 한다. 그런 복잡한 일 하려고 서버가 존재하는 것.

▶이게 결국은 나중에 리팩토링이나 메모리 관리에 영향을 끼친다.
궁극적으로는 '속도' 에 영향을 끼친다. 프론트에게 복잡한 연산을 시키면 그만큼 로딩이 느려진다고.

profile
갑자기 왜 춤춰?

0개의 댓글