2017-10-17 7 views
4

Lors de l'exécution d'un git fetch ou get pull, il peut y avoir un conflit. Existe-t-il un moyen d'obtenir des copies de tous les fichiers en conflit? Par exemple le fichier foo.dat est en conflit, alors je voudrais avoir des copies foo.dat.ours et foo.dat.theirs. Je pense que SVN a un comportement similaire.git: Comment obtenir des copies de fichiers en conflit?

  1. Obtenez les noms de fichiers en conflit git diff --name-only --diff-filter=U
  2. Foreach faire une copie avec .ours Postfix (xargs cp)
  3. Obtenir leur copie?

Répondre

3

De l'Git SCM book, sous la rubrique « Re-fusion du fichier du manuel » nous voyons:

Git stocke toutes ces versions dans l'index sous « étapes » qui ont chacun des numéros qui leur sont associés. L'étape 1 est l'ancêtre commun, l'étape 2 est votre version et l'étape 3 vient du MERGE_HEAD, la version que vous fusionnez ("les leurs").

De là, voici une approche de script bash approximative:

for file in $(git diff --name-only --diff-filter=U); do 
    git show ":1:${file}" > "${file}".common 
    git show ":2:${file}" > "${file}".ours 
    git show ":3:${file}" > "${file}".theirs 
done