[git] github repository 합치기_최종_최최종

KAYA·2022년 2월 18일
2

지난 번에 레파지토리 합치기를 한 번 시도했다가 반만 성공한 적이 있었다.
근데, 이게 반만 성공이 아니고 진짜 성공이었다. 다시commit history를 끝까지 보ㄴ니 histroy가 제 날짜에 가져와지고 있다.
~~그 때는 마가 껴서 뭘 잘 못 본건지, 뭔가 잘 못 시도했던지~ ~~

지난 글을 참고해서 방법을 다시 적어보자.

  • 기반이 될 저장소 : base_repo
  • 합쳐질(없어질) 저장소 : old_repo

1. base_repo 저장소 clone

$ git clone https:// ~.git

$ cd base_repo

github에서 하나로 모을 레파지토리를 생성하고 터미널에서 로컬에 클론한다.
클론이 완료되었다면 클론한 폴더로 이동한다. (중요)

2. git subtree add --prefix=하위폴더이름 옮겨올레파지토리주소 레파지토리브랜치

$ git subtree add --prefix=old_repo https:// ~.git main

이렇게 subtree를 이용해서 old_repo 저장소를 old_repo라는 이름의 폴더에 fetch하게 된다.

여기서 old_repo 레파지토리 이름하위폴더 이름이 일치할 필요는 없다. 본인이 원하는 대로 입력하면 된다.

만약 old_repo 폴더 안에 ver_01 이라는 폴더를 생성해 병합하고 싶다면

git subtree add --prefix=old_repo/ver_01 https:// ~.git main

이렇게 하위 구조를 기재하면 된다.
전체 폴더 구조는 아래와 같다.

├─ base
│ 	├─ old_repo
│ 		├─ ver_01

3. git push

push하면 끝이다.
origin main 이런 기타 명령어 없이 단 두 단어만 쓰면 된다.

합칠 폴더 개수만큼 이 과정을 반복하면 된다.



발생한 에러들

1. ambiguous argument 'HEAD': unknown revision or path not in the working tree

해당 에러는 폴더에 아무것도 없어서 커밋할 내용이 없기 때문에 발생하는 에러다.

  • 아무거나 만들어주면 된다.
    나는 README.md를 생성해서 커밋했다. 터미널에서 readme파일을 생성하고 싶었는데 방법을 못찾아서^^.. github에서 readme를 생성하고 pull 받아 커밋 푸시했다.

  • 또 다른 방법은 자식 폴더에서 fetch하면 된다는데 시도하진 않았다.
    내용 참고 블로그

2. fatal: The current branch master has no upstream branch.

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, 
use git push --set-upstream origin main

해당 에러가 발생하면 나타나는 풀에러 메세지.
--set-upstream을 하라고 하는데 일단 나는 저 방법으로 성공하지 못했다. 왜인지는 모름. 쩝.. 😶

$ git remote -v		// 저장소 리모트 이름 찾기

$ git push origin main 		// 알맞는 branch에 push

원격 저장소 세팅이 완전히 이루어지지 않아 발생한는 오류이므로 명확하게 기재해주면 된다.

3. fatal: not a git repository (or any of the parent directories): .git

폴더 안에 .git파일이 없기 때문에 발생하는 오류

$ git init
$ git remote -v

remote까지 확인해면 더 좋겠쥬?

4. Working tree has modifications. Cannot add.

베이스 repo가 최신버전이 아니라 일어나는 오류
git push를 해서 최신버전으로 업데이트를 해 주면 해결된다.

5. Everything up-to-date / Already up to date

파일 삭제를 하고 push를 하면 위의 메세지가 뜨고, 레파지토리에 아무런 변화도 없었다.

$ git add .
$ git commit -m "commit msg"
$ git push

변동사항을 add, commit, push 하는 것 잊지말자!

폴더 or 파일 삭제

  • 로컬과 원격저장소 모두 삭제
$ git rm -r 폴더이름 or 파일이름
  • 원격저장소만 삭제 (로컬에는 파일 남기기)
$ git rm --cached -r 폴더이름 or 파일이름

-r 빼먹으면 오류난다!!!

$ git add .

$ git commit -m "commit msg"

$ git push

폴더 or 파일 이름 변경하기

$ git mv oldName newName

$ git commit -m "commit msg"

$ git push

첨에 오류난 줄 알았다.
자세히 보면 폴더 파일마다 다 rename이 진행되기 때문에 구구절절 길 수 밖에 없다. 안심하시길!

시도해보고 싶은 사항

  • 폴더 별로 커밋로그 나누기

이 때까지의 작업 로그를 삭제하지 않고 한 폴더에 합쳐서 뿌듯하긴 한데, 모든 작업 폴더의 커밋 내용이 합쳐졌고, base 폴더에서만 커밋내용을 확인할 수 있어서 개별 확인이 어렵다.
branch를 새로 생성해서 폴더별로 커밋로그를 저장하고 싶은데, 또 branch가 달라지면 한번에 보는게 어려워서 어떻게 해 볼 지 고민해 봐야겠다.

마무리

아무튼 나는 이 방법으로 25개였던 쓰잘데기 없는 레파지토리를 10개로 줄였다. 심지어 에러도 별로 나지 않았고, 에러가 나더라고 한 번에 해결돼서 지금 기분이 너어어무 좋다.
😭😆😭😆😭😆 일희일비의 아이콘이 되기는 싫지만 ~~~~~안되면 죽상 되면 좋은걸 어쯔캐 😭😆😭😆😭😆



참조

  • 병합 참고 블로그
    해당 블로그에서 더 상세한 설명을 볼 수 있다.
    (터미널의 세세한 내역까지 확인하고 싶다면!)
profile
겅부하자

0개의 댓글