web-dev-qa-db-fra.com

TFS/GIT dans VS ne peut pas basculer en maître car il y a des modifications non validées

J'ai configuré un référentiel GIT pour une solution VS 2013 sur visualstudio.com. Le référentiel a bien fonctionné alors que je m'habituais à utiliser TFS (en mode GIT).

Ensuite, j'ai décidé de me familiariser avec Branches. J'ai donc créé une branche à partir du maître. J'ai fait pas mal de changements dans cette branche. J'ai validé les modifications au fil du temps et effectué une synchronisation pour envoyer mes commits locaux au référentiel visualstudio.com. Tout cela fonctionne.

Le problème que j’ai, c’est que j’ai perdu d’une certaine manière la possibilité de revenir à la branche principale. Je ne peux pas fusionner ma branche nouvellement créée dans le maître. Chaque fois que j'essaie de faire quelque chose qui implique le maître, l'erreur suivante apparaît dans VS:

Impossible de passer en mode maître car il y a des modifications non validées. Validez ou annulez vos modifications avant de changer de branche. Voir la fenêtre de sortie pour plus de détails.

La fenêtre de sortie ne contient jamais de 'détails' ...

À quelles "modifications non validées" ce message fait-il référence? Puisque je ne peux pas entrer dans la branche principale, je n'ai aucun moyen de valider ses modifications (et je ne suis pas sûr de le vouloir?) Et la branche actuelle (seule autre) dans laquelle je me trouve a été validée et synchronisée.

Je suis vraiment juste en train d'apprendre TFS, GIT et le contrôle de source. Comment puis-je récupérer en toute sécurité de ce problème?

31
rwkiii

Ok, j’ai eu le même problème que rwkiii - c’est un bogue dans Visual studio et ce n’est pas un problème facile à résoudre. Voici les symptômes:

Visual Studio indique que vous ne pouvez pas fusionner/changer de braches/etc. parce que vous avez des modifications non validées - ce qui est correct, sauf que toutes vos modifications ont été validées.

Impossible de passer en mode maître car il y a des modifications non validées. Validez ou annulez vos modifications avant de changer de branche. Voir la fenêtre de sortie pour plus de détails.

Voici une capture d'écran pour être plus clair.

Si vous regardez la fenêtre de sortie, elle peut sembler vide, mais vous devez changer "Afficher la sortie de" en "Contrôle de la source - Git". Ceci listera le fichier que Visual Studio pense que a été modifié.

Make sure "Source Control - Git" is selected

Maintenant, les choses que j’ai essayées que (pas} _ le répare (pour que vous n’ayez pas à le faire):

  • Redémarrage de Visual Studio
  • Redémarrer la machine
  • Projets de commutation
  • Utiliser des outils git externes (qui ont tous indiqué "aucun changement")
  • git reset
  • Apporter des modifications arbitraires au fichier et le valider. Commits ok, VS pense toujours qu'il y a plus de changements

Finalement, je devais aller et supprimer le fichier à partir du disque, puis "annuler" les modifications apportées depuis la fenêtre de Team Explorer:

Click "undo" to restore the file and your ability to switch branches

Ce n’est pas la solution idéale, mais cela semble régler le problème.

47
Kushan

J'ai utilisé l'invite de commande git pour résoudre le problème. Je ne peux pas garantir que ce soit le meilleur ou le seul moyen, mais cela a fonctionné pour moi dans Visual Studio 2013.

Sous Modifications dans Team Explorer, choisissez Ouvrez l'invite de commande .

Dans l'invite de commande, tapez: 

statut git

Il listera les fichiers ouverts au changement.

Copiez ces fichiers (au cas où), vous pourrez alors ignorer les modifications du répertoire de travail dans la commande Invite. 

git checkout - mysubdir\myfile.ext

N'essayez pas de changer de branche dans Visual Studio, cela ne fonctionnera toujours pas!

À la place, à l'invite de commande, basculez vers la branche en question.

