.gitignore en “De volgende niet-gesraceerde werkboombestanden zouden worden overschreven door afrekenen”

Dus ik heb een map toegevoegd aan mijn .gitignore-bestand.

Zodra ik een git statusdoe, vertelt het me

# On branch latest
nothing to commit (working directory clean)

Wanneer ik echter probeer te veranderen, krijg ik het volgende:

My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
    public/system/images/9/thumb/red-stripe.jpg
    public/system/images/9/original/red-stripe.jpg
    public/system/images/8/thumb/red-stripe-red.jpg
    public/system/images/8/original/red-stripe-red.jpg
    public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
    public/system/images/7/thumb/red-stripe-dark.jpg
    public/system/images/7/original/red-stripe-dark.jpg
    public/system/images/7/original/DSC07833.JPG
    public/system/images/6/thumb/red-stripe-bw.jpg
    public/system/images/6/original/website-logo.png
    public/system/images/6/original/red-stripe-bw.jpg
    public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/5/original/logocompv-colored-squares-100px.png
    public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/4/thumb/DSC_0001.JPG
    public/system/images/4/original/logo.png
    public/system/images/4/original/DSC_0001.JPG
    public/system/images/4/original/2-up.jpg
    public/system/images/3/thumb/logo2.gif
    public/system/images/3/original/logo2.gif
    public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/3/original/11002000962.jpg
    public/system/images/2/thumb/Profile Pic.jpg
    public/system/images/2/original/Profile Pic.jpg
    public/system/images/2/original/02 Login Screen.jpg
    public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting

Zo ziet mijn .gitignore-bestand eruit:

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

Hoe krijg ik dit werkend, zodat ik van branch kan wisselen zonder die bestanden te verwijderen?

Als ik een wijziging aanbreng, heeft dit dan invloed op die bestanden? Met andere woorden, als ik daarna terug zou komen naar deze branch, zou alles dan perfect zijn zoals tot aan mijn laatste commit?

Ik wil die bestanden niet kwijtraken, ik wil gewoon niet dat ze worden bijgehouden.


Antwoord 1, autoriteit 100%

Het lijkt erop dat je de bestanden wilt negeren, maar ze zijn al vastgelegd. .gitignore heeft geen effect op bestanden die al in de repo staan, dus ze moeten worden verwijderd met git rm --cached. De --cachedzal voorkomen dat het enig effect heeft op je werkkopie en het zal gewoon markeren als verwijderd de volgende keer dat je commit. Nadat de bestanden uit de repo zijn verwijderd, zal de .gitignore voorkomen dat ze opnieuw worden toegevoegd.

Maar je hebt een ander probleem met je .gitignore, je gebruikt overmatig veel jokertekens en zorgt ervoor dat het minder overeenkomt dan je verwacht. Laten we in plaats daarvan de .gitignore wijzigen en dit proberen.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/

Antwoord 2, autoriteit 96%

WAARSCHUWING: het verwijdert niet-getrackte bestanden, dus het is geen goed antwoord op de gestelde vraag.

Ik heb ook op dit bericht geklikt. In mijn geval wilde ik de bestanden niet bewaren, dus dit werkte voor mij:

git 2.11 en nieuwer

git clean  -d  -f .

oudere git

git clean  -d  -f ""

Als je ook bestanden wilt verwijderen die door git worden genegeerd, voer dan de volgende opdracht uit.

WEES GEWAARSCHUWD!!! DIT VERNIET WAARSCHIJNLIJK JE PROJECT, ALLEEN GEBRUIKEN ALS JE 100% WEET WAT JE DOET

git 2.11 en nieuwer

git clean  -d  -fx .

oudere git

git clean  -d  -fx ""

http://www.kernel.org/ pub/software/scm/git/docs/git-clean.html

  • -xbetekent dat genegeerde bestanden ook worden verwijderd, evenals bestanden die onbekend zijn bij git.

  • -dbetekent het verwijderen van niet-bijgehouden mappen naast niet-bijgehouden bestanden.

  • -fis vereist om het te forceren.


