git 하위 모듈을 제거하는 현재 방법은 무엇입니까?


91

Mac에서 git 버전 1.9.3 (Apple Git-50)부터 git 하위 모듈을 제거하려면 어떻게해야합니까? 많은 개발자가 작동하지 않는다고 말하는 오래된 정보를 많이 읽고 있습니다. 현재의 방법은 무엇입니까? 할 git deinit pathToSubModule 트릭을 할?

내가 작동 할 것이라고 생각한 단계는 여기에 있지만 의견은 그렇지 않다고 말합니다.

현재 상황과 필요한 사항을 설명하겠습니다. 빠른 저장소를 설치 하고 프로젝트의 하위 모듈로 추가했습니다. 이 코드는 이미 체크인되었으며 다른 사람들이 사용하고 있습니다. 이제해야 할 일은 동일한 Quick 저장소를 포크 하고 내 회사가 보유한보다 안전한 github (완전히 다른 비공개 github)에서 호스팅하는 것입니다. 포크 후 나는 그 포크를 gitSubmodule로 추가하고 이전에 설치했던 현재 Quick 서브 모듈을 대체하고 싶습니다.

업데이트 : 최신 git 버전에서 다음이 올바른 방법이라는 것을 읽었습니다. 확인하십시오.

To remove a submodule added using:

git submodule add blah@blah.com:repos/blah.git lib/blah
Run:

git rm lib/blah
That's it.

For old versions of git (circa ~1.8.5) use:

git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah

이틀 동안 서브 모듈 문제를 해결했습니다. 내가 이것을 발견했을 때 돌파구가 생겼 습니다 : forums.developer.apple.com/thread/13102 . 기본적으로 Xcode 및 기타 앱은 '~'를 포함하는 URL을 확장하는 데 어려움을 겪습니다. ssh : //username@server.remoteHost.com/~/git/MyRepo.git을 ssh : //username@server.remoteHost.com/home/username/git/MyRepo.git로 변경하면 (실제 경로를 찾으십시오. 서버에서) 10 분 만에 모든 기이함이 사라졌습니다.
Elise van Looij

답변:


193

당신은 git submodule deinit

git submodule deinit <asubmodule>    
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>

deinit

주어진 하위 모듈의 등록을 취소합니다. 즉, 작업 트리와 함께 전체submodule.$name
섹션을 제거합니다.git/config .

또한 호출에 git submodule update, git submodule foreach그리고 git submodule sync건너 가 다시 초기화 될 때까지 더 이상 작업 트리에서 서브 모듈의 로컬 체크 아웃을하지 않으려면 그래서이 명령을 사용하여 등록되지 않은 서브 모듈을.

저장소에서 서브 모듈을 정말로 제거하고 git rm대신 사용하고 싶다면 .

경우 --force지정, 서브 모듈의 작업 나무는 로컬 수정 사항을 포함 된 경우에도 제거됩니다.


8
저와 다른 사용자를 위해 서브 모듈을 완전히 지우고 싶습니다. 그래서 내가 필요한 것은 git submodule deinit asubmodule; 그리고 git rm asubmodule ?? 또한 다른 사용자가 캐시 한 하위 모듈은 어떻습니까? 아래로 당겨서 삭제해야합니까?
j2emanue 2015

1
나는 서브 모듈의 로컬 사본을 삭제하고 싶었고 이것이 완벽하게 작동했으며 서브 디렉토리의 모든 파일이 사라졌습니다.
malhal

1
rm -rf <asubmodule>하위 모듈을 등록 취소 한 기본 저장소 버전을 이미 체크 아웃 한 경우 에도 필요할 수 있습니다 .
Sarah Messer 2016 년

6

저는 Git 버전 2.16.2를 사용하고 git rm있으며 대부분 잘 수행합니다.

git rm path-to-submodule

당신과 함께 확인할 수 있습니다 git statusgit diff --cached이 서브 모듈 및 수정을 deinitializes 것을 .gitmodules자동으로. 항상 그렇듯이 변경 사항을 커밋해야합니다.

그러나 하위 모듈이 소스 제어에서 제거 되더라도 .git/modules/path-to-submodule여전히 하위 모듈 저장소와 .git/config해당 URL이 포함되어 있으므로 수동으로 제거해야합니다.

git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule

예를 들어 제거를 취소 할 수 있도록 하위 모듈 저장소 및 구성을 유지하는 것은 의도적 인 것입니다 git reset --hard.


1
최신 답변 및 최단 솔루션
TurboGuma

3

하위 모듈을 안전하게 제거하는 방법.

( https://stackoverflow.com/a/1260982/342794에 추가 )

  1. .gitmodules파일 에서 하위 모듈 섹션을 나열하고 찾습니다 . 터미널을 통해 말합니다 vi .gitmodules. 예:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  2. 하위 모듈은 로컬 포크와 함께 사용할 수 있습니다. 장기 실행 프로젝트의 경우 코드가 원본 저장소와 다를 수 있으며 일부 수정 사항이있을 수 있습니다. 프로젝트 과정에서 하위 모듈 코드가 변경되었는지 확인하는 것이 좋습니다. 예 : master분기 또는 일부 로컬 분기를 가리키는 경우 로그를 확인하십시오 . 터미널을 통해 수행 된 수정 사항을 찾기 위해 git 로그를 탐색합니다. 일반적으로 이들은 디렉토리 아래에 저장됩니다 submodules.

    User$ cd submodules/afnetworking
    User$ git log
    
  3. .gitmodules에서 하위 모듈 섹션을 제거하고 파일을 저장하십시오. 예 : git status수정 된대로 다음 만 표시해야합니다 .

    modified:   .gitmodules
    
  4. 로 변경 스테이지 git add .gitmodules.

  5. .git/config파일 에서 하위 모듈 섹션을 나열하고 찾습니다 . 터미널을 통해 말합니다 vi .git/config. 예:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. git cache sobmodule 파일을 제거하십시오. 실행 git rm --cached submodules/afnetworking(후행 슬래시 없음)은 성공적으로 제거합니다. 예:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. .git디렉토리 아래의 하위 모듈 파일 을 rm -rf .git/modules/.... git status나중에 확인하십시오 .

    User$ rm -rf .git/modules/submodules/afnetworking/
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
        modified:   .gitmodules
        deleted:    submodules/afnetworking
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    
  8. 변경 사항을 커밋하십시오. git status나중에 확인하십시오 .

    User$ git commit -m "Remove submodule afnetworking"
    [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking
    2 files changed, 4 deletions(-)
      delete mode 160000 submodules/afnetworking
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    nothing added to commit but untracked files present (use "git add" to track)
    
  9. 추적되지 않은 하위 모듈 파일을 삭제하십시오.

    User$ rm -rf submodules/afnetworking
    
  10. Xcode 프로젝트에서 참조를 삭제하십시오. 컴파일 및 런타임 문제를 빌드, 수정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.