git créer un patch avec diff

j'ai essayé de faire

git diff 13.1_dev sale_edit > patch.diff

Puis j'ai essayé de faire git apply patch.diff dans une autre branche, mais j'ai patch ne s'applique pas. Comment puis-je créer des fichiers de correctifs à partir de diffs que je peux utiliser avec git appliquer?

les Erreurs reçues:

$ git apply --ignore-space-change --ignore-whitespace diff.diff 
diff.diff:9: trailing whitespace.

diff.diff:10: trailing whitespace.
    function set_change_sale_date() 
diff.diff:12: space before tab in indent.
      $this->sale_lib->set_change_sale_date($this->input->post('change_sale_date'));
diff.diff:14: trailing whitespace.

diff.diff:15: trailing whitespace.
    function set_change_sale_date_enable() 
warning: application/controllers/sales.php has type 100755, expected 100644
error: patch failed: application/controllers/sales.php:520
error: application/controllers/sales.php: patch does not apply
warning: application/language/english/sales_lang.php has type 100755, expected 100644
error: patch failed: application/language/english/sales_lang.php:134
error: application/language/english/sales_lang.php: patch does not apply
warning: application/libraries/Sale_lib.php has type 100755, expected 100644
error: patch failed: application/models/sale.php:170
error: application/models/sale.php: patch does not apply
warning: application/views/sales/register.php has type 100755, expected 100644
error: patch failed: application/views/sales/register.php:361
error: application/views/sales/register.php: patch does not apply

je suis en train d'essayer cela sur Mac

34
demandé sur 7ochem 2013-04-14 02:58:30

4 réponses

a:

git apply --ignore-space-change --ignore-whitespace patch.diff

Comme indiqué dans "git: patch ne s'applique pas", cela peut être causé par:

  • les fins de ligne différant entre le système de fichiers local et le repo distant.

    Utilisateur core.eol.gitattributes le fichier est une bonne approche (voir "git force d'encodage de fichier sur commit")
  • le bit d'exécution ('x').

    Cela peut vous conduire à mettre git config core.filemode false, suivi d'un git reset --hard HEAD (assurez-vous que vous n'avez pas de changements non engagés, sinon ils seraient perdus).
21
répondu VonC 2017-05-23 11:54:25

vous pouvez appliquer le patch comme une fusion à trois:

git diff 13.1_dev sale_edit > patch.diff
git apply -3 patch.diff

il devrait soulever le conflit de sorte que vous pouvez résoudre manuellement. Ou vous pouvez aller avec un un-liner, piping le patch à git-appliquer directement:

git diff 13.1_dev sale_edit | git apply -3

Pour inverser le patch:

git diff 13.1_dev sale_edit | git apply -3 -R

(note: c'est la même chose que les commandes ci-dessus, sans le processus en deux étapes de création du fichier patch)

git help apply

-3, --3way           
When the patch does not apply cleanly, fall back on 3-way merge if 
the patch records the identity of blobs it is supposed to apply to, 
and we have those blobs available locally, possibly leaving 
the conflict markers in the files in the working tree for the user 
to resolve...
13
répondu Jeff Kiiza 2015-03-07 12:45:04

ici, vous devez essayer avec la branche que vous avez diff avec.

git diff 13.1_dev sale_edit > patch.diff yourBranch()
1
répondu BRjava 2013-08-08 13:38:49

avec la version 1.9.1 de git, je vois des problèmes similaires lorsque j'utilise ' git apply 'pour appliquer le patch créé en utilisant'git diff'.

il semble que 1.9.1 git ait du mal à gérer le mélange d'espaces et d'onglets dans le fichier patch.

warning: squelched 1 whitespace error warning: 6 lines add whitespace errors.

la solution La plus simple est d'utiliser simplement le ' patch' commande qui applique avec succès toutes les modifications sortie 'git diff' vers le répertoire git cible.

$ patch --version GNU patch 2.7.1

1
répondu Tzunghsing David Wong 2018-01-08 22:23:21