Antwoord 3, autoriteit 97%

Waarschuwing: hiermee worden de lokale bestanden verwijderd die niet zijn geïndexeerd

Dwing het gewoon: git checkout -f another-branch


Antwoord 4, autoriteit 60%

Als je OS X gebruikt, kan het zijn dat in de naam van een bestand bepaalde tekens van hoofdletter zijn veranderd. Probeer de volgende configuratieoptie in te stellen:

git config core.ignorecase true

5, Autoriteit 14%

Dit werkte voor mij.

1. git fetch --all
 2. git reset --hard origin/{branch_name}

6, Autoriteit 8%

Er is een opdracht voor deze delicate taak (permanent verwijderde bestanden die permanent worden verwijderd)

git clean -i

Dan git pullzal doen.


7, Autoriteit 4%

Helaas noch git rm --cachedof git clean -d -fx ""deed het voor mij.

Mijn oplossing eindigde met het pushen van mijn branch naar remote, het klonen van een nieuwe repo en het samenvoegen van de nieuwe repo. Andere mensen die toegang hadden tot de repo moesten hetzelfde doen.

Moraal van het verhaal: gebruik vanaf het begin een .gitignore-bestand.


Antwoord 8, autoriteit 4%

Deze twee functies

  1. git rm --cached
  2. git checkout -f another-branch

werkte NIET voor mij.

In plaats daarvan heb ik het bestand fysiek verwijderd (in verduistering) zoals Git je zegt te doen;

Please move or remove them before you can switch branches.

en dan voeg ik het toe/beloof ik het.

en toen trok ik en het werkte!


Antwoord 9, autoriteit 4%

Als u deze vraag snel wilt oplossen, kunt u deze opdracht gebruiken:

git checkout -f dev

Antwoord 10, autoriteit 3%

Ik had hetzelfde probleem bij het uitchecken naar een branch op basis van een eerdere commit. Git weigerde af te rekenen vanwege niet-getrackte bestanden.

Ik heb een oplossing gevonden en ik hoop dat het jou ook zal helpen.

Het toevoegen van de betrokken mappen aan .gitignoreen het uitgeven van $ git rm -r --cachederop is blijkbaar niet genoeg.

Veronderstel dat je een branch wilt maken op basis van een eerdere commit K om wat dingen te testen en terug te komen naar de huidige versie. Ik zou het in de volgende stappen doen:

  1. Stel de niet-getrackte bestanden in:
    bewerk de .gitignoreen pas $ git rm -r --cachedtoe op de bestanden en mappen waarvan je wilt dat de git negeert. Voeg ook het bestand .gitignorezelf toe aan .gitignoreen vergeet niet om $ git rm -r --cached .gitignoreuit te geven. Dit zorgt ervoor dat het negeergedrag van git hetzelfde blijft in de eerdere commits.

  2. Voeg de zojuist aangebrachte wijzigingen door:

    $ git add -A
    $ git commit
    
  3. Sla het huidige logboek op, anders kunt u problemen krijgen bij het terugkeren naar de huidige versie

    $ git log > ../git.log

  4. Harde reset naar de commit K

    $ git reset --hard version_k

  5. Maak een branch op basis van de commit K

    $ git branch commit_k_branch

  6. Afrekenen in dat filiaal

    $ git checkout commit_k_branch

  7. Doe je ding en beloof het

  8. Betaal opnieuw af bij master

    $ git checkout master

  9. Herstel opnieuw naar de huidige versie

    $ git reset current_versionof $ git reset ORIG_HEAD

  10. Je kunt nu hard resetten naar de HEAD

    git reset --hard HEAD

OPMERKING!Sla de voorlaatste stap niet over (zoals bijv. $ git reset --hard ORIG_HEAD
) anders gaan de niet-getrackte bestanden waar git hierboven over klaagde verloren.

