Wat is de huidige manier om een ​​git-submodule te verwijderen?

vanaf git versie 1.9.3 (Apple Git-50) op mac hoe verwijder ik een git submodule? Ik lees veel verouderde informatie en veel ontwikkelaars vertellen me dat ze niet zullen werken. Wat is de huidige manier?
zal git deinit pathToSubModuledoen?

De stappen waarvan ik dacht dat ze zouden werken, zijn hier, maar de opmerkingen zeggen dat ze dat niet zullen doen.

Laat me mijn huidige situatie uitleggen en wat ik moet bereiken. Ik heb de Quick repositorygeïnstalleerd en toegevoegd als submodule aan mijn projecteren. Deze code is al ingecheckt en wordt door anderen gebruikt. Wat ik nu moet doen is dezelfde Quick-repository forken deze hosten op een veiligere github die mijn bedrijf heeft (dus een geheel andere privé-github). Na het fork te hebben gemaakt, wil ik die fork toevoegen als een gitSubmodule en deze de huidige Quick submodule laten vervangen die ik eerder had geïnstalleerd.

update: ik heb gelezen dat het volgende de juiste manier is voor de nieuwste git-versie, bevestig dit alstublieft?

To remove a submodule added using:
git submodule add [email protected]: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

Antwoord 1, autoriteit 100%

Je hebt de 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

De registratie van de opgegeven submodules ongedaan maken, d.w.z. verwijder de hele submodule.$name
sectie van .git/configsamen met hun werkboom.

Verdere oproepen naar git submodule update, git submodule foreachen git submodule synczullen alle niet-geregistreerde submodules overslaantotdat ze opnieuw zijn geïnitialiseerd, dus gebruik dit commando als je geen lokale check-out van de submodule meer in je werkboom wilt hebben.

Als je echt een submodule uit de repository wilt verwijderen en die wilt vastleggen, gebruik dan git rm.

Als --forceis opgegeven, wordt de werkboom van de submodule verwijderd, zelfs als deze lokale wijzigingen bevat.


Antwoord 2, autoriteit 6%

Ik gebruik Git versie 2.16.2 en git rmdoet het werk meestal goed:

git rm path-to-submodule

Je kunt met git statusen git diff --cachedverifiëren dat dit de submodule de-initialiseert en .gitmodulesautomatisch wijzigt. Zoals altijd moet je de wijziging doorvoeren.

Hoewel de submodule is verwijderd uit bronbeheer, bevat .git/modules/path-to-submodulenog steeds de submodule-repository en bevat .git/configde URL, dus je moet die nog steeds handmatig verwijderen:

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

Het bewaren van de submodule repository en configuratie is opzettelijk, zodat u de verwijdering ongedaan kunt maken met b.v. git reset --hard.


Antwoord 3

Hoe een submodule veilig te verwijderen.

(toegevoegd aan https://stackoverflow.com/a/1260982/342794)

  1. Lijst en zoek de submodule-sectie in het .gitmodules-bestand. Zeg via terminal vi .gitmodules. Voorbeeld:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  2. Submodules kunnen worden gebruikt met lokale forks. Voor langlopende projecten kan de code verschillen van de originele repo en mogelijk enkele fixes bevatten. Het is een goed idee om te controleren of de code van de submodule in de loop van het project is gewijzigd. Voorbeeld: Kijk naar de logs, als het verwijst naar de masterbranch of een lokale branch. het verkennen van git-logboeken om wijzigingen te vinden die via terminal zijn gedaan. meestal worden deze opgeslagen in een map, mijn voorbeeld, onder de map submodules.

    User$ cd submodules/afnetworking
    User$ git log
    
  3. Verwijder de submodule-sectie uit .gitmodules, sla het bestand op. Voorbeeld: git statuszou alleen volgende moeten tonen als gewijzigd

    modified:   .gitmodules
    
  4. Voer de wijzigingen uit met git add .gitmodules.

  5. Lijst en zoek de submodule-sectie in .git/config-bestanden. Zeg via terminal vi .git/config. Voorbeeld:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. Verwijder de git cache sobmodule-bestanden. het uitvoeren van git rm --cached submodules/afnetworking(geen slash) zou het succesvol verwijderen. Voorbeeld:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. Verwijder de submodulebestanden in de .gitdirectory met rm -rf .git/modules/.... Bevestig het daarna met 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. Voeg de wijzigingen door. Bevestig daarna met 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. Verwijder de niet-getrackte submodulebestanden.

    User$ rm -rf submodules/afnetworking
    
  10. Verwijder de verwijzingen uit het Xcode-project. Problemen met compileren en runtime bouwen, oplossen.

Other episodes