지난 번에 레파지토리 합치기를 한 번 시도했다가 반만 성공한 적이 있었다.
근데, 이게 반만 성공이 아니고 진짜 성공이었다. 다시commit history를 끝까지 보ㄴ니 histroy가 제 날짜에 가져와지고 있다.
~~그 때는 마가 껴서 뭘 잘 못 본건지, 뭔가 잘 못 시도했던지~ ~~
지난 글을 참고해서 방법을 다시 적어보자.
- 기반이 될 저장소 : base_repo
- 합쳐질(없어질) 저장소 : old_repo
$ git clone https:// ~.git
$ cd base_repo
github에서 하나로 모을 레파지토리를 생성하고 터미널에서 로컬에 클론한다.
클론이 완료되었다면 클론한 폴더로 이동한다. (중요)
$ 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
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 하는 것 잊지말자!
$ git rm -r 폴더이름 or 파일이름
$ git rm --cached -r 폴더이름 or 파일이름
-r
빼먹으면 오류난다!!!
$ git add .
$ git commit -m "commit msg"
$ git push
$ git mv oldName newName
$ git commit -m "commit msg"
$ git push
첨에 오류난 줄 알았다.
자세히 보면 폴더 파일마다 다 rename이 진행되기 때문에 구구절절 길 수 밖에 없다. 안심하시길!
이 때까지의 작업 로그를 삭제하지 않고 한 폴더에 합쳐서 뿌듯하긴 한데, 모든 작업 폴더의 커밋 내용이 합쳐졌고, base 폴더에서만 커밋내용을 확인할 수 있어서 개별 확인이 어렵다.
branch를 새로 생성해서 폴더별로 커밋로그를 저장하고 싶은데, 또 branch가 달라지면 한번에 보는게 어려워서 어떻게 해 볼 지 고민해 봐야겠다.
아무튼 나는 이 방법으로 25개였던 쓰잘데기 없는 레파지토리를 10개로 줄였다. 심지어 에러도 별로 나지 않았고, 에러가 나더라고 한 번에 해결돼서 지금 기분이 너어어무 좋다.
😭😆😭😆😭😆 일희일비의 아이콘이 되기는 싫지만 ~~~~~안되면 죽상 되면 좋은걸 어쯔캐 😭😆😭😆😭😆
- 병합 참고 블로그
해당 블로그에서 더 상세한 설명을 볼 수 있다.
(터미널의 세세한 내역까지 확인하고 싶다면!)