Je travaille sur un projet maven et je veux ignorer les fichiers générés et stockés dans le dossier/target du dossier racine de mon projet (Evaluation). Dans la racine de mon référentiel git, j'ai un fichier .gitignore avec les entrées suivantes (backend est juste un dossier qui contient l'évaluation du projet Eclipse)
backend/Evaluation/logs/
backend/Evaluation/target/
Pour une raison quelconque, SourceTree n'ignore pas les fichiers stockés dans ces deux dossiers. Lorsque je compile mon projet, des modifications non validées, qui sont des fichiers .class, situées dans le dossier/target.
Pourquoi cela arrive-t-il ? J'ai aussi essayé de changer les entrées .gitignore en
/ backend/Evaluation/logs/**
mais cela n'a pas fonctionné aussi.
Des idées ?
Disons que nous avons un fichier qui a été ajouté par inadvertance à notre référentiel:
stackoverflow$ echo this file is important > junkfile
stackoverflow$ git add junkfile
stackoverflow$ git ci -m 'added a file'
À un moment donné, nous réalisons que le fichier n'a pas d'importance, nous l'ajoutons donc à notre fichier .gitignore
:
stackoverflow$ echo junkfile >> .gitignore
stackoverflow$ git ci -m 'ignore junkfile' .gitignore
Plus tard, nous apportons quelques modifications à ce fichier:
stackoverflow$ sed -i 's/ is / is not/' junkfile
Et bien sûr, même si le fichier est répertorié dans .gitignore
, nous avons déjà dit à git que nous voulons le suivre, donc git status
indique:
stackoverflow$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: junkfile
#
no changes added to commit (use "git add" and/or "git commit -a")
Nous devons supprimer ce fichier du référentiel (sans le supprimer de notre arbre de travail). Nous pouvons faire cela avec le drapeau --cached
à git rm
:
stackoverflow$ git rm --cached junkfile
rm 'junkfile'
Ceci met en scène l'opération delete
...
stackoverflow$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: junkfile
#
... donc nous devons le commettre:
stackoverflow$ git commit -m 'removed junkfile from repository'
[master 19f082a] removed junkfile from repository
1 file changed, 1 deletion(-)
delete mode 100644 junkfile
Maintenant, si nous exécutons git status
, git ignorera ce fichier:
stackoverflow$ git status
# On branch master
nothing to commit, working directory clean
Même si cela reste dans notre arbre de travail:
stackoverflow$ cat junkfile
this file is not important
Parce qu'il y a le tag Sourcetree dans la question, je vais vous répondre comment faire cela avec Sourcetree , c'est vraiment simple.
Comme indiqué précédemment, vous devez d'abord supprimer le fichier du suivi, puis faire en sorte que Sourcetree ignore le fichier.
Si les fichiers ont déjà été ajoutés ou validés dans votre référentiel Git, vous devez d'abord arrêter de les suivre avant qu'ils ne soient ignorés par .gitIgnore.
Pour arrêter le suivi des fichiers dans SourceTree:
Faites un clic droit sur les fichiers. Choisissez "Stop Tracking".
(ceci ne supprimera pas vos fichiers, il arrêtera simplement de les suivre)
Pour arrêter le suivi des fichiers depuis la ligne de commande:
git rm --cached example.txt
J'ai eu un problème avec le dossier bin suivi (dossier entier).
Voici donc les étapes rapides (plus visuelles, car je suis plutôt du type visuel):
J'espère que ça aidera quelqu'un.
En plus des réponses déjà fournies ci-dessus, notez également que le fichier .gitignore
ne fonctionnera pas s'il ne se trouve pas dans le dossier racine.
J'ai eu un projet où .gitignore
était ici /projectname/.gitignore
et donc n'était pas lu. Alors je l'ai déplacé à /.gitignore
et tout allait bien à nouveau.
J'ai constaté qu'en supprimant le référentiel, puis en ayant le fichier .gitignore dans le dossier lorsque le référentiel est recréé, le fichier ignore est respecté.
Cela a fonctionné pour moi:
git update-index --assume-unchanged some.file
J'ai eu des difficultés avec cela pendant quelques heures, j'ai essayé un certain nombre de choses, y compris les suggestions ici - en vain ... ce qui a finalement fonctionné pour moi a été de créer le fichier .gitignore lors de la configuration du référentiel. dans bitbucket.org , a extrait ce fichier chez moi, a collé le contenu exact du fichier que je tentais de créer moi-même, et tout fonctionne enfin maintenant.