web-dev-qa-db-fra.com

git mergetool rapporte "Aucun fichier à fusionner"

Pour une raison quelconque, dernièrement, chaque fois que j'attrape un conflit de fusion, l'exécution de git mergetool indique "Aucun fichier à fusionner":

$ git pull
First, rewinding head to replay your work on top of it...
Applying: replaced home button with Cancel
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
error: Your local changes to the following files would be overwritten by merge:
    Classes/Controllers/HomeController.m
Please, commit your changes or stash them before you can merge.
Aborting
Failed to merge in the changes.
Patch failed at 0002 moved rollback into cancel button in log watching

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

$ git mergetool
No files need merging

Si je lance git rebase --abort et que je tire à nouveau, la même chose se produit sur un conflit différent ou bien le tirage réussit sans conflit de fusion. Il n'y a pas de changement à distance entre ces tractions, ce n'est donc pas comme si le conflit avait disparu.

Voici comment cette branche et la télécommande sont configurées:

[branch "develop"]
        remote = Origin
        merge = refs/heads/develop
        rebase = true
[remote "Origin"]
        url = <my repo url>
        fetch = +refs/heads/*:refs/remotes/Origin/*
36

Il semble que mon problème concerne les horodatages de fichiers. Grâce à this SO answer suggéré par Mark Longair, le paramètre suivant l’a corrigé pour moi:

git config --global core.trustctime false
17

Solution triviale  

ce qui a fonctionné pour moi: Git crée des fichiers liés à la fusion dans le même répertoire que celui où se trouve le fichier en conflit. Pensez donc à exécuter git mergetool dans le chemin correct. 

12
IProblemFactory

Cela a résolu le problème pour moi:
git mergetool . 

J'ai trouvé ce correctif ici

9
Josh

Solution 1:

$git config --global core.trustctime false

Si false, les différences ctime entre l'index et la copie de travail sont ignorées; utile lorsque le temps de changement d'inode est régulièrement modifié par quelque chose en dehors de Git (robots d'exploration de systèmes de fichiers et certains systèmes de sauvegarde). et core.trustctime sont vrais par défaut.

Solution 2: Juste:

$git rebase --skip

C'est bon pour vous de le sauter

5
lijinma

Dans mon cas, le problème était que j'avais une autre fenêtre de console ouverte et que je l'exécutais (sur la base de create-react-app, avec rechargement à chaud) dans cette fenêtre.

Tuer le processus et fermer l'autre fenêtre, puis abandonner la création de base et réessayer a fonctionné pour moi.

0
TrueWill

Les outils de fusion sont plus efficaces pour résoudre les conflits que les actions ordinaires. Il ne peut pas être trop d'opinion. Par exemple, Beyond Compare est conscient de la syntaxe et fera beaucoup pour vous. Si vous le configurez correctement, vous pouvez simplement compiler et exécuter votre solution à des fins de test. Si tout est bon, alors juste git add -A et git rebase --continue. Ce que vous vivez est normal. Vérifiez à nouveau votre paramètre "code de sortie de trust mergetool":

git config --global mergetool.trustExitCode true

Remarque: l'option -A dans git add mettra en place toutes les modifications, y compris les suppressions et les nouveaux fichiers non suivis.

0
Adam Dymitruk