سؤال

هل هناك أي طريقة للحصول على تصحيح تم إنشاؤه باستخدام git format-patch ليكون متوافقًا مع svn حتى أتمكن من إرساله إلى svn repo؟

أنا أعمل على svn repo على github وأريد إرسال تغييراتي مرة أخرى إلى الريبو الرئيسي.أحتاج إلى إنشاء تصحيح للقيام بذلك، ولكن لا يمكن تطبيق التصحيح نظرًا لأن تنسيقات git يتم تصحيحها بشكل مختلف عن svn.هل هناك سر لم أكتشفه بعد؟

تحديث: على الرغم من عدم وجود برنامج نصي أو طريقة git أصلية للقيام بذلك حاليًا، إلا أنني تمكنت من العثور على منشور في وقت سابق من هذا العام حول كيفية إنجاز ذلك يدويًا.لقد اتبعت التعليمات ونجحت في جعل تصحيحات git الخاصة بي تعمل مع svn.

إذا كان بإمكان أي شخص أن يحاول كتابة نص لإنجاز هذا والمساهمة في مشروع git، سأكون موضع تقدير كبير للجميع.

http://kerneltrap.org/mailarchive/git/2008/1/15/570308/thread#mid-570308

هل كانت مفيدة؟

المحلول

يتعين علي دائمًا البحث عن هذا في Google ولكن الطريقة التي وجدتها تعمل بشكل مثالي (بالنسبة لي) هي:

  • قم بإنشاء التصحيح باستخدام git diff --no-prefix master..branch > somefile.diff, ، الجزء الرئيسي والفرع اختياريان، ويعتمدان على الطريقة التي تريد بها الحصول على الفروق.
  • أرسله أينما وتقدم بطلبك patch -p0 < somefile.diff.

يبدو دائمًا أنه يعمل بشكل جيد بالنسبة لي ويبدو أنه أبسط طريقة صادفتها.

نصائح أخرى

الجواب القصير هو patch -p1 -i {patch.file}.

يرجى الرجوع إلى هذه المدونة للحصول على التفاصيل: إنشاء تصحيحات التخريب باستخدام git.

فيما يلي برنامج نصي مساعد لإجراء فرق مقابل أحدث مجموعة تغييرات svn والالتزام المحدد:http://www.mail-archive.com/dev@trafficserver.apache.org/msg00864.html

#!/bin/sh
#
# git-svn-diff
# Generate an SVN-compatible diff against the tip of the tracking branch
TRACKING_BRANCH=`git config --get svn-remote.svn.fetch | sed -e 's/.*:refs\/remotes\///'`
REV=`git svn find-rev $(git rev-list --date-order --max-count=1 $TRACKING_BRANCH)`
git diff --no-prefix $(git rev-list --date-order --max-count=1 $TRACKING_BRANCH) $* |
sed -e "s/^+++ .*/&    (working copy)/" -e "s/^--- .*/&    (revision $REV)/" \
-e "s/^diff --git [^[:space:]]*/Index:/" \
-e "s/^index.*/===================================================================/"

ربما لا يستطيع SVN فهم إخراج git diff -p, ، ولكن يمكنك اللجوء إلى القوة الغاشمة:

  1. قم بعمل نسختين من الريبو الخاص بك
  2. في نسخة واحدة، تحقق من أحدث الأشياء الخاصة بك
  3. في الخروج استنساخ آخر ما يعادل svn المنبع.إذا كنت قد خططت مسبقًا، فلديك نسخة من svn upstream على فرعها الخاص، أو قمت بوضع علامة على الإصدار الأخير من svn.إذا لم تكن قد خططت مسبقًا، فاستخدم التاريخ أو gitk للعثور على تجزئة git SHA1 التي تقارب حالة svn.
  4. الآن قم بحساب التصحيح الحقيقي عن طريق التشغيل diff -r على المستنسخين.

Subversion <1.6 لا يحتوي على دعم التصحيح.يبدو أن Subversion 1.7 سيسمح بتطبيق التصحيحات، كما أن امتدادات git/hg للفرق الموحد موجودة في قائمة المهام لدينا.

إنه بالفعل أ طلب المواصفات أوائل عام 2008

قال لينوس تورفالدس في ذلك الوقت:

لذلك أود أن أزعم أنك بحاجة إلى شيء أقوى لتقول "لا تفعل git diff"، وهذا يجب أن يمنع أيضًا اكتشاف إعادة التسمية على الأقل.
بصراحة تامة، أي برنامج غبي جدًا لدرجة أنه لا يقبل تصحيحات git الحالية (أي TortoiseSVN)، فلا ينبغي لنا أن نقوم فقط بتعطيل الجزء الأكثر تافهًا منه.يجب أن نتأكد من عدم تمكيننا أي من الإضافات المهمة إلى حد ما:
حتى لو تجاهلتها ToirtoiseSVN، وإذا كان تجاهلها يعني أنها تسيء فهم الفرق، فلا ينبغي السماح بذلك على الإطلاق.

قد يكون هذا هو السبب

 git-format-patch: add --no-binary to omit binary changes in the patch.

تم تقديمه في Git1.5.6 في مايو/يوليو 2008 (على الرغم من أنني لم أختبره)

تأكد من ارتكاب التغييرات الخاصة بك وتربيتها فوق فرع Git المحلي ، من Git Bash Run:

عرض git --جميل >> myChangesFile.patch

تعمل الإجابة المقبولة المقدمة من نيكولاس بشكل جيد، إلا عندما تكون أ) توجد ملفات ثنائية في الفرق أو ب) تعمل في Windows Git ولديك أدلة بمسافات.لحل هذه المشكلة، كان علي إضافة أمر git diff متداخل لتجاهل الثنائيات وأمر sed للهروب من المسافات.الكتابة مرهقة بعض الشيء، لذلك قمت بإنشاء اسم مستعار:

[alias]
svnpatch = "!f() { git diff --name-only --no-prefix master...$1 | grep -Ev \"\\.sdf|\\.Doc|\\.dll|\\.zip|\\.exe\" | sed 's_\\s_\\\\\\\\ _g'  | xargs git diff --no-prefix master...$1 > $1.patch; echo "Created $1.patch"; }; f"

إذا قمت بعد ذلك بكتابة:

git svnpatch Feature123

...سيتم إنشاء ملف التصحيح feature123.patch مع الاختلافات بين قاعدة دمج الفرع الرئيسي والفرع feature123.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top