গিট ফর্ম্যাট-প্যাচ এসএনএন সামঞ্জস্যপূর্ণ হতে হবে?


98

গিট ফর্ম্যাট-প্যাচ দিয়ে এসএনএন সামঞ্জস্যপূর্ণ হওয়ার জন্য কোনও প্যাচ তৈরির উপায় আছে যাতে আমি এটি একটি এসএনএন রেপোতে জমা দিতে পারি?

আমি গিথুবে একটি এসএনএন রেপো নিয়ে কাজ করছি এবং আমার পরিবর্তনগুলি মূল রেপোতে জমা দিতে চাই। এটি করার জন্য আমার একটি প্যাচ তৈরি করতে হবে, তবে প্যাচটি গিট ফর্ম্যাটের জন্য প্যাচ প্রয়োগ করা যাবে না যা প্যাচটি আলাদাভাবে প্যাচ করে তখন svn। এমন কোন গোপন কথা আছে যা আমি এখনও আবিষ্কার করতে পারি নি?

আপডেট: যদিও বর্তমানে এটি করার কোনও স্ক্রিপ্ট বা নেটিভ গিট উপায় নেই, তবে কীভাবে নিজে এটি সম্পাদন করতে হয় সে সম্পর্কে আমি এই বছরের গোড়ার দিকে একটি পোস্ট খুঁজে পেতে পেরেছি। আমি নির্দেশাবলী অনুসরণ করেছি এবং আমার গিট প্যাচগুলি এসএনএন নিয়ে কাজ করতে সাফল্য পেয়েছি।

কেউ যদি এটি সম্পাদন করতে এবং গিট প্রকল্পে অবদান রাখতে কোনও স্ক্রিপ্ট লেখার জন্য ছুরিকাঘাত করতে পারে তবে আমি সবাই প্রশংসা করব।

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


আমি এটি কাজ করতে পারি না ... আপনি কি সমস্ত পদক্ষেপের প্রয়োজনীয় পোস্ট করতে পারেন? ধন্যবাদ!
মৌরিসিও শেফার

4
হাই অ্যান্টনি আপনি নিকোলাসের গ্রহণযোগ্য উত্তর পরিবর্তন বিবেচনা করবেন?
সাইমন ইস্ট

আমি সাইমনের পরামর্শটিকে দ্বিতীয় করে বললাম, নিকোলাস স্মিথের উত্তর গৃহীত হিসাবে গ্রহণ করা প্রত্যেকের পক্ষে উপকারী হবে কারণ এটি অনেক বেশি ব্যবহারিক।
আলবিরিও

উত্তর:


92

আমার সর্বদা এটি গুগলে আছে তবে আমি যেভাবে পুরোপুরি (আমার জন্য) কাজ করে তা খুঁজে পেয়েছি:

  • এর সাথে প্যাচ তৈরি করুন git diff --no-prefix master..branch > somefile.diff, মাস্টার এবং শাখার অংশটি alচ্ছিক, আপনি কীভাবে আপনার ডিফগুলি পেতে চান তা নির্ভর করে।
  • এটি যেখানেই প্রেরণ করুন এবং সাথে আবেদন করুন patch -p0 < somefile.diff

এটি সর্বদা আমার পক্ষে সূক্ষ্মভাবে কাজ করে বলে মনে হয় এবং আমি মনে করি এটি সহজতম পদ্ধতি।


4
গিটের সাথে এসভিএন-সামঞ্জস্যপূর্ণ প্যাচ উত্পন্ন করার জন্য এটি আধ্যাত্মিক উপায়। এটি উত্তর হিসাবে চিহ্নিত করা উচিত।
এম্লোসকোট

--no-pagerএখন আর এর বিকল্প নেই git diff
nnot101

এটি মূলত ছাড়াই পোস্ট করা হয়েছিল --no-pager, কেন এটি সম্পাদনায় এটি যুক্ত করা হয়েছিল তা আমি নিশ্চিত নই। এটি সবসময় --no-pagerযাই হোক না কেন আমার জন্য ভাল কাজ করে ।
নিকোলাস স্মিথ

4
কেবল একটি নির্দিষ্ট প্রতিশ্রুতিবদ্ধতার git diff --no-prefix 056a1ba5140 7d939289b80 >my.patchজন্য: আমার জন্য কাজ করেছে ( গিটারে পূর্ববর্তী এবং নির্দিষ্ট প্রতিশ্রুতিটির শা -১ কোথায় 056a1ba5140এবং 7d939289b80)।
এড র‌্যান্ডাল

@ লিলাস এটি এসভিএন নিয়ে সমস্যা। এসভিএন-এর ডিফ / প্যাচগুলি কখনও সরানো ফাইলগুলি হ্যান্ডেল করতে সক্ষম হয় নি
Toofy


17

সর্বশেষতম এসএনএন চেঞ্জসেট এবং প্রদত্ত প্রতিশ্রুতি থেকে আলাদা করার জন্য এখানে একটি সহায়ক স্ক্রিপ্ট রয়েছে: 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.*/===================================================================/"

4
আমি দেখতে পেয়েছি যে আপনি যদি সর্বশেষের এসএনএন সংশোধন নিয়ে কাজ না করে থাকেন তবে আরইভি মানটি ভুল value আমি এটির git svn infoপরিবর্তে এটির জন্য এটি সংশোধন করেছি : REV=`git svn info | grep 'Last Changed Rev:' | sed -E 's/^.*: ([[:digit:]]*)/\1/'`
সেবাস্তিয়ান মার্টিন

