서브모듈을 분리하려면 어떻게 해야 하나요?
Git ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★? 안 git submodule rm module_name
git (된 modern git(2022년 갱신)으로git
인스톨)이 매우 심플하게 되었습니다.
- 를 실행하고 커밋합니다.
됩니다.<path-to-submodule>
가 「」에 .gitmodules
파일. 즉, 저장소 내 적절한 하위 모듈의 모든 흔적이 제거됩니다.
다만, 문서에서는,.git
는 ('디르'(dir)의 됩니다.modules/
.git
dir) "다른 저장소에서 가져올 필요 없이 과거의 커밋을 체크아웃할 수 있도록 합니다."
이 에 있는 합니다..git/modules/
.git/config
는, 할 수 있습니다.
rm -rf .git/modules/<path-to-submodule>
, 그리고.git config --remove-section submodule.<path-to-submodule>
.
오래된 커뮤니티 Wiki 설명:
서브모듈을 삭제하려면 다음 작업을 수행해야 합니다.
- 해 주세요.
.gitmodules
filename을 클릭합니다. - 「 」를 스테이지 .
.gitmodules
★★★★git add .gitmodules
- 을 삭제해 .
.git/config
. - 작업 트리와 인덱스에서 하위 모듈 파일을 제거합니다.
git rm --cached path_to_submodule
( 행 ( ( ( ( ( ) - 합니다.
.git
★★★★★★★★★★★★★★★★★★:rm -rf .git/modules/path_to_submodule
- 변경을 커밋합니다.
git commit -m "Removed submodule <name>"
- 추적되지 않은 서브모듈 파일을 삭제합니다.
rm -rf path_to_submodule
"이 더말할 수 . "이 에 대한 하면 "이 서브모듈에 더 이상 관심이 없습니다"라고할 수 있습니다
git submodule init
"git submodule deinit
가 그렇게 하는 방법입니다.
에서는 「」도 합니다.git rm
(2013년 10월 1.8.5일).
요약
그 후, 3 단계의 분리 프로세스는 다음과 같습니다.
0. mv a/submodule a/submodule_tmp
1. git submodule deinit -f -- a/submodule
2. rm -rf .git/modules/a/submodule
3. git rm -f a/submodule
# Note: a/submodule (no trailing slash)
# or, if you want to leave it in your working tree and have done step 0
3. git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule
설명.
rm -rf
이는 다니엘 슈뢰더의 답변에서 언급되고 Eonil이 코멘트에서 요약했다.
하면 남는다
.git/modules/<path-to-submodule>/
변경되지 않았습니다.
따라서 이 메서드로 서브모듈을 일단 삭제하고 다시 추가하면 저장소가 이미 손상되었기 때문에 다시 추가할 수 없습니다.
git rm
: commit 95c16418 을 참조해 주세요.
는 '이렇게 하다'를사용하고 있습니다.
git rm
서브모듈의 경우 서브모듈의 워크트리를 슈퍼프로젝트의 워크트리에서 삭제하고 Gitlink를 인덱스에서 삭제합니다.
, 은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」.gitmodules
는 변경되지 않은 로 남아 있습니다. 할 수 (사용자의 ).이는 현재 제거된 서브모듈의 잔여물이며 사용자를 자극할 수 있습니다(의 설정과 반대)..git/config
이는 사용자가 이 서브모듈에 관심을 보인 것을 알려주는 것으로, 오래된 커밋이 체크아웃 되었을 때 다시 입력되도록 해야 합니다).
」로 해 주세요.
git rm
했을 뿐만 "Submodule"을submodule.<submodule name>
」의 「 」의 항을 참조..gitmodules
파일 및 스테이지를 모두 지정합니다.
git submodule deinit
: 이 패치에 기인합니다.
"와 함께
git submodule init
에 대해 을 가지고 , 에 입력하기를 원할 수git submodule update
트리를 수 있는 정보를 "submodule"을 하지 않는 한).submodule.$name.url
" "에서.git/config
」를 참조해 주세요.
"
deinit
명령어를 제공하여 사용자를 지원합니다.
그러면 특정 서브모듈(또는 초기화된 모든 서브모듈)의 섹션 전체가 삭제됩니다..
가 지정됩니다).
강제하지 않는 한 현재 작업 트리에 수정 사항이 포함되어 있으면 실패합니다.
을 URL에서 수 없는 합니다..git/config
이치노
(de) 단계de')에 주의합니다..git/config
★★★★★★★★★★★★★★★★★」.git/modules/xxx
)
부터 git1.8.5부터git rm
는 다음 사항도 처리합니다.
add
을 'URL'에.gitmodules
파일: 삭제해야 합니다.- submodule 특수 엔트리(이 질문으로 설명): git rm은 인덱스에서 삭제합니다.
git rm --cached path_to_submodule
슬래시 )('슬래시')
그러면 특수 모드 "160000"으로 인덱스에 저장된 디렉토리가 제거되어 하위 모듈 루트 디렉토리로 표시됩니다.
마지막 단계를 잊어버리고 서브모듈이었던 것을 일반 디렉토리로 추가하려고 하면 다음과 같은 오류 메시지가 나타납니다.
git add mysubmodule/file.txt
Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'
주의: Git 2.17 (2018년 2분기) 이후 git 서브모듈 deinit은 더 이상 셸 스크립트가 아닙니다.
C 함수에 대한 호출입니다.
Prathamesh Chavan()pratham-pc
의 commit 2e61273, commit 1342476(2018년 1월 14일)을 참조하십시오.
(2018년 2월 13일, Junio C Hamano에 의해 합병)
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit \
${GIT_QUIET:+--quiet} \
${prefix:+--prefix "$prefix"} \
${force:+--force} \
${deinit_all:+--all} "$@"
이 질문에 대한 대부분의 답변은 오래되었거나 불완전하거나 불필요하게 복잡합니다.
git 1.7.8 이후를 사용하여 복제한 서브모듈은 로컬 레포에 최대 4개의 흔적을 남깁니다.이들 4개의 트레이스를 삭제하는 프로세스는 다음 3개의 명령어로 이루어집니다.
# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule
# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule
# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule
메모만.git 1.8.5.2 이후, 다음의 2개의 커맨드로 동작합니다.
git rm -r the_submodule
rm -rf .git/modules/the_submodule
@Mark Cheverton의 답변이 옳았듯이, 두 번째 줄을 사용하지 않을 경우, 현재 서브모듈을 삭제하더라도 나머지 .git/modules/the_submodule 폴더는 동일한 서브모듈을 나중에 다시 추가하거나 교체하는 것을 방지합니다.와 같이 @VonC는git rm
서브모듈에서 대부분의 작업을 수행합니다.
--업데이트 (07/05/2017)--
하자면, 실실 just just just just just just just just just just justthe_submodule
프로젝트 내 서브모듈의 상대 경로입니다.예를 들어서subdir/my_submodule
내에 subdir
.
코멘트 및 기타 답변에서 올바르게 지적된 바와 같이 2개의 명령어(기능적으로는 서브모듈을 삭제하기에 충분하지만)는 에 트레이스를 남깁니다.[submodule "the_submodule"]
의 .git/config
) 세 명령을 할 수 (2017년 7월 현재).
git config -f .git/config --remove-section submodule.the_submodule 2> /dev/null
간단한 순서
- "이것들"은 다음과 같습니다.
git config -f .git/config --remove-section submodule.$submodulename
git config -f .gitmodules --remove-section submodule.$submodulename
- 「CHANGE MANGE:」
git rm --cached $submodulepath
- 저지르다
- "CHANGE: "CHANGE:
rm -rf $submodulepath
rm -rf .git/modules/$submodulename
★★★★ $submodulepath
선행 슬래시 또는 후행 슬래시는 포함되지 않습니다.
배경
때 ★★★★git submodule add
에만 추가됩니다..gitmodules
한 번 한 번 해보면요.git submodule init
에..git/config
.
따라서 모듈을 분리하여 신속하게 복원할 수 있는 경우에는 다음 절차를 수행합니다.
git rm --cached $submodulepath
git config -f .git/config --remove-section submodule.$submodulepath
것이 git rebase HEAD
및 일 first first firstgit commit
마지막에 이걸 대본에 넣으면
또한 "Git 서브모듈을 채울 수 있나요?"에 대한 답변을 참조하십시오.
추가한 서브모듈을 삭제하려면 다음 명령을 사용합니다.
REPOSITORY=blah@blah.com:repos/blah.git
MOD_DIR=lib/blah
git submodule add $REPOSITORY $MOD_DIR
실행:
git rm $MOD_DIR
바로 그겁니다.
git의 이전 버전(circa~1.8.5, 실제로는 2.26.2)의 경우 다음을 사용합니다.
git submodule deinit $MOD_DIR
git rm $MOD_DIR
git config -f .gitmodules --remove-section submodule.$MOD_DIR
저는 추천뿐만 아니라rm -Rf .git/modules/path/to/submodule
할 수 내는 원래 ).
해야 합니다..gitmodules
★★★★★★★★★★★★★★★★★」.git/config
이치노
git rm --cached path/to/submodule
만약 당신이 git의 메일링 리스트에 글을 쓴다면 아마도 누군가가 당신을 위해 셸 스크립트를 해줄 것입니다.
deinit
과가있있 있있있다다
git submodule deinit <submodule-name>
git rm <submodule-name>
git docs에서:
결점
을 해제합니다. 모든 서브모듈을 합니다.
submodule.$name
disc/config 섹션이 함께 됩니다.
별칭을 사용하여 다른 사용자가 제공하는 솔루션을 자동화할 수 있습니다.
[alias]
rms = "!f(){ git rm --cached \"$1\";rm -r \"$1\";git config -f .gitmodules --remove-section \"submodule.$1\";git config -f .git/config --remove-section \"submodule.$1\";git add .gitmodules; }; f"
설정에 「git」를 할 수 있습니다.git rms path/to/submodule
요약하면 다음과 같습니다.
★★
path_to_submodule
슬래시 ): var(후행 슬래시 없음):path_to_submodule=path/to/submodule
.gitmodules 파일에서 관련 행을 삭제합니다.
git config -f .gitmodules --remove-section submodule.$path_to_submodule
.git/config에서 관련 섹션을 삭제합니다.
git config -f .git/config --remove-section submodule.$path_to_submodule
인덱스에서 $path_to_submodule만 분리하여 제거합니다(정보 손실을 방지).
git rm --cached $path_to_submodule
.gitmodules 변경 추적
git add .gitmodules
슈퍼프로젝트 커밋
git commit -m "Remove submodule submodule_name"
추적되지 않은 하위 모듈 파일 삭제
rm -rf $path_to_submodule
rm -rf .git/modules/$path_to_submodule
이미 Git 저장소(포함)였던 폴더를 추가, 커밋 및 푸시했기 때문에 실수로 서브모듈이 추가된 경우.git
는..gitmodules
, 의 의 파일.git/config
이 경우 필요한 것은 다음과 같습니다.
git rm --cached subfolder
git add subfolder
git commit -m "Enter message here"
git push
FWIW, 저는 이 모든 것을 제거했습니다..git
설정 전 설정git add
.
git submodule deinit <path to submodule>
- 을 삭제해 .
.gitmodules
git rm <path to submodule>
- 프로젝트에서 제거해야 하는 모듈 파일을 삭제합니다.
- 하여 git으로 호출합니다.
git add .gitmodules
- 커밋 및 푸시
이 사이트에서 다양한 답변을 시험해 본 결과, 다음과 같은 솔루션을 얻을 수 있었습니다.
#!/bin/sh
path="$1"
if [ ! -f "$path/.git" ]; then
echo "$path is no valid git submodule"
exit 1
fi
git submodule deinit -f $path &&
git rm --cached $path &&
rm -rf .git/modules/$path &&
rm -rf $path &&
git reset HEAD .gitmodules &&
git config -f .gitmodules --remove-section submodule.$path
그러면 서브모듈을 추가하기 전과 동일한 상태가 복원됩니다.서브모듈을 바로 다시 추가할 수 있습니다.이러한 답변에서는 대부분의 답변에서는 불가능했습니다.
git submodule add $giturl test
aboveScript test
이렇게 하면 커밋할 변경 사항이 없는 깔끔한 체크아웃을 할 수 있습니다.
이 테스트 대상:
$ git --version
git version 1.9.3 (Apple Git-50)
현재 2012년 12월에 하고 있는 일 (대부분의 답변이 조합되어 있습니다)
oldPath="vendor/example"
git config -f .git/config --remove-section "submodule.${oldPath}"
git config -f .gitmodules --remove-section "submodule.${oldPath}"
git rm --cached "${oldPath}"
rm -rf "${oldPath}" ## remove src (optional)
rm -rf ".git/modules/${oldPath}" ## cleanup gitdir (optional housekeeping)
git add .gitmodules
git commit -m "Removed ${oldPath}"
저는 최근에 유용한 git 관련 명령어가 많이 포함된 git 프로젝트를 발견했습니다: https://github.com/visionmedia/git-extras
인스톨 해, 다음과 같이 입력합니다.
git-delete-submodule submodule
파일시스템에 합니다.서브모듈 디렉토리는 repo에서 삭제되고 파일시스템에 계속 존재합니다. 다음과 같이 수 있습니다.git commit -am "Remove the submodule"
.
제가 한 일은 다음과 같습니다.
1) .gitmodules 파일에서 관련 섹션을 삭제합니다.다음 명령을 사용할 수 있습니다.
git config -f .gitmodules --remove-section "submodule.submodule_name"
2) 스테이지 ★★★★.gitmodules
사항 ''"
git add .gitmodules
3)을 3) 에서 합니다..git/config
할 수 . 을 사용하다
git submodule deinit -f "submodule_name"
4. gitlink를 삭제합니다(후행 슬래시 없음).
git rm --cached path_to_submodule
5합니다.).git/modules
:
rm -rf .git/modules/path_to_submodule
6.) 커밋:
git commit -m "Removed submodule <name>"
7.) 추적되지 않은 서브모듈 파일을 삭제합니다.
rm -rf path_to_submodule
독자의 이익을 위해서, 이것은 그것을 요약하고, 일이 예상대로 되지 않는 경우에 그것을 실행하는 방법에 대한 단계별 가이드를 제공하려고 합니다.테스트되고 안전한 방법은 다음과 같습니다.git
」2.17
서브모듈을 삭제하려면 다음 절차를 수행합니다.
submodule="path/to/sub" # no trailing slash!
git submodule deinit -- "$submodule"
git rm -- "$submodule"
- 이 방법으로 동작하지 않는 경우는, 이하를 참조해 주세요.
- 옵션은 없습니다.위험하지 않아요.그리고 더 이상 할 생각은 하지도 마!
- Debian Buster로
2.20.1
Ubuntu © Ubuntu 18.042.17.1
. "$submodule"
에 붙여야 , , 를 조심해야 한다, 띄어쓰기를 해야 한다, .- 의 는, 첫 하고, 의 「」, 「」, 「」, 「」를 치환합니다.
"$submodule"
Windows 를)저저를를를를저저저저저저저저저가저)))))) 。
경고!
디렉토리 내부를 직접 만지지 마십시오!내부 편집
.git
어두운 면으로 들어갑니다.슨슨일일어어어어!!!!!!!!!!!네, 네, 네, 네, 네, 네, 네, 네, 네, 할 수 있습니다.
git
이것 때문에, 많은 편리한 물건들이 없어졌다.git
하는 적절한 처럼요.서브모듈을 다시 제거하는 적절한 방법처럼요.것 같아요.
git submodule
를 삭제할 것을 합니다.$GIT_DIR/modules/<name>/
네 자신.내가 이해하기에 이것은 명백한 잘못일 뿐만 아니라 매우 위험하고 미래에 큰 골칫거리를 야기한다.이하를 참조해 주세요.
주의:
git module deinit
와는 정반대이다.
git module init
그렇지만
git submodule deinit -- module
git rm -- module
또한 와는 정반대이다.
git submodule add -- URL module
git submodule update --init --recursive -- module
일부 명령어는 기본적으로 한 가지 작업만 수행할 필요가 없기 때문입니다.
git submodule deinit -- module
- (1) (1) ★★
.git/config
- (1) (1) ★★
git rm
- (2) 모듈의 파일을 삭제합니다.
- (3) 서브모듈의 서브모듈을 재귀적으로 제거한다.
- ) (4) ★
.gitmodules
git submodule add
- 를
.git/modules/NAME/
- (1)은 (1)을 하다
git submodule init
, "".git/config
- (2는 과 같이 한다
git submodule update
아웃합니다. - ) (4) ★
.gitmodules
- 를
git submodule update --init --recursive -- module
- 필요에 따라 추가 데이터 가져오기
- (3) 서브모듈의 서브모듈을 재귀적으로 체크한다.
엄밀하게 대칭을 유지하는 것은 의미가 없기 때문에 이것은 완전히 대칭일 수 없습니다.명령어를 3개 이상 사용할 필요는 없습니다.또, 「데이터의 풀인」은, 필요하기 때문에 암묵적으로 행해지고 있습니다만, 캐시된 정보를 삭제하는 것은 전혀 필요 없고, 귀중한 데이터가 삭제될 가능성이 있기 때문에 행해지지 않습니다.
보는 사람에게는 곤혹스럽지만, 으로는 좋은 것이다.git
당연한 일을 하고 옳은 일을 할 뿐이지 더 이상 하려고 하지도 않는다. git
단순한 '에어레젠드 월밀샤우'가 아닌 '에어레젠드 월밀샤우'가 아니라 '스위스 군용 칼의 사악한 버전'이라는 의미입니다.
는 '안 하느냐'는요. "어디로요?"git
당연한 것"이라고 말했다.왜냐하면 여기서 "명확한" 것은 관점에 따라 달라지기 때문이다.모든 상황에서 신뢰성이 훨씬 더 중요합니다.따라서 가능한 모든 기술적 상황에서 적절한 것은 아닌 경우가 많습니다.: AFAICS icsics please : AFAICSgit
경로를 ( name: follows follows follows follows follows follows follows follows follows follows follows follows git git git git git git git git git그 ( git )
이것이 실패했을 경우
위의 명령어는 다음과 같은 이유로 실패할 수 있습니다.
- 의 ★★★★★★★★★★★★★★★★★.
git
그럼 좀 더 새로운 것을 쓰세요.git
( ( ( ) 。 - 커밋되지 않은 데이터가 있으며 데이터가 손실될 수 있습니다.그럼 그들을 먼저 투입하는 게 좋을 거야
- .
git clean
(아래 (일부러) - 은 과거에 못하는 .
git
그러면 당신은 어두운 편에 서게 되고 상황은 더 험악해지고 복잡해집니다.(아마 다른 기계로 수정될 것입니다.) - 내가이 더 몇 가지 있을 뿐이다).
git
★★★★★★★★★★★★★★★★★★」
생각할 수 있는 수정은 다음과 같습니다.
「」를 합니다.git
.submodule deinit
안에서git
않는 할 수 있는 )git
로 바꿔서 git
git
는 완전하고 있기 에 다른 할 수 .git
업을완 완료: :
workhorse:~/path/to/worktree$ git status --porcelain
아무것도 출력하면 안 됩니다!만약 그렇다면, 먼저 청소부터 하세요!workhorse:~/path/to/worktree$ ssh account@othermachine
othermachine:~$ git clone --recursive me@workhorse path/to/worktree/.git TMPWORK && cd TMPWORK
- 이제 서브모듈 작업을 수행합니다.
othermachine:~/TMPWORK$ git commit . -m . && exit
workhorse:~/path/to/worktree$ git fetch account@othermachine:TMPWORK/.git
workhorse:~/path/to/worktree$ git merge --ff-only FETCH_HEAD
하지 않는 는, 「」를 사용해git reset --soft FETCH_HEAD
- , 제까지.
git status
수 것은 이렇게 할 수 있는 건 첫 번째 단계 덕분이에요.
★★★★★★★★★★★★★★★★★.othermachine
는, 이 .」, VM 의 Windows 의 Ubuntu WSL 의 어느쪽이든상관없습니다....chroot
만, 입니다). 왜냐하면 네가 만약root
할 수 것입니다.git
를 참조해 주세요.
「 」를 사용할 수 없는 는,ssh
.git
를 (USB 포함)에 복사할 수 ..git
및 stick.directory)에서 클론을 합니다.복사본을 복제하여 다시 깔끔하게 만듭니다.서브모듈에 다른 머신에서 직접 액세스할 수 없는 경우 PITA일 수 있습니다.하지만 이에 대한 해결책도 있습니다.
git config --add url.NEWURLPREFIX.insteadOf ORIGINALURLPREFIX
곱셈을 할 수 , 이 곱셈은 이 곱셈을 할 수 있습니다.$HOME/.gitconfig
git config --add 'url./mnt/usb/repo/.insteadof' https://github.com/
다음과 같은 URL을 다시 씁니다.
https://github.com/XXX/YYY.git
안으로
/mnt/usb/repo/XXX/YYY.git
이 세다에 쉽다.git
이치노
먼저 정리하다
수동으로 청소하는 것은 좋은 방법입니다.이렇게 하면 잊어버린 것이 발견될 수 있기 때문입니다.
- git가 저장되지 않은 것에 대해 불만을 제기할 경우, 그것을 커밋하고 안전한 곳으로 밀어 넣으십시오.
- 남은 음식에 , git은 다음과 같습니다.
git status
★★★★★★★★★★★★★★★★★」git clean -ixfd
입니다. - ' 쪽으로든' .
rm
★★★★★★★★★★★★★★★★★」deinit
네, 네, 네.등):-f
의 경우,git
프로라면 좋을 것 같아요. 여기할 것 같아요.submodule
그러니 후회하는 것보다 안전한 게 좋을 거야
예:
$ git status --porcelain
M two
$ git submodule deinit two
error: the following file has local modifications:
two
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'two' contains local modifications; use '-f' to discard them
$ cd two
$ git submodule deinit --all
error: the following file has local modifications:
md5chk
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'md5chk' contains local modifications; use '-f' to discard them
$ cd md5chk
$ git submodule deinit --all
error: the following file has local modifications:
tino
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'tino' contains local modifications; use '-f' to discard them
$ cd tino
$ git status --porcelain
?? NEW
$ git clean -i -f -d
Would remove the following item:
NEW
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each
5: quit 6: help
What now> 1
Removing NEW
$ cd ../../..
$ git status --porcelain
$ git submodule deinit two
Cleared directory 'two'
Submodule 'someunusedname' (https://github.com/hilbix/src.git) unregistered for path 'two'
없다, -f
needed needed 。submodule deinit
깨끗한 상태라면git clean
해 주세요. 또한 주의해 주세요.git clean -x
는 불필요합니다.이는 무시된 추적되지 않은 파일을 무조건 제거하는 것을 의미합니다.이것은 보통 당신이 원하는 것이지만, 잊지 마세요.캐시된 데이터가 다시 계산되는 데 몇 시간에서 며칠이 걸리는 등 무시된 파일이 중요한 경우가 있습니다.
" remove"는 삭제하지 않는가?$GIT_DIR/modules/<name>/
나중에 문제가 발생할 것을 우려하여 캐시된 저장소를 제거하려고 할 수 있습니다.이것은 사실이지만, 그 「문제」에 부딪치는 것이 그것을 해결하는 올바른 방법입니다.왜냐하면 수정은 쉽고, 올바르게 하면 당신은 영원히 행복하게 살 수 있기 때문입니다.이렇게 하면 데이터를 직접 제거할 때보다 번거로운 문제를 피할 수 있습니다.
예:
mkdir tmptest &&
cd tmptest &&
git init &&
git submodule add https://github.com/hilbix/empty.git two &&
git commit -m . &&
git submodule deinit two &&
git rm two &&
git commit -m . &&
git submodule add https://github.com/hilbix/src.git two
마지막 행은 다음 오류를 출력합니다.
A git directory for 'two' is found locally with remote(s):
origin https://github.com/hilbix/empty.git
If you want to reuse this local git directory instead of cloning again from
https://github.com/hilbix/src.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
이 에러의 원인왜냐면.git/modules/two/
이전에는 https://github.com/hilbix/empty.git 에서 입력되어 현재는 https://github.com/hilbix/src.git 에서 다시 입력됩니다.https://github.com/hilbix/empty.git 에서 재인스톨 하면, 표시되지 않습니다.
제제어 떻???use use use! 사용법 사용법--name someunusedname
git submodule add --name someunusedname https://github.com/hilbix/src.git two
.gitmodules
마치...
[submodule "someunusedname"]
path = two
url = https://github.com/hilbix/src.git
ls -1p .git/modules/
someunusedname/
two/
이렇게 하면 향후 브랜치/커밋을 전진/후진 전환할 수 있으며, 이로 인해 다시는 문제가 발생하지 않습니다.two/
2개의 서로 다른(호환할 수 없는) 업스트림저장소가 있습니다.가장 좋은 점은 둘 다 로컬로 캐시할 수 있다는 것입니다.
- 이것은 당신에게만 해당되는 것이 아닙니다.또한 저장소를 사용하는 다른 모든 경우에도 해당됩니다.
- 을 사용법오래된 서브모듈의 최신 버전을 푸시하지 않은 경우 로컬복사를 입력하고 나중에 푸시할 수 있습니다.위한 에 PITA에 까지).
git
를 참조해 주세요.
이 발생합니다.는 "C"를 사용하지 때문입니다.이는 사용자가 캐시된 디렉토리를 사용하지 않기 때문입니다.--name
이죠? 그래서 을 할 마다 삭제가 필요할 수 ..git/modules/<module>/
디렉토리가 몇 번이고 반복됩니다.은 매우 , 어렵습니다.git bisect
.
따라서 이 모듈 디렉토리를 플레이스 홀더로 유지해야 하는 매우 기술적인 이유가 있습니다.에 있는 .git/modules/
더 잘 알지 못하거나 이것이 다음과 같은 강력한 기능을 만든다는 것을 말하는 것을 잊거나 둘 중 하나입니다.git bisect
이러한 서브모듈의 비호환성을 넘으면 거의 사용할 수 없습니다.
이랬다, 여기 보세요.ls
기기뭐 가가?
의 두 two/
속하지 않다.git/modules/two/
..git/modules/someunusedname/
! !서......git rm $module; rm -f .git/module/$module
★★★★★★★★★★★★★★★★★! 중 해야 합니다.module/.git
★★★★★★★★★★★★★★★★★」.gitmodules
제거할 수 있는 적절한 것을 찾을 수 있습니다!
그래서 대부분의 다른 답변이 이 위험한 함정에 빠질 뿐만 아니라 매우 인기 있는 확장자들도 이 버그를 가지고 있습니다(현재 이 버그는 거기에 고정되어 있습니다).그러니 손 떼는 게 좋을 거야.git/
디렉토리(정확하지 않은 경우)를 참조해 주세요.
그리고 철학적인 관점에서 역사를 지우는 것은 항상 잘못된 것이다!양자역학은 예외지만 이건 완전히 달라요
참고로 짐작하셨을 겁니다.힐빅스는 제 GitHub 계정입니다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 버전 git을 사용하고 .2.28.0
한의 답변은" "입니다.
git rm path-to-submodule
단, 서브모듈이 소스 제어에서 삭제되어도 .git/modules/path-to-submodule에는 서브모듈 저장소가 포함되어 있고 .git/config에는 해당 URL이 포함되어 있으므로 수동으로 삭제해야 합니다.
git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule
가끔 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,-f
삭제:
$ git rm -f img2vec
예를 들어 다음과 같은 오류가 발생할 수 있습니다.
$ git rm img2vec/
error: the following file has changes staged in the index:
img2vec
(use --cached to keep the file, or -f to force removal)
는 존을 한 더 .cd
하여 Git합니다.
cd submodule
rm -fr .git
그러면 하위 모듈에 대한 오래된 참조 없이 상위 Git 저장소의 일부로 파일을 커밋할 수 있습니다.
git v2.7.4에서는 심플한 3단계가 정상적으로 동작했습니다.
git submodule deinit -f -- a/submodule
git rm -f a/submodule
git commit
다음은 필요하거나 유용한 4가지 단계입니다(중요한 단계 먼저).
git rm -f the_submodule
rm -rf .git/modules/the_submodule
git config -f .git/config --remove-section submodule.the_submodule
git commit -m "..."
이론상으로는git rm
1단계에서 처리하도록 하겠습니다.OP 질문의 두 번째 부분은 언젠가 긍정적으로 대답할 수 있기를 바랍니다(1개의 명령으로 할 수 있음).
그러나 2017년 7월 현재 2단계에서 데이터를 삭제해야 합니다..git/modules/
그렇지 않으면 나중에 하위 모듈을 다시 추가할 수 없습니다.
git 1.8.5+는 tinlyx의 답변과 같이 위의 두 단계를 거치지 않아도 될 것입니다.git submodule
을 사용법
에서는 3단계에서 '3단계'를해 줍니다.the_submodule
" " " "".git/config
(이 엔트리로 인해 오래된 git 버전에서는 문제가 발생할 수 있지만 테스트할 것은 없습니다).
대부분의 에서는 '아까보다'를 사용하는 것이 .git submodule deinit
사용법이 더 명확하고 혼란스럽지 않습니다.git config -f .git/config --remove-section
git-submodule 문서에 따르면git deinit
:
지정된 서브모듈 등록 취소...저장소에서 서브모듈을 삭제하고 대신 git-rm[1]을 사용하는 것을 커밋하는 경우.
입니다.git commit
하면가 날 git submodule summary
2.의 경우 (git 2.7의 경우:
fatal: Not a git repository: 'the_submodule/.git'
* the_submodule 73f0d1d...0000000:
이것은 스텝 2 또는 3 중 어느 쪽을 실행하든 상관없습니다.
git에서 서브모듈을 삭제하는 가장 좋은 방법은 다음과 같습니다.
$ git submodule deinit -f <submodule-name>
$ rm -rf .git/modules/<submodule-name>
$ git config -f .gitmodules --remove-section submodule.<submodule-name>
$ git config -f .git/config --remove-section submodule.<submodule-name>
$ git rm --cached <submodule-name>
$ git commit -m 'rm submodule: <submodule-name>'
방금 .submodule (정확한 이름을 잊어버린) 숨김 파일을 찾았습니다.목록이...그런 식으로 개별적으로 지울 수 있습니다.방금 하나 있어서 삭제했어요.간단하지만 서브모듈에 뭐가 붙어있는지 모르기 때문에 Git을 망칠 수 있습니다.libetpan의 일반적인 업그레이드 문제를 제외하면 아직까지는 괜찮은 것 같습니다만, (바람직하게) 관련이 없습니다.
수동 삭제를 게시한 사람이 아무도 없다는 것을 알고 추가했습니다.
Git 2.17 이상에서는 다음과 같습니다.
git submodule deinit -f {module_name}
git add {module_name}
git commit
project dir: ~/foo_project/
submodule: ~/foo_project/lib/asubmodule
- - - - - - - - - - - - - - - - - - - - - - - - -
run:
1. cd ~/foo_project
2. git rm lib/asubmodule &&
rm .git/modules/lib/asubmodule &&
git submodule lib/asubmodule deinit --recursive --force
지 안 된 예를 , 서브모듈을 추가해 주세요.git stash
폴더를 삭제합니다.이는 서브모듈 추가가 최근 repo에서 수행한 유일한 작업이라고 가정합니다.
요약하면 다음과 같습니다.
path_to_submodule var 설정(후행 슬래시 없음):
path_to_submodule=path/to/submodule
.gitmodules 파일에서 관련 행을 삭제합니다.
git config -f .gitmodules --remove-section submodule.$path_to_submodule
.git/config에서 관련 섹션을 삭제합니다.
git config -f .git/config --remove-section submodule.$path_to_submodule
인덱스에서 $path_to_submodule만 분리하여 제거합니다(정보 손실을 방지).
git rm --cached $path_to_submodule
.gitmodules 변경 추적
git add .gitmodules
슈퍼프로젝트 커밋
git commit -m "Remove submodule submodule_name"
추적되지 않은 하위 모듈 파일 삭제
rm -rf $path_to_submodule
rm -rf .git/modules/$path_to_submodule
참고 항목: 대체 가이드라인
이건 나한테 효과가 있었어.위의 답변은 단말기에서 이 내용을 표시하고 있었으며, 그 외에는 아무 일도 일어나지 않았습니다.
'fatal: not removing 'demolibapp' recursively without -r'
- demilibapp은 삭제할 서브모듈 이름입니다.
- git 서브모듈 deinit delimibapp
- git rm --syslog demilibapp -r
- rm - syslogs . syslogs / syslogs / syslogibapp
- git add --모두
- git - m "commit extra submodules"
- git push
- rm -420 demlibapp
로컬 파일시스템에서 폴더를 삭제하지 않고 서브모듈을 삭제할 경우 다음 작업을 수행할 수 있습니다.
MOD=example
git rm --cached -f apps/$MOD
git config -f .gitmodules --remove-section submodule.$MOD
언급URL : https://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule
'programing' 카테고리의 다른 글
Angular 프로젝트에 이미지(및 기타 자산)를 로드하는 방법 (0) | 2023.04.24 |
---|---|
Azure 스토리지:크기가 0바이트인 업로드된 파일 (0) | 2023.04.24 |
오류: 서비스가 잘못되었습니다. (0) | 2023.04.24 |
메서드 매개 변수를 변경할 수 있도록 신속하게 설정하시겠습니까? (0) | 2023.04.24 |
Log4Net(애플리케이션 통찰력 포함) (0) | 2023.04.24 |