nom de branche git checkout

Lorsque vous revenez à Visual Studio, il vous sera demandé de recharger le projet. Après cela, la branche sera mise à jour correctement sur la branche que vous avez choisie à partir de la ligne de commande.

hth

28
Baron

J'ai résolu un problème similaire sans avoir à supprimer un fichier ou à apporter de nouvelles modifications.

Après la validation des modifications sur BranchA, la fusion avec Master et l'application via Git bash, la prochaine fois que j'ouvrais le projet dans VS et que j'examinais Team Explorer, il apparaissait qu'il y avait des modifications sur la branche Master. Aucune modification n’est apparue lors de la vérification du statut via Git bash, mais 10 fichiers étaient répertoriés dans VS Output. Les différences sur tous les fichiers n'ont montré aucun changement. J'ai essayé une modification de validation à ce stade, mais cela ne me permettait pas de modifier la validation précédente (voir plus d'informations à ce sujet ci-dessous, car cela résoudra finalement mon problème).

J'ai essayé de passer à BranchA dans VS et j'ai reçu le message que je ne peux pas changer en raison de modifications non validées. Basculez vers BranchA via Git bash et l’état n’affiche aucun changement. Rafraîchissez VS Team Explorer pour qu'il soit maintenant sur BranchA, affiche 14 modifications de fichiers, voire plus que le fichier maître, mais encore une fois, les différences sur tous les fichiers ne montrent aucune modification.

Alors que j'étais sur BranchA dans Team Explorer, j'ai cliqué sur Actions-> Modifier l’engagement précédent. Cette fois, cela a été laissé et tous les changements ont été effacés. Il a ensuite montré une validation en attente, mais la vérification de l'état de Git bash n'a révélé aucune attente, aussi, si vous revenez à l'accueil dans Team Explorer et revenez, effacez le message de validation en attente.

Basculé en maître dans Team Explorer, aucune autre modification ne s'affiche. Tout est bien.

3
javovo

Les modifications non validées signifient que vous avez modifié un ou plusieurs fichiers qui ont déjà été ajoutés à git et que ces modifications n'ont pas été "enregistrées" dans une validation ou dans votre réserve git.

Lorsque vous passez d'une branche à une autre, les modifications non validées ne sont pas autorisées (les nouveaux fichiers qui n'ont pas été ajoutés à git conviennent toutefois), car des modifications dans d'autres branches pourraient écraser vos modifications non validées.

Je ne connais pas bien l'intégration de Visual Studio à git puisque j'utilise moi-même PoshGit avec Powershell.

La façon de procéder est de:

  • Annuler vos modifications
  • Commettez vos modifications
  • Ou stockez vos modifications (voir la section sur le flux de travail interrompu).
2
Asser

Salut cela a fait le tour pour moi ...

Essayez d’utiliser la commande Invite Team Explorer> Validation non synchronisée> Actions> Ouvrir une invite de commande.

Faites un git checkout branchName

2
Jen

J'ai remarqué à quelques reprises que les éléments sln sont marqués comme modifiés, mais n'apparaissent pas de cette façon dans l'Explorateur de solutions. Ce que j'ai fait comme d'autres l'ont suggéré est dans l'invite de commande, 

git status (this should show you culprit files)

ajoutez ensuite les fichiers individuels. Ou ce que je fais personnellement, c'est courir:

git add -A 

qui ajoutera tous les fichiers modifiés à afficher correctement dans Team Explorer, où vous pourrez annuler/supprimer à votre guise. Je n'ai pas eu de problème avec cette approche. 

1
WiseGuy

Nous rencontrons régulièrement ce problème, car nous avons un fichier particulier qui doit toujours être exclu des modifications, mais parfois modifié.

