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
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.
Utilisateurcore.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 à mettregit config core.filemode false
, suivi d'ungit reset --hard HEAD
(assurez-vous que vous n'avez pas de changements non engagés, sinon ils seraient perdus).
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...
ici, vous devez essayer avec la branche que vous avez diff avec.
git diff 13.1_dev sale_edit > patch.diff yourBranch()
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