Vraag Hoe stop je met het volgen en negeer je wijzigingen in een bestand in Git?


Ik heb een project gekloond dat een aantal bevat .csproj bestanden. Ik heb mijn lokaal niet nodig / leuk csproj bestanden worden bijgehouden door Git (of opgevoed bij het maken van een patch), maar ze zijn duidelijk nodig in het project.

Ik heb toegevoegd *.csproj naar mijn LOCAL .gitignore, maar de bestanden staan ​​al in de repository.

Wanneer ik de git-status typ, toont het mijn wijzigingen in csproj waar ik niet in geïnteresseerd ben om patches bij te houden of in te dienen.

Hoe verwijder ik de "tracking" van deze bestanden van mijn persoonlijke repo (maar bewaar ze in de bron zodat ik ze kan gebruiken) zodat ik de wijzigingen niet zie wanneer ik een status maak (of een patch maak)?

Is er een correcte / canonieke manier om met deze situatie om te gaan?


1429
2018-06-01 19:08


oorsprong


antwoorden:


Gewoon bellen git rm --cached op elk van de bestanden die u wilt verwijderen van revisiebeheer moet goed zijn. Zolang uw lokale negeerpatronen correct zijn, ziet u deze bestanden niet in de uitvoer van de git-status.

Merk op dat deze oplossing de bestanden uit de repository verwijdert, dus alle ontwikkelaars zouden hun eigen lokale (niet-revisie gecontroleerde) kopieën van het bestand moeten behouden

Om te voorkomen dat git veranderingen in deze bestanden detecteert, moet je ook deze opdracht gebruiken:

git update-index --assume-unchanged [path]

Wat je waarschijnlijk wilt doen: (van beneden @Ryan Taylor antwoord)

  1. Dit is om te zeggen of je je eigen onafhankelijke versie van het bestand of de map wilt. U wilt bijvoorbeeld niet overschrijven (of verwijderen)   productie / tijdelijke configuratiebestanden.

git update-index --skip-worktree <path-name>

Het volledige antwoord staat hier in deze URL: http://source.kohlerville.com/2009/02/untrack-files-in-git/


1795
2018-06-01 19:16



Als je dat doet git update-index --assume-unchanged file.csproj, git zal file.csproj niet automatisch controleren op wijzigingen: dat voorkomt dat ze in git-status komen als je ze verandert. Zodat je al je .csproj-bestanden op deze manier kunt markeren - hoewel je handmatig nieuwe moet markeren die de upstream repo je stuurt. (Als je ze in je hebt .gitignore of .git/info/exclude, dan worden degenen die u maakt genegeerd)

Ik weet niet helemaal zeker wat .csproj-bestanden zijn ... als ze iets zijn in de lijn van IDE-configuraties (vergelijkbaar met Eclipse .eclipse en .classpath-bestanden), dan zou ik voorstellen dat ze gewoon nooit brongestuurd moeten zijn bij alle. Aan de andere kant, als ze deel uitmaken van het build-systeem (zoals Makefiles) dan moeten ze dat duidelijk --- en een manier om optionele lokale wijzigingen op te pikken (bijv. Van een local.csproj a la config.mk) zou nuttig zijn : verdeel de opbouw in globale onderdelen en lokale overschrijvingen.


223
2018-06-01 19:24



Dit is een proces in twee stappen:

  1. Verwijder het volgen van bestand / map - maar bewaar ze op schijf - gebruik

    git rm --cached 
    

    Nu verschijnen ze niet als "gewijzigd", maar nog steeds als

        untracked files in  git status -u  
    
  2. Voeg ze toe .gitignore


135
2017-08-02 14:25



Er zijn 3 opties, je wilt waarschijnlijk # 3

1. Hierdoor blijft het lokale bestand voor u bewaard, maar wordt het voor iedereen verwijderd wanneer ze aan het trekken zijn.

git rm --cached <file-name> of git rm -r --cached <folder-name>

2. Dit is voor optimalisatie, zoals een map met een groot aantal bestanden, bijvoorbeeld SDK's die waarschijnlijk nooit zullen veranderen. Het vertelt git om te stoppen met het checken van die enorme map elke keer dat er wijzigingen worden aangebracht, omdat deze er geen zal hebben.

git update-index --assume-unchanged <path-name>

3. Dit is om te zeggen of je je eigen onafhankelijke versie van het bestand of de map wilt. U wilt bijvoorbeeld niet de productie- / staging-configuratiebestanden overschrijven (of verwijderen).

git update-index --skip-worktree <path-name>

Het is belangrijk om dat te weten git update-index  zal niet propageren met git en elke gebruiker moet het onafhankelijk uitvoeren.


108
2017-10-26 21:18



Het geaccepteerde antwoord werkte nog steeds niet voor mij

ik gebruikte

git rm -r --cached.

git add.

git commit -m "fixing .gitignore"

Heb het antwoord gevonden van hier 


78
2017-09-18 05:44



Bent u uw .gitignore vergeten?

Als je het hele project lokaal hebt, maar hebt vergeten je toe te voegen en te negeren en nu een aantal onnodige bestanden bijhoudt, gebruik dan dit commando om alles te verwijderen

git rm --cached -r .

zorg dat je aan de basis van het project staat.

Dan kun je het gebruikelijke doen

Toevoegen

git add .

plegen

git commit -m 'removed all and added with git ignore'

Duwen

git push origin master

Conclusie

Ik hoop dat dit mensen helpt die veranderingen in hun moeten aanbrengen .gitignore of vergat het allemaal samen.

  • Het verwijdert de volledige cache
  • Kijkt naar je .gitignore
  • Voegt de bestanden toe die u wilt volgen
  • Duw naar je repo

37
2017-11-04 10:25



Om wat tijd te besparen kunnen de regels die u toevoegt aan uw .gitignore worden gebruikt voor het verwijderen van meerdere bestanden / mappen, d.w.z.

git rm --cached app/**/*.xml

of

git rm --cached -r app/widgets/yourfolder/

enz.


20
2017-11-07 13:18



Zoals aangegeven in andere antwoorden, is het geselecteerde antwoord fout.

De antwoord op een andere vraag suggereert dat het wellicht een skip-worktree is die vereist is.

git update-index --skip-worktree <file>

20
2018-05-12 11:33



Om te voorkomen dat een bestand via git wordt bewaakt

git update-index --assume-unchanged [file-path]

En om het terug te gebruiken gebruik

git update-index --no-assume-unchanged [file-path]

3
2018-04-18 09:41