كيف يمكن التحقق فقط الملفات التي تم تعديلها في مجموعة من التنقيحات SVN بها؟

StackOverflow https://stackoverflow.com/questions/320693

  •  11-07-2019
  •  | 
  •  

سؤال

هل من الممكن الخروج فقط تلك الملفات من مستودع SVN التي تم تعديلها في المراجعة أو مجموعة من المراجعات، دون التحقق من أي الملفات التي لم تكن معدلة؟

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

المحلول

واقتراحي هو في نفس المنوال كما يقترح flolo. ولكن، ويأخذ مجموعة. هل يمكن وظيفة قذيفة التالية.

function checkout_files_in_revrange()
{
  svn_url=$1;
  start_rev=$2;
  end_rev=$3;
  for theCheckoutCanditate in `svn log -r $start_rev:$end_rev --verbose --incremental | grep "   M " | cut -f5 -d' ' | cut -f3- -d/`
  do
     svn co $svn_url/$theCheckoutCandidate -q;
  done
}

نصائح أخرى

وهناك AFAIK الآن طريقة مباشرة لمجرد الحصول على الملفات التي تم تغييرها وليس كل شيء.

وفكرتي سيكون: استخدام إخراج مطول من قائمة (مما يدل على نسخة المتغير الماضي)، من خلال تصفية AWK، والخروج بقية. مثلا للبحث في الملفات التي تغيرت في الإصدار 42 وأود أن استخدام هذه

VERSION=42
svn list -v -R -r $VERSION svn://... |  awk "/^[ ]*$VERSION/ {print \$7}" > files_to_checkout

وبعد قيام svn update -r $VERSION 'cat files_to_checkout' (أو المشترك على رابط، وهذا يتوقف على المكان الذي سيتم تشغيل الأوامر).

وتحرير: إضافية حتى أقصر: استخدام الأمر إس فرق، واستبدالها مع -x و--diff-كمد الأمر فرق مع إس في المشترك. وهذا يتطلب بعض الجدل تحول القرصنة (الذي أنا متعود وضع هنا)، لكنه يحتاج سطر واحد فقط وليس ملف intermedate (والتي يمكن أن تنقذ فوق جدا، ولكن هذا لن يكون قراءة التكلفة)

إذا كنت تستخدم سجل إس مع -v (الخيار مطول):

svn log -r <revision> -v <path>

وسوف تحصل على الإخراج الذي يتضمن الملفات التي تم تغييرها:

 r3 | ciaran | 2008-11-16 12:24:30 +0000 (Sun, 16 Nov 2008) | 1 line
Changed paths:
   A /trunk/apache/apache.conf
   A /trunk/application/controllers

Commit message goes here

ويجب أن تكون قادرة على التعامل مع ذلك مع بعض grepping وما إلى ذلك لإنتاج سلسلة من الأوامر شارك إس.

ونحن نفعل ذلك في برنامج نصي MSBuild:

الخطوة 1: - استخدم الأمر فرق للحصول على قائمة من الملفات التي تم تعديلها، وإعادة توجيه الإخراج إلى ملف مؤقت في الدليل الهدف الخطوة 2: - قراءة الملف المؤقت إلى itemGroup

<Exec command="$(svnExecutable) diff -r $(StartRevision):$(EndRevision) $(DOUBLE_QUOTES)$(SvnRepositoryPath)/$(DOUBLE_QUOTES) --no-diff-deleted --summarize &gt; $(TempFilePath)" WorkingDirectory="$(WorkDirectory)" />

                     

ولست متأكدا كلي إذا كان ذلك ممكنا ولكن يمكنك أيضا القيام بشيء من هذا القبيل:

svn checkout --revision <revisionNumber> 

للحصول على مراجعة معين و

svn log --revision <revisionNumber> 

لسرد كافة الملفات chaned في المراجعة

في نفس المنوال تقريبا حيث أن معظم الناس قد اقترح، (ولكن فقط في نظام مع البقرى وAWK)، يمكنك الحصول على قائمة من خلال تنفيذ

وsvn log -v --revision <revision_number> | grep "^ " | awk '{print $2}'.

وآخر يأخذ في الإجابة على سؤالك:

وعلى افتراض أن يكون لديك القائمة workingcopy يجب فقط استخدام 'تحديث إس "على جذر الدليل الذي يحتوي على الملفات التي تبحث في كما يقوم باسترداد بالضبط ما الذي تغير بين النسخة الحالية ومراجعة الرأس مع أقل قدر من البيانات الممكنة.

ونظم إدارة أقدم المصدرية مثل CVS وVSS طلبت خادم لكل ملف <م> تغير هذا الملف؟ ، في حين التخريب فقط يرسل التغييرات من شجرة كما عمل واحد. عند تمرير قائمة الملفات لتحديث إس لم يكن لديك هذه الميزة.

وذلك أنجع وسيلة لنقل ما تغير هو مجرد تحديث. هذا ينقل سوى فرق ثنائي من التغييرات في الرأس بالمقارنة مع الإصدار الأساسي من نسخة العمل الخاص بك.


إذا المشكلة التي تحاول حل هو أن <ط> تحديث إس هو أن يتباطأ، ثم نحاول حل هذه عن التخريب 1.7.

وهذا الإصدار سوف أعرض شكل تخزين البيانات نسخة عمل جديدة من شأنها أن تجعل العمليات البسيطة التي لديها لتأمين كامل نسخة العمل (مثل تحديث) أسرع بكثير.

وإس فرق -r starting_revision: ending_revision_or_HEAD --summarize

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