git submodule 업데이트가 push를 잊어버렸을 때.
11284 단어 Git
입문
git의submodule는 익숙해지면 편리하지만,git가 익숙하지 않으면 바로 HEAD가 멀어지고 익숙하지 않은 오류 메시지가 나타나 주저합니다.이번에는 다른 곳에서 업데이트된submodule을 잊어버렸기 때문에 이런 말이 어떻게 될지, 어떻게 돌아올지 적어야 한다.
단계 재현
로봇 태군은 집에서 일한다.그것은main이라는 자료 라이브러리에submodule로sub라는 자료 라이브러리를 포함합니다.sub는 라이브러리입니다.main에서 그것을 사용하지만, 어느 것도 아직 시들지 않았습니다. 쌍방이 모두 수정해야 합니다.그것을 모방하기 위해 현지에서 두 개의 자료고를 만들어라.
submodule 추가
적절한 디렉터리를 만듭니다. 예를 들어temp입니다.$ mkdir temp
$ cd temp
그곳에서submodule를 만드는 데 쓰이는 자료 라이브러리sub
.누드 저장소,clone, 파일, 최초의commit,push를 만듭니다.$ git init --bare sub.git
Initialized empty Git repository in /path/to/temp/sub.git/
$ git clone sub.git
Cloning into 'sub'...
warning: You appear to have cloned an empty repository.
done.
$ cd sub
$ echo "sub" >> sub.txt
$ git add sub.txt
$ git commit -m "initial commit"
[master (root-commit) f6e78d2] initial commit
1 file changed, 1 insertion(+)
create mode 100644 sub.txt
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 224 bytes | 224.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/temp/sub.git
* [new branch] master -> master
$ cd ..
여기까지sub라는 자료 라이브러리가 있습니다.다음에main이라는 데이터 라이브러리를 만들어서submodule로 저장합니다.$ git init --bare main.git
Initialized empty Git repository in /path/to/temp/main.git/
$ git clone main.git
Cloning into 'main'...
warning: You appear to have cloned an empty repository.
done.
나는 빈 자료 라이브러리를 만들고 클론을 만들었다.여기서submodule로 방금 제작한sub를 등록하고 제출하면push입니다.$ cd main
$ git submodule add ../sub.git
Cloning into '/path/to/temp/main/sub'...
done.
$ git commit -m "initial commit"
[master (root-commit) 0b0122a] initial commit
2 files changed, 4 insertions(+)
create mode 100644 .gitmodules
create mode 160000 sub
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 295 bytes | 295.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/temp/main.git
* [new branch] master -> master
여기까진 이런 상황이 됐어.
원격에main과sub와 같은bare 데이터 라이브러리가 있습니다. 로컬은main이sub를submodule로 관리하고sub의'4699237'이라는 산열을 가리키는 제출입니다.이것이 바로 로봇 태군이 집에서 일을 시작하기 전의 상태이다.
잊을 때까지 submodule 업데이트 및 제출
그럼 로봇 태군이submodule의sub를 살짝 수정했습니다.$ cd sub
$ echo "sub2" >> sub.txt
$ git ci -m "reivses sub.txt"
[master 4b274dd] reivses sub.txt
1 file changed, 1 insertion(+)
submodule 제출 산열은 4699237에서 4b274dd로 업데이트되었습니다.
그리고main 메모리 라이브러리도 자신이 관리하는submodule에 변화가 있음을 감지했다.$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: sub (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
그래서 로봇 태군은 새로운 약속을 참조하여 산열하여add,commit,push를 진행한다.$ git add sub
$ git commit -m "revises sub"
[master 83d5f3d] revises sub
1 file changed, 1 insertion(+), 1 deletion(-)
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 273 bytes | 273.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To /path/to/temp/main.git
0b0122a..83d5f3d master -> master
그럼, 여기main 데이터 라이브러리push입니다. 그러나sub 데이터 라이브러리의push는 잊어버린 것에 주의합니다.이 단계에서 원거리와 현지는 이렇다.
main 데이터 라이브러리의 최신 제출 83d5fd3는 자신이 속한sub 데이터 라이브러리의 제출 산열이 4b274dd라고 생각합니다.그러나sub자료고의push를 잊어버렸기 때문에origin의sub자료고는'4b274dd'가 없습니다.
다른 곳에서 clone--recursive
그렇다면 지금까지 집에서 일하고 있는 로봇 태군은 일하러 갈 때가 많지 않다.혹시 모르니까 푸시를 잊었는지 봅시다.$ git log --graph --oneline
* 83d5f3d (HEAD -> master, origin/master) revises sub
* 0b0122a initial commit
응, 제출도 잊지 않았어. 마스터와origin/master는 같은 곳을 가리키며 만족한 로봇 태군, 일터로 가. clone-recursive가 방금 일한 저장소 놀라움일.$ git clone --recursive main.git main2
Cloning into 'main2'...
done.
Submodule 'sub' (/path/to/temp/sub.git) registered for path 'sub'
Cloning into '/path/to/temp/main2/sub'...
done.
error: Server does not allow request for unadvertised object 4b274dd998ccf9244be0f42bb693f4513d28e5f9
Fetched in submodule path 'sub', but it did not contain 4b274dd998ccf9244be0f42bb693f4513d28e5f9. Direct fetching of that commit failed.
낯선 정보'Server does not allow request for unadvertised object'를 보면 로봇 태군이 조급해할 것이다.하지만 이후 소식은 "Fetched in submodule path'sub', but it did not contain4b274dd."보고 보니'하'.
'너무 좋아! 서브 모듈 푸시 까먹었어!'
clone-recursive 이후의 상태는 이렇다.
main의 최신 상태는push지만origin의sub상태는 낡았습니다.따라서 원격으로sub를 가져온 후main이 가리키는 4b274dd의 제출이 없습니다.
이 일은 매우 급하다.집에 갈 시간이 없어요.다행히 집에서 고친 수정은 매우 경미하니, 이쪽은 마음대로 고치면 오늘 현장에서 일하기에 충분하다.먼저 현지에서 일하고 나중에 집에 가서 합병합시다.
우선,submodule의 clone이 실패했기 때문에 방법을 강구하여 해결합니다.sub 디렉터리에 들어갑니다. checkout master.$ git co master
Already on 'master'
Your branch is up to date with 'origin/master'.
이렇게 되면 sub 안은 좋은 상태가 된다.메인 저장소에도 그 변경 사항을 반영하도록 하세요.$ cd ..
$ git add sub
$ git commit -m "updates sub"
[master deda9ab] updates sub
1 file changed, 1 insertion(+), 1 deletion(-)
이렇게 하면 최소한main의submodule가 가리키는 목표가 있는 제출로 변경할 수 있습니다.지금 이 상태입니다.
메인이 가리키는 sub의 제출은 매우 낡았지만 부득이한 것이다.로봇 태군은 여기서 숙제를 시작했다.회사를 떠날 때, 다음에는 반드시 두 개 모두push를 기억해야 한다.집에 돌아온 후, 집에서 일하는 일을 합병하기를 기다리고 있다
총결산
git의submodule를 수정한 후push를 잊어버리고 다른 곳에서clone이나fetch/merge를 시도하면'Server does not allow request for undvertised object'메시지가 나타납니다.익숙해진 사람 "아, 푸시가 잊어버렸어!"눈치챘지만 시간이 많이 걸려서 여기에 메모를 남겼어요.
다른 곳에서clone을 모방하기 위해 별명(main2)clone을 사용합니다. ↩
Reference
이 문제에 관하여(git submodule 업데이트가 push를 잊어버렸을 때.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kaityo256/items/c269b8f2cc47b4799e9f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
로봇 태군은 집에서 일한다.그것은main이라는 자료 라이브러리에submodule로sub라는 자료 라이브러리를 포함합니다.sub는 라이브러리입니다.main에서 그것을 사용하지만, 어느 것도 아직 시들지 않았습니다. 쌍방이 모두 수정해야 합니다.그것을 모방하기 위해 현지에서 두 개의 자료고를 만들어라.
submodule 추가
적절한 디렉터리를 만듭니다. 예를 들어temp입니다.
$ mkdir temp
$ cd temp
그곳에서submodule를 만드는 데 쓰이는 자료 라이브러리sub
.누드 저장소,clone, 파일, 최초의commit,push를 만듭니다.$ git init --bare sub.git
Initialized empty Git repository in /path/to/temp/sub.git/
$ git clone sub.git
Cloning into 'sub'...
warning: You appear to have cloned an empty repository.
done.
$ cd sub
$ echo "sub" >> sub.txt
$ git add sub.txt
$ git commit -m "initial commit"
[master (root-commit) f6e78d2] initial commit
1 file changed, 1 insertion(+)
create mode 100644 sub.txt
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 224 bytes | 224.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/temp/sub.git
* [new branch] master -> master
$ cd ..
여기까지sub라는 자료 라이브러리가 있습니다.다음에main이라는 데이터 라이브러리를 만들어서submodule로 저장합니다.$ git init --bare main.git
Initialized empty Git repository in /path/to/temp/main.git/
$ git clone main.git
Cloning into 'main'...
warning: You appear to have cloned an empty repository.
done.
나는 빈 자료 라이브러리를 만들고 클론을 만들었다.여기서submodule로 방금 제작한sub를 등록하고 제출하면push입니다.$ cd main
$ git submodule add ../sub.git
Cloning into '/path/to/temp/main/sub'...
done.
$ git commit -m "initial commit"
[master (root-commit) 0b0122a] initial commit
2 files changed, 4 insertions(+)
create mode 100644 .gitmodules
create mode 160000 sub
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 295 bytes | 295.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/temp/main.git
* [new branch] master -> master
여기까진 이런 상황이 됐어.원격에main과sub와 같은bare 데이터 라이브러리가 있습니다. 로컬은main이sub를submodule로 관리하고sub의'4699237'이라는 산열을 가리키는 제출입니다.이것이 바로 로봇 태군이 집에서 일을 시작하기 전의 상태이다.
잊을 때까지 submodule 업데이트 및 제출
그럼 로봇 태군이submodule의sub를 살짝 수정했습니다.
$ cd sub
$ echo "sub2" >> sub.txt
$ git ci -m "reivses sub.txt"
[master 4b274dd] reivses sub.txt
1 file changed, 1 insertion(+)
submodule 제출 산열은 4699237에서 4b274dd로 업데이트되었습니다.그리고main 메모리 라이브러리도 자신이 관리하는submodule에 변화가 있음을 감지했다.
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: sub (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
그래서 로봇 태군은 새로운 약속을 참조하여 산열하여add,commit,push를 진행한다.$ git add sub
$ git commit -m "revises sub"
[master 83d5f3d] revises sub
1 file changed, 1 insertion(+), 1 deletion(-)
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 273 bytes | 273.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To /path/to/temp/main.git
0b0122a..83d5f3d master -> master
그럼, 여기main 데이터 라이브러리push입니다. 그러나sub 데이터 라이브러리의push는 잊어버린 것에 주의합니다.이 단계에서 원거리와 현지는 이렇다.main 데이터 라이브러리의 최신 제출 83d5fd3는 자신이 속한sub 데이터 라이브러리의 제출 산열이 4b274dd라고 생각합니다.그러나sub자료고의push를 잊어버렸기 때문에origin의sub자료고는'4b274dd'가 없습니다.
다른 곳에서 clone--recursive
그렇다면 지금까지 집에서 일하고 있는 로봇 태군은 일하러 갈 때가 많지 않다.혹시 모르니까 푸시를 잊었는지 봅시다.
$ git log --graph --oneline
* 83d5f3d (HEAD -> master, origin/master) revises sub
* 0b0122a initial commit
응, 제출도 잊지 않았어. 마스터와origin/master는 같은 곳을 가리키며 만족한 로봇 태군, 일터로 가. clone-recursive가 방금 일한 저장소 놀라움일.$ git clone --recursive main.git main2
Cloning into 'main2'...
done.
Submodule 'sub' (/path/to/temp/sub.git) registered for path 'sub'
Cloning into '/path/to/temp/main2/sub'...
done.
error: Server does not allow request for unadvertised object 4b274dd998ccf9244be0f42bb693f4513d28e5f9
Fetched in submodule path 'sub', but it did not contain 4b274dd998ccf9244be0f42bb693f4513d28e5f9. Direct fetching of that commit failed.
낯선 정보'Server does not allow request for unadvertised object'를 보면 로봇 태군이 조급해할 것이다.하지만 이후 소식은 "Fetched in submodule path'sub', but it did not contain4b274dd."보고 보니'하'.'너무 좋아! 서브 모듈 푸시 까먹었어!'
clone-recursive 이후의 상태는 이렇다.
main의 최신 상태는push지만origin의sub상태는 낡았습니다.따라서 원격으로sub를 가져온 후main이 가리키는 4b274dd의 제출이 없습니다.
이 일은 매우 급하다.집에 갈 시간이 없어요.다행히 집에서 고친 수정은 매우 경미하니, 이쪽은 마음대로 고치면 오늘 현장에서 일하기에 충분하다.먼저 현지에서 일하고 나중에 집에 가서 합병합시다.
우선,submodule의 clone이 실패했기 때문에 방법을 강구하여 해결합니다.sub 디렉터리에 들어갑니다. checkout master.
$ git co master
Already on 'master'
Your branch is up to date with 'origin/master'.
이렇게 되면 sub 안은 좋은 상태가 된다.메인 저장소에도 그 변경 사항을 반영하도록 하세요.$ cd ..
$ git add sub
$ git commit -m "updates sub"
[master deda9ab] updates sub
1 file changed, 1 insertion(+), 1 deletion(-)
이렇게 하면 최소한main의submodule가 가리키는 목표가 있는 제출로 변경할 수 있습니다.지금 이 상태입니다.메인이 가리키는 sub의 제출은 매우 낡았지만 부득이한 것이다.로봇 태군은 여기서 숙제를 시작했다.회사를 떠날 때, 다음에는 반드시 두 개 모두push를 기억해야 한다.집에 돌아온 후, 집에서 일하는 일을 합병하기를 기다리고 있다
총결산
git의submodule를 수정한 후push를 잊어버리고 다른 곳에서clone이나fetch/merge를 시도하면'Server does not allow request for undvertised object'메시지가 나타납니다.익숙해진 사람 "아, 푸시가 잊어버렸어!"눈치챘지만 시간이 많이 걸려서 여기에 메모를 남겼어요.
다른 곳에서clone을 모방하기 위해 별명(main2)clone을 사용합니다. ↩
Reference
이 문제에 관하여(git submodule 업데이트가 push를 잊어버렸을 때.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kaityo256/items/c269b8f2cc47b4799e9f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(git submodule 업데이트가 push를 잊어버렸을 때.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kaityo256/items/c269b8f2cc47b4799e9f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)