Existe-t-il un moyen d'obtenir un patch créé avec git format-patch pour qu'il soit compatible svn afin que je puisse le soumettre à un dépôt svn?
Je travaille sur un repo svn sur github et je souhaite soumettre mes modifications au repo principal. J'ai besoin de créer un correctif pour ce faire, mais le correctif ne peut pas être appliqué car les formats git qui corrigent différemment de svn. Y a-t-il un secret que je n'ai pas encore découvert?
MISE À JOUR: Bien qu'il n'existe actuellement aucun script ou moyen git natif de le faire, j'ai réussi à trouver un article plus tôt cette année sur la façon de le faire manuellement. J'ai suivi les instructions et j'ai réussi à faire fonctionner mes correctifs git avec svn.
Si quelqu'un pouvait essayer d'écrire un script pour accomplir cela et contribuer au projet git, je serais tout le monde apprécié.
http://kerneltrap.org/mailarchive/git/2008/1/15/570308/thread#mid-570308
la source
Réponses:
Je dois toujours chercher sur Google, mais la façon dont j'ai trouvé que cela fonctionne parfaitement (pour moi) est:
git diff --no-prefix master..branch > somefile.diff
, les parties master et branch sont facultatives, cela dépend de la façon dont vous souhaitez obtenir vos différences.patch -p0 < somefile.diff
.Cela semble toujours bien fonctionner pour moi et semble être la méthode la plus simple que j'ai rencontrée.
la source
--no-pager
n'est plus une option pourgit diff
.--no-pager
, je ne sais pas pourquoi il a été ajouté dans l'édition. Cela a toujours bien fonctionné pour moi sans de--no-pager
toute façon.git diff --no-prefix 056a1ba5140 7d939289b80 >my.patch
fonctionné pour moi (où056a1ba5140
et7d939289b80
sont le sha-1 du commit précédent et particulier dans git).La réponse courte est
patch -p1 -i {patch.file}
.Veuillez consulter ce blog pour plus de détails: Créer des correctifs Subversion avec git .
la source
Voici un script d'aide pour faire une différence avec le dernier ensemble de modifications svn et le commit donné: http://www.mail-archive.com/[email protected]/msg00864.html
la source
git svn info
place comme ceci:REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'`
SVN ne peut probablement pas comprendre la sortie de
git diff -p
, mais vous pouvez recourir à la force brute:diff -r
sur les deux clones.la source
git diff --no-prefix > somefile.diff
votre dépôt git et envoyez-le à n'importe quel utilisateur svn pour qu'il applique le correctifpatch -p0 < somefile.diff
à la racine du projet.Subversion <1.6 ne prend pas en charge les correctifs. Il semble que Subversion 1.7 autorise l'application de correctifs et que les extensions git / hg aux différences unifiées figurent sur notre liste TODO.
la source
C'est en effet une demande de fonctionnalité début 2008
Linus Torvalds a déclaré à l'époque:
C'est peut-être pourquoi
a été introduit dans Git1.5.6 en mai / juillet 2008 (je ne l'ai pas testé cependant)
la source
Assurez-vous que vos modifications sont validées et rebasées au-dessus de votre branche git locale, à partir de git bash run:
git show --pretty >> myChangesFile.patch
la source
La réponse acceptée fournie par Nicholas fonctionne bien, sauf quand a) des fichiers binaires existent dans le diff ou b) vous travaillez dans Windows Git et avez des répertoires avec des espaces. Pour résoudre ce problème, j'ai dû ajouter une commande git diff imbriquée pour ignorer les binaires et une commande sed pour échapper aux espaces. C'est un peu lourd à écrire, j'ai donc créé un alias:
Si vous tapez ensuite:
... un fichier de correctif Feature123.patch sera créé avec les différences entre la base de fusion du maître de branche et de la branche Feature123.
la source