Ik heb er ook voor gezorgd dat de bestanden waarover Git klaagde niet werden verwijderd. Ik kopieerde ze naar een tekstbestand en gaf het commando $ for i in $(cat ../test.txt); do ls -ahl $i; done

Als je weer afrekent naar de bovengenoemde vestiging, vergeet dan niet om $ git statusop te geven om er zeker van te zijn dat er geen ongewenste wijzigingen verschijnen.


Antwoord 11, autoriteit 3%

Dit overkwam mij op een Windows 8systeem, met Git vanaf de opdrachtprompt. De rest van mijn team gebruikt TFSen ik gebruik git-tfvan Microsoft om te pushen/trekken tussen TFS en mijn lokale Git-repository.

Het probleem deed zich voor vanwege enkele bestanden waarvan de naam alleen was gewijzigd om hun hoofdlettergebruik te wijzigen. Wat er lijkt te zijn gebeurd, was dit:

  • De bestanden zijn ingecheckt met gemengde hoofdletters in hun naam.
  • In een latere commit werden de bestandsnamen veranderd in kleine letters.
  • git-tf kreeg aanvankelijk de bestanden in hoofdletters.
  • Toen de bestanden werden hernoemd naar kleine letters, kreeg git-tf de bestanden niet omdat die bestandsnamen voor Windows 8 equivalent zijn.
  • Omdat Git hoofdlettergevoelig is, klaagde het dat ik de gemengde-case-bestanden had die niet onder bronbeheer stonden. Maar met behulp van git statuskon ik geen wijzigingen zien, omdat in de Windows-opdrachtprompt die bestandsnamen equivalent zijn.

De eenvoudigste oplossing voor mij was:

  • git checkouteen eerdere versievan het project, ruim voordat die bestanden ooit werden toegevoegd.
  • Vervolgens git checkoutde laatste versievan het project, met de juiste bestandsomhulling.

Antwoord 12, autoriteit 2%

In mijn geval lag het probleem bij de submodules. masteris samengevoegd met een andere branch die een nieuwe submodule aan het project heeft toegevoegd. De branch die ik probeerde uit te checken had het niet, daarom klaagde git over niet-getrackte bestanden en geen van de andere voorgestelde oplossingen werkte voor mij. Ik dwong de kassa naar mijn nieuwe branch, en trok master.

  • git checkout -f my_branch
  • git pull origin master
  • git submodule update --init

Antwoord 13

In mijn geval werkte git rm --cachedniet.
Maar ik kreeg het met een git rebase


Antwoord 14

Ik had ook te maken met een soortgelijk probleem en ik heb alle bovenstaande oplossingen geprobeerd, maar het werkte niet

Het probleem werd veroorzaakt toen ik mijn OnMusicUpdateListener.javahernoemdenaar OnMusicUpdateListener.javain de branche develop.

Nu had masterOnMusicUpdateListener.java
en develophadden hetzelfde bestand als OnMusicUpdateListener.java

Als ik nu overschakelde naar master, kreeg ik een foutmelding

The following untracked working tree files would be overwritten by checkout

en toen aborted.

Om dit op te lossen, heb ik krachtig checked outmasterbranch
en hernoemde vervolgens mijn OnMusicUpdateListener.javanaar OnMusicUpdateListener.java, committeden mergedhet met developbranch.

Toen heb ik mijn developbranch geüpdatet door deze mergingin masteren nu is alles weer normaal en is het probleem opgelost.


Antwoord 15

Dit kan een toestemmingsprobleem zijn,

het eigendom wijzigen,

sudo chown -v -R usr-name:group-name folder-name

Antwoord 16

Twee bestanden met dezelfde naam maar een ander geval kan het probleem zijn.

Je kunt er een van deze bestanden verwijderen of de naam ervan wijzigen. Bijv.:

Pdf.html.twig (The GOOD one)
pdf.html.twig (The one I deleted)

