web-dev-qa-db-fra.com

Le fichier .gitignore dans Sourcetree ne fonctionne pas

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 ?

61
SteveSt

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
95
larsks

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.

  1. Modifiez quelque chose dans le fichier pour qu'il soit affiché ou sélectionnez-le dans l'onglet "État du fichier" en bas du référentiel ouvert.
  2. Faites un clic droit sur le fichier et vous verrez "Ignorer ...", mais il est grisé car, comme indiqué ci-dessus, il est déjà en piste.
  3. Faites un clic droit sur le fichier et choisissez "Arrêter le suivi"
  4. Le fichier sera affiché avec un bouton rouge qui indique qu'il sera supprimé (du suivi)
  5. Une nouvelle entrée du même fichier sera affichée dans "statut du fichier" avec un point d'interrogation bleu indique un nouveau fichier (nouveau parce que vous avez dit supprimer du suivi dans 4)
  6. Faites un clic droit sur le fichier de 5 et maintenant vous voyez le "Ignorer ..." est capable de choisir. Cliquez dessus et Sourcetree mettra une nouvelle entrée pour le fichier dans le fichier .gitignore
  7. Vous pouvez voir le fichier .gitignore si vous cliquez sur "Paramètres" en haut à droite, choisissez "avancé" puis la première entrée concerne le fichier ignorer, cliquez sur "éditer" et il sera ouvert.
122
michaK

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
11
tfmontague

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):

  1. Juste pour des raisons de sécurité, j'ai compressé tout le dossier bin
  2. Déplacez-le sur le bureau 
  3. Déplacer également le fichier (actuel) .gitignore vers le bureau
  4. Supprimer tout le dossier BIN
  5. Valider les modifications (via l'outil Git commit préféré)
  6. Commit, Push, c'est fait!
  7. Revenir au dossier du projet de base
  8. Reculer le fichier .gitignore
  9. Facultatif - Reculez (décompressez) également le dossier bin.
  10. En conséquence, vous verrez que l'outil git ne suit plus les modifications du dossier bin.

J'espère que ça aidera quelqu'un.

11
Hrvoje

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.

2
Ibrahim Dauda

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é. 

0
SingleStepper

Cela a fonctionné pour moi:

git update-index --assume-unchanged some.file
0
Michael

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.

0
ByteMyPixel