Ce qui fonctionne pour nous lorsque le message d'erreur apparaît est:

  1. Dans VS, dans la fenêtre Output , voyez quel fichier est à l’origine du problème.
  2. Dans Git bash, lancez git update-index --no-assume-unchanged TheNameOfTheFileCausingTheIssue
  3. Dans VS Annuler l'extraction sur ce fichier
  4. En VS, changez de branche dans Gérer les branches .

Cela peut ou ne peut pas fonctionner pour votre situation, mais je l'ai ajouté au cas où cela mettrait quelqu'un dans la bonne direction. Assurez-vous de bien comprendre la commande git avant de l'exécuter!

1
Dib

Une chose qui a fonctionné pour moi est: -
1) Faites un clic droit sur la branche que vous souhaitez commander.
2) Cliquez sur l'option Réinitialiser.
3) Cliquez sur Supprimer les modifications (--hard)
4) Faites un clic droit sur la branche et sélectionnez Valider

0
RAX

J'ai eu ce problème après avoir modifié un nom de fichier en commençant par une lettre minuscule en une lettre majuscule après avoir déjà validé le fichier. Je l'ai corrigé en changeant le nom du fichier (je viens d'ajouter un «1» à la fin) puis en validant cette modification. J'ai ensuite pu changer de branche.

Comme mentionné ci-dessus, je devais changer le combo "Afficher la sortie de:" en "Contrôle de code source - Git" dans la fenêtre de sortie afin de voir le nom du fichier incriminé, cela m'a ensuite montré que le nom de fichier VS/git était expectant n'était pas en majuscule, alors que le nom dans l'explorateur de solution/sur le système de fichiers était en majuscule.

0
tomRedox

J'ai finalement résolu mon problème en supprimant mon référentiel dans l'Explorateur de fichiers, puis dans Visual Studio en sélectionnant "Annuler toutes les modifications" lorsque les suppressions étaient enregistrées pour être validées. Lors de la restauration du référentiel, Visual Studio a fonctionné comme prévu en tandem avec git.

0
TheFastCat

Le problème est que, parfois, les chemins d'accès après extraction vers certains fichiers ne correspondent pas à leur équivalent dans la base de données du référentiel, car la comparaison est sensible à la casse.

Par exemple, vous pouvez avoir "MyLibrary\ABC\Folder\MyFile.cs" dans le référentiel mais "MyLibrary\Abc\Folder\MyFile.cs" sur le disque. Aucun changement ne sera détecté dans "état git" mais Visual Studio bloquera le changement de branche.

Dans ce cas, le fait de supprimer uniquement MyFile.cs du disque ne résoudra pas le problème - vous devrez supprimer le répertoire ABC, puis annuler les modifications pour Visual Studio afin de recréer la structure de dossiers avec les noms corrects.

0
Michael Logutov

1: Ouvrez git bash

2: pointez sur votre dépôt git

3: vérifiez le statut de votre branche en utilisant la commande "git status"

si vous avez des possibilités d'utilisation de vos modifications pour une autre succursale, utilisez "git stash save", (ceci sauvegardera vos modifications localement, vous pouvez faire face à une erreur de conflit, vous pouvez ignorer pour le moment) si vous voyez un fichier non fusionné dans le résultat du statut git et que vous voulez conserver les modifications, utilisez "git add <file path>"

4: une fois vos modifications locales enregistrées, utilisez la commande "git reset --merge"

cela réinitialisera votre agence locale à la caisse d'origine. Vous êtes maintenant prêt à changer vous pouvez voir les fichiers de conflit dans Visual Studio Team Explorer> changes , Si vous ne souhaitez pas conserver les modifications de fichier, cliquez avec le bouton droit de la souris et sélectionnez Annuler les modifications ou utilisez "git add <file path >" pour ajouter ce fichier avec d'autres fichiers sauvegardés.

5: Votre branche git est maintenant prête pour le basculement, tapez "git checkout <branch path>"

6: pour afficher les modifications enregistrées, utilisez "git stash pop", cela fusionnera les modifications enregistrées dans votre branche actuelle.

0
Satendra Jindal