Antwoord 17

Bestanden verplaatsen in plaats van verwijderen

Een manier om het verwijderen van bestanden te voorkomen, is door ze te verplaatsen. Bijvoorbeeld:

cd "`git rev-parse --show-toplevel`"
git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done

Antwoord 18

dat is makkelijk op te lossen, git zegt dat je dezelfde bestanden in beide branches hebt, daarom moet je de specifieke bestanden uit de master branch verwijderen en dan zul je in staat zijn om samen te voegen:

git merge "your branch"

Ik hoop dat het voor je werkt, ik heb zojuist mijn fout opgelost.
mijn fout was:

error: The following untracked working tree files would be overwritten by merge:
        .vs/slnx.sqlite
Please move or remove them before you merge.
Aborting

Nu werkt het!
In mijn geval .vs/slnx.sqlitewerd gegenereerd door visual studio, moest ik het sluiten voordat ik het kon verwijderen.


Antwoord 19

Als je een bestand lokaal hebt hernoemd en vervolgens een pulluitvoert, wordt die foutmelding weergegeven.


Antwoord 20

In mijn geval zag ik deze fout omdat ik een populaire open source CMS gebruik en de map die problemen veroorzaakte, was de uploadmap waarnaar de CMS schrijft.

Dus wat er werd gezegd, is dat er bestanden zijn die je niet hebt, maar die je niet kunt krijgen met versiebeheer.

Ik haal alle bestanden van de live-site naar mijn lokale, dan check ik dit in de repo in de hoop dat dit het probleem oplost.


Antwoord 21

Verwijder .gitignorebestand uit appname/gen/om dit probleem op te lossen.


Antwoord 22

Ik ging gewoon naar het bestandssysteem en verwijderde het bestand direct, ging toen verder met git checkout en het werkte.

Ik heb het probleem meerdere keren gehad en het kan te maken hebben met ontwikkelaars die verwijderen, pushen, opnieuw toevoegen, pushen of iets dergelijks.


Antwoord 23

De meeste antwoorden overwegen het verwijderen of verwijderen van de bestanden, wat de makkelijkste manier is. Maar soms wilt u niet van de lokale bestanden af. Maar fuseer met een strategie, dus git heeft hier ook een oplossing voor ;

git merge --strategy=ours master 

24

Om de gewijzigde bestanden op te slaan en later de gewijzigde inhoud te gebruiken.
Ik heb deze fout gevonden terwijl ik probeer een filiaal te bekijken en wanneer ik probeer te ontmaskeren.
Probeer git stash

git stash


25

Controleer of een mapnaam ‘/’ of een speciaal symbool dan die mappen hernoemt.
Dan klem je gewoon de repository naar een andere locatie.


26

Een eenvoudige oplossing kan zijn:
Zorg ervoor dat u zich in de juiste werkdirectory bevindt in GitBash.
Die bericht komt bijna elke keer voor als een gebruiker probeert een map te voegen in zijn maphiërarchie.

Voorbeeld:

/workspace/git/myBashSourceFolder/myProjectSourcefolder

Scenario:
Gebruiker gekloonde repo in git-folderhij maakte een nieuw Java-project in Eclipse, importeerde de gekloonde repo. Eclipse heeft myProjectSourceFolder ingesteld als bronmap in zijn lokale project. daarom voerde de gebruiker het in git bash in en duwde, trok en beging zijn project vanaf daar. git synchroniseert daarom myProjectSourceFolder– maar heeft geen record in zijn geschiedenis voor myBashSourceFolder. Daarom zal een push / pull / merge van myBashSourceFolder de gegeven uitvoer produceren, als de gebruiker de volgende keer vanaf daar probeert te synchroniseren, in plaats van de map waar hij eerder aan werkte.

Oplossing:voer de juiste map in en probeer het opnieuw. In bijna elke
keer dat ik tegenkwam, werkte deze oplossing prima 🙂

Other episodes