4
এটা সত্যিই দারুন! তোমাকে অনেক ধন্যবাদ. আমার প্যাচগুলি
ফিশয়ের ক্রুশিয়ালে

10

এসভিএন সম্ভবত এর আউটপুট বুঝতে পারে না git diff -pতবে আপনি নিষ্ঠুর শক্তি ব্যবহার করতে পারেন:

  1. আপনার রেপোর দুটি ক্লোন তৈরি করুন
  2. একটি ক্লোন আপনার সাম্প্রতিক জিনিস পরীক্ষা করে দেখুন
  3. অন্য ক্লোন চেকআউটে এসভিএন আপস্ট্রিমের সমতুল্য যা আছে। আপনি যদি আগে থেকে পরিকল্পনা করে থাকেন তবে আপনার নিজস্ব ব্রাঞ্চে এসএনএন আপস্ট্রিমের একটি অনুলিপি রয়েছে বা আপনি শেষ এসএনএন সংস্করণটি ট্যাগ করেছেন। আপনি যদি পূর্বে পরিকল্পনা না করেন তবে এসএনএএন রাষ্ট্রের সান্নিধ্যের সাথে গিট এসএএএ 1 হ্যাশটি খুঁজে পেতে তারিখ বা গিটকটি ব্যবহার করুন।
  4. এখন diff -rদুটি ক্লোন চালিয়ে একটি আসল প্যাচ গণনা করুন ।

12
অথবা কেবলমাত্র নিকোলাস-স্মিথের পরামর্শ অনুসরণ করুন git diff --no-prefix > somefile.diffএবং আপনার গিট রেপোতে চালিত patch -p0 < somefile.diffহন এবং প্রকল্পের মূলটিতে প্যাচটি প্রয়োগ করার জন্য যে কোনও এসএনএন ব্যবহারকারীকে এটি প্রেরণ করুন ।
ডেভিডজি

10

সাবভার্সন <1.6 এর প্যাচ সমর্থন নেই। দেখে মনে হচ্ছে সাবভার্সন ১.7 প্যাচগুলি প্রয়োগ করার অনুমতি দেবে এবং গিট / এইচজি এইচটি এক্সটেনশনগুলি ইউনিফাইড ডিফের জন্য আমাদের টোডো তালিকায় রয়েছে।


4

এটি সত্যই 2008 এর শুরুর দিকে একটি বৈশিষ্ট্যের অনুরোধ

লিনাস টরভাল্ডস সেই সময় বলেছিলেন:

সুতরাং আমি যুক্তি দিয়ে বলব যে "গিট ডিফ করবেন না" বলার জন্য আপনার আরও শক্তিশালী কিছু দরকার এবং এটি নূন্যতম নামকরণ সনাক্তকরণকেও অস্বীকার করা উচিত।
মোটামুটি বলতে গেলে, যে কোনও প্রোগ্রাম যা বর্তমান গিট প্যাচগুলি (যেমন টরটোজ এসভিএন) গ্রহণ না করার মতো মূর্খ হয়, তারপরে আমাদের খুব খারাপ লাগা উচিত এটির তুচ্ছ অংশটি কেবল অক্ষম করা উচিত নয়। আমাদের নিশ্চিত করা উচিত যে আমরা কোনও গুরুত্বপূর্ণ এক্সটেনশানগুলির কোনও সক্ষম না করি :
এমনকি যদি টয়রিটোসএসভিএন এগুলি উপেক্ষা করে, যদি তাদের উপেক্ষা করার অর্থ এটি পৃথককে ভুল বোঝে তবে একেবারেই অনুমতি দেওয়া উচিত নয়।

সে কারণেই হতে পারে

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

মে / জুলাই ২০০৮ এ গিট ১..5..6 এ চালু করা হয়েছে (যদিও আমি এটি পরীক্ষা করে দেখিনি)


0

গিট ব্যাশ চালানো থেকে আপনার স্থানীয় গিট শাখার শীর্ষে আপনার পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ এবং পুনর্বাসিত হয়েছে তা নিশ্চিত করুন:

গিট শো - ব্যাখ্যা >> myChangesFile.patch


0

নিকোলাসের প্রদত্ত স্বীকৃত উত্তরটি ঠিকঠাক কাজ করে, যখন ক) বাইনারি ফাইলগুলি ডিফ বা বিতে উপস্থিত থাকে) আপনি উইন্ডোজ গিতে কাজ করছেন এবং স্পেস সহ ডিরেক্টরি রয়েছে। সমাধান করার জন্য আমাকে বাইনারি উপেক্ষা করার জন্য একটি নেস্টেড গিট ডিফ কমান্ড যুক্ত করতে হবে এবং স্পেসগুলি থেকে বাঁচতে সেড কমান্ডটি যুক্ত করতে হবে। এটি লেখার জন্য কিছুটা জটিল, তাই আমি একটি উপনাম তৈরি করেছি:

[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

... একটি প্যাচ ফাইল বৈশিষ্ট্য 123.প্যাচটি শাখা মাস্টার এবং শাখা বৈশিষ্ট্য 123 এর মার্জ বেসের মধ্যে পার্থক্য নিয়ে তৈরি করা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.