Si vous voulez être sûr que le patch (commit unique) sera appliqué au dessus d'un commit spécifique, vous pouvez utiliser la nouvelle option git 2.9 (juin 2016) git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
Voir commit bb52995 , commit 3de6651 , commit fa2ab86 , commit ded2c09 (26 avril 2016) par Xiaolong Ye (``) .
(Fusionné par Junio C Hamano - gitster
- en commit 72ce3ff , 23 mai 2016)
format-patch
: ajouter l' --base
option ' ' pour enregistrer les informations de l'arborescence de base
Les responsables de maintenance ou les testeurs tiers peuvent vouloir connaître l'arborescence de base exacte à laquelle s'applique la série de correctifs. Apprenez à git format-patch a '--base
option ' pour enregistrer les informations de l'arborescence de base et ajoutez-les à la fin du premier message (soit la lettre de motivation, soit le premier patch de la série).
L'information de l'arborescence de base se compose de la «validation de base», qui est une validation bien connue qui fait partie de la partie stable de l'historique du projet, sur laquelle tout le monde travaille, et de zéro ou plusieurs «correctifs prérequis», qui sont bien connus les correctifs en vol qui ne font pas encore partie de la «validation de base» qui doivent être appliqués au-dessus de la «validation de base» dans l'ordre topologique avant que les correctifs puissent être appliqués.
Le "commit de base" est représenté par " base-commit:
" suivi du 40-hex du nom de l'objet commit.
Un "patch prérequis" est indiqué par " prerequisite-patch-id:
" suivi du "patch id" de 40 hex, qui peut être obtenu en passant le patch via la git patch-id --stable
commande " ".
Git 2.23 (Q3 2019) améliorera cela, car " --base
" l'option de " format-patch
" a calculé les patch-ids
correctifs prérequis pour de manière instable, qui a été mis à jour pour calculer d'une manière compatible avec " git patch-id --stable
".
Voir commit a8f6855 , commit 6f93d26 (26 avril 2019) par Stephen Boyd ( akshayka
) .
(Fusionné par Junio C Hamano - gitster
- dans commit 8202d12 , 13 juin 2019)
format-patch
: rendre la --base patch-id
sortie stable
Nous ne vidions pas le contexte à chaque fois que nous traitions un morceau dans le
patch-id
code de génération diff.c
, mais nous le faisions lorsque nous générions des identifiants de correctifs "stables" avec l' patch-id
outil ' '.
Port de laisser cette même logique au- dessus de patch-id.c
en diff.c
sorte que nous pouvons obtenir le même hachage quand nous générons patch pour ids « format-patch --base=
» types d'invocations de commande.
Avant Git 2.24 (Q4 2019), " git format-patch -o <outdir>
" faisait l'équivalent de " mkdir <outdir>
" pas " mkdir -p <outdir>
", qui est en cours de correction.
Voir commit edefc31 (11 octobre 2019) par Bert Wesarg ( bertwesarg
) .
(Fusionné par Junio C Hamano - gitster
- en commit f1afbb0 , 18 oct.2019 )
format-patch
: créer les principaux composants du répertoire de sortie
Signé par: Bert Wesarg
'git format-patch -o' a fait un équivalent de 'mkdir' et non de 'mkdir -p', qui est en cours de correction.
Évitez l'utilisation de " adjust_shared_perm
" sur les principaux répertoires, ce qui peut avoir des conséquences sur la sécurité. Atteint en désactivant temporairement les ' config.sharedRepository
' comme ' git init
'.
Avec Git 2.25 (T1 2020), " git rebase
" ne fonctionnait pas bien lorsque la format.useAutoBase
variable de configuration est définie, ce qui a été corrigé.
Voir commit cae0bc0 , commit 945dc55 , commit 700e006 , commit a749d01 , commit 0c47e06 (04 décembre 2019) par Denton Liu ( Denton-L
) .
(Fusionné par Junio C Hamano - gitster
- en commit 71a7de7 , 16 )
rebase
: réparer la format.useAutoBase
rupture
Rapporté par: Christian Biesinger
Signé par: Denton Liu
Avec format.useAutoBase = true
, l'exécution de rebase a entraîné une erreur:
fatal: failed to get upstream, if you want to record base commit automatically,
please use git branch --set-upstream-to to track a remote branch.
Or you could specify base commit by --base=<base-commit-id> manually
error:
git encountered an error while preparing the patches to replay
these revisions:
ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12
As a result, git cannot rebase them.
Corrigez cela en passant toujours --no-base
au format-patch de rebase afin que l'effet de format.useAutoBase
soit annulé.
git apply --stat file.patch
# afficher les statistiques.git apply --check file.patch
# vérifier l'erreur avant de postuler.git am < file.patch
# appliquer enfin le patch.