De inhoud van een reeds ingecheckte directory negeren?

Ik heb een git-repository die alleen wordt gebruikt voor afbeeldingen en geluidsbestanden die in verschillende projecten worden gebruikt. Ze bevinden zich allemaal in één map zonder submappen. Nu heb ik zojuist een script gemaakt om deze middelen te kopiëren vanuit een andere, gestructureerde map, met verschillende niveaus van submappen.

Nu wil ik alleen dat de (bron) hiërarchische bestandsstructuur wordt gevolgd door git, en de (doel) platte map (met alle bestanden op één stapel) moet worden genegeerd.

Ik heb de doelmap toegevoegd aan .gitignore, maar git houdt nog steeds wijzigingen erin bij. Ik dacht dat als ik de verwijdering van het oude bestand in de doelmap beging, git misschien zou stoppen met het volgen van de nieuwe inhoud (gekopieerd door het script), maar dat doet het niet.

Hoe zorg ik ervoor dat git de doelmap vergeet?


Antwoord 1, autoriteit 100%

Dit commando zorgt ervoor dat git je directory en alle bestanden eronder ontvolgt zonder ze daadwerkelijk te verwijderen:

git rm -r --cached <your directory>

De optie -rzorgt ervoor dat alle bestanden in uw directory worden verwijderd.

De optie --cachedzorgt ervoor dat de bestanden alleen uit de git-index worden verwijderd, niet je werkkopie. Standaard zou git rm <file><file>verwijderen.


Antwoord 2, autoriteit 15%

Als je een bijgehouden bestand nodig hebt (ingecheckt), maar geen verdere wijzigingen van een bestand wilt volgen terwijl je het zowel in je lokale repository als in de remote repository bewaart, kan dit met:

p>

git update-index --assume-unchanged path/to/file.txt

Daarna zullen eventuele wijzigingen aan dit bestand niet langer worden weergegeven in git status.


Antwoord 3

Voor een submap met de naam blah/toegevoegd aan git, lijken beide volgende te werken om nieuwe bestanden in blah/te negeren. Toegevoegd aan .gitignore:

blah 
blah/*

Antwoord 4

TL;DR om je git-repository op te schonen en ervoor te zorgen dat ALLEje genegeerde items inderdaad worden genegeerd:

git rm -r --cached .
git add .
git commit -m "Clean up ignored files"

Opmerking: u hoeft geen map op te geven, op deze manier maakt u de volledige externe reposchoon.

Om verder te gaan, lees dit


Antwoord 5

Ik weet niet zeker of dit telt of me een slecht persoon maakt, maar hier komt het.

  1. Ik heb *Generated*toegevoegd aan het root .gitignore-bestand
  2. Ik heb de bestanden die ik wil behouden ingediend als GeneratedFile.Whatever.ext.CheckedIn
  3. Ik heb een git hook gemaakt bij het afrekenen om een ​​powershell-script aan te roepen door dit te doen:

dir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}

Ik voel me een beetje slecht over mezelf… maar het werkt echt.


Antwoord 6

Ok, het lijkt erop dat je eerst moet inchecken met de directory helemaal leeg (noch oude noch nieuwe bestanden), en alle bestanden die daarna worden toegevoegd, worden genegeerd. Als u de oude bestanden verwijdert en nieuwe toevoegt voordat u ze vastlegt, worden de nieuwe toegevoegd aan de repo, hoewel ze moeten worden genegeerd.

Dit werkte in ieder geval voor mij in deze situatie. Het zou nog steeds geweldig zijn als iemand meer inzicht zou kunnen geven in wat er aan de hand is.

Other episodes