Question Les fichiers d'arborescence de travail non suivis suivants seraient remplacés par la commande


J'ai donc ajouté un dossier à mon fichier .gitignore.

Une fois que je fais un git status ça me dit

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

Cependant, lorsque j'essaie de changer de branche, je reçois ce qui suit:

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

Voici à quoi ressemble mon fichier .gitignore:

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

Comment puis-je faire en sorte que je puisse changer de branche sans supprimer ces fichiers?

Si je fais un changement, cela affectera-t-il ces fichiers? En d'autres termes, si je revenais à cette branche par la suite tout serait parfait jusqu'à mon dernier commit?

Je ne veux pas perdre ces fichiers, je ne veux pas les suivre.


663
2018-02-01 01:39


origine


Réponses:


Il semble que vous souhaitiez que les fichiers soient ignorés, mais ils ont déjà été validés. .gitignore n'a aucun effet sur les fichiers qui sont déjà dans le repo, ils doivent donc être supprimés avec git rm --cached. le --cached l'empêchera d'avoir un effet sur votre copie de travail et il sera simplement marqué comme enlevé la prochaine fois que vous commettez. Une fois les fichiers supprimés du référentiel, le .gitignore empêche leur ajout à nouveau.

Mais vous avez un autre problème avec votre .gitignore, vous utilisez excessivement les caractères génériques et l'amenant à correspondre moins que prévu. Au lieu de cela, changeons le .gitignore et essayons ceci.

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

219
2018-02-01 01:59



AVERTISSEMENT: il va supprimer les fichiers non suivis, donc ce n'est pas une bonne réponse à la question posée.

J'ai aussi frappé ce message. Dans mon cas, je ne voulais pas conserver les fichiers, alors cela a fonctionné pour moi:

git 2.11 et plus récent

git clean  -d  -fx .

git plus âgé

git clean  -d  -fx ""

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

  • -x signifie que les fichiers ignorés sont également supprimés ainsi que les fichiers inconnus de git.

  • -d signifie supprimer les répertoires non suivis en plus des fichiers non suivis.

  • -f est nécessaire pour le forcer à fonctionner.


814
2017-12-02 20:38



Attention: Ceci supprimera les fichiers locaux qui ne sont pas indexés

Il suffit de le forcer: git checkout -f another-branch


471
2018-01-11 17:40



Si vous utilisez OS X, c'est peut-être parce que certains noms de fichiers ont changé de nom. Essayez de définir l'option de configuration suivante:

git config core.ignorecase true

109
2018-05-30 17:54



Git vous dit qu'il veut créer des fichiers (nommés public/system/images/9/... etc), mais vous avez déjà des fichiers existants dans ce répertoire ne sont pas suivi par Git. Peut-être quelqu'un d'autre a-t-il ajouté ces fichiers au dépôt Git, et c'est la première fois que vous avez changé de branche?

Il y a probablement une raison pour laquelle ces fichiers dans votre develop branche mais pas dans votre branche actuelle. Vous devrez peut-être demander à vos collaborateurs pourquoi c'est le cas.

Comment puis-je faire fonctionner cela afin que je puisse changer de branche sans supprimer ces fichiers?

Vous ne pouvez pas le faire sans faire disparaître les fichiers en quelque sorte. Vous pouvez renommer public à my_public ou quelque chose pour le moment.

si je revenais à cette branche après tout serait parfait comme jusqu'à mon dernier commit?

Si vous validez vos modifications, Git ne les perdra pas. Si vous ne commettez pas vos changements, alors Git essaiera vraiment ne pas pour écraser le travail que vous avez fait. C'est ce que Git vous avertit en premier lieu (lorsque vous avez essayé de changer de branche).


40
2018-02-01 01:47



Il y a une commande pour cette tâche délicate (suppression permanente des fichiers non suivis)

git clean -i

alors git pull ça ira.


21
2017-09-21 08:37



Malheureusement ni git rm --cached ou git clean -d -fx "" l'a fait pour moi.

Ma solution a fini par pousser ma branche vers la télécommande, clonant un nouveau repo, puis faisant ma fusion dans le nouveau repo. Les autres personnes accédant au dépôt devaient faire de même.

Morale de l'histoire: utiliser un .gitignore fichier depuis le début.


11
2018-01-09 05:33