program story

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

inputbox 2020. 9. 24. 07:49
반응형

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


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

당신은 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지정, 서브 모듈의 작업 나무는 로컬 수정 사항을 포함 된 경우에도 제거됩니다.


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

( 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. Remove the git cache sobmodule files. running git rm --cached submodules/afnetworking (no trailing slash) would remove it successfully. Example:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. Remove the submodule files under .git directory with rm -rf .git/modules/.... Confirm it with git status afterwards.

    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. Commit the changes. Confirm with git status afterwards.

    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. Delete the untracked submodule files.

    User$ rm -rf submodules/afnetworking
    
  10. Delete the references from Xcode project. Build, fix compile and runtime issues.


I'm using Git version 2.16.2 and git rm does the job mostly well:

git rm path-to-submodule

You can verify with git status and git diff --cached that this deinitializes the submodule and modifies .gitmodules automatically. As always, you need to commit the change.

However, even though the submodule is removed from source control, .git/modules/path-to-submodule still contains the submodule repository and .git/config contains its URL, so you still have to remove those manually:

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

Keeping the submodule repository and configuration is intentional so that you can undo the removal with e.g. git reset --hard.

참고URL : https://stackoverflow.com/questions/29850029/what-is-the-current-way-to-remove-a-git-submodule

반응형