4
votes

Comment sélectionner le fichier REMOTE entier pendant mergetool?

J'utilise CLI mergetool vimdiff et plutôt que d'aller ligne par ligne et de taper : diffg RE pour chaque changement pour sélectionner la version REMOTE, existe-t-il un moyen peut simplement avoir la version REMOTE du fichier entier comme fusion cible?


4 commentaires

Cherchez-vous :% diffget ?


C'est la réponse que je cherchais, merci.


Voir ma réponse ci-dessous pour un peu plus de détails.


Git vous permet de spécifier des stratégies de fusion (les nôtres, les leurs) mais celles-ci affectent l'ensemble de la fusion. Faites attention


3 Réponses :


2
votes

(alternative CLI)

Je sais que cela ne répond pas vraiment à votre question tel quel, mais si vous avez besoin de tout prendre d'un côté pour un fichier en conflit dans une fusion , vous n'avez même pas besoin d'un outil.

Vous pouvez vérifier la version de fichier que vous voulez (consultez la doc ici et ) puis ajoutez pour résoudre le conflit:

git checkout -m path/to/file

Notez que vous pouvez également , si vous regrettez ce déplacement, ramenez-le à l'état non fusionné avec des marqueurs de conflit, avec

git checkout --ours path/to/file
# or
git checkout --theirs path/to/file

# and then to conclude the resolution
git add path/to/file


0 commentaires

3
votes

Réponse courte:

Utilisez :% diffget pour obtenir tous les morceaux.


Explication:

diffget code> prend - comme la plupart des commandes vim - une plage. Pour citer vimhelp:

                                                        :diffg :diffget
:[range]diffg[et] [bufspec]
                Modify the current buffer to undo difference with another
                buffer.  [...]
                See below for [range].

[...]

When no [range] is given, the diff at the cursor position or just above it is
affected.  When [range] is used, Vim tries to only put or get the specified
lines.

% est remplacé par le nom du fichier actuel (voir : help c_% ). Lorsqu'il est donné sous forme de plage, cela signifie utiliser toutes les lignes.


0 commentaires

1
votes

Dans mergetool, si vous avez plus de 2 tampons, vous ne pouvez pas utiliser : diffget , car Vim ne sait pas à partir de quel fichier obtenir la différence.

Cependant, lorsque vous résoudre un conflit (vous devez avoir mergetool en cours d'exécution), vous avez quelques fichiers créés par Git pour gérer le conflit:

Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
  (use "git add <file>..." to mark resolution)

    both modified:   my/conflicting/file.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .env
    my/conflicting/file.py.orig
    my/conflicting/file_BACKUP_5038.py
    my/conflicting/file_BASE_5038.py
    my/conflicting/file_LOCAL_5038.py
    my/conflicting/file_REMOTE_5038.py

Ils représentent différents côtés du conflit:

  • BACKUP est une copie du fichier avec les marqueurs de conflits,
  • LOCAL est votre état actuel avant le conflit,
  • BASE contient l'état du fichier au niveau du commit ancêtre commun entre votre local et celui en cours de fusion (ou appliqué en cas de rebase, cherry-pick ou stash pop / apply),
  • REMOTE est le commit qui tente d'être appliqué

Donc, ce que vous pouvez faire est de copier le fichier _REMOTE_ comme votre actuel ( chemin cp / vers / fichier_REMOTE_ * chemin / vers / fichier ), ou dans mergetool, copiez le contenu de _REMOTE_ (:% y ) et remplacez le contenu de votre fichier par celui-ci ( ggVGp , allez à la haut, allez en mode ligne visuelle, allez à la fin, collez).


0 commentaires