كيف تحدد أحدث SVN revision عدد الجذور في الدليل ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

وأود أن تبدأ علامات بلدي نشر ثنائيات مع أحدث إس رقم المراجعة.

ومع ذلك ، بسبب إس المستندة إلى الملفات و لا دليل/القائم على المشروع ، أحتاج إلى المسح الضوئي من خلال كل دليل و الدليل ملفات من أجل تحديد أعلى رقم المراجعة.

باستخدام svn info على جذر لا يعمل (فقط تقارير نسخة من هذا الدليل ، وليس الملفات في الدلائل):

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

أفهم أيضا أن أحد النهج البديل هو الحفاظ على إصدار الملف مع svn:keywords.يعمل هذا (كنت استخدمه في مشاريع أخرى) ، ولكن أنا تعبت من التعامل مع التأكد من الملف القذرة التعامل مع حتمية دمج الصراعات.

الجواب أنا أرى أن المشكلة كذب مع عدم القيام السليم svn up قبل استدعاء svn info في الدليل الجذر:

$ svn info
Path: .
...
Last Changed Author: fak
Last Changed Rev: 713
Last Changed Date: 2008-08-29 00:40:53 +0300 (Fri, 29 Aug 2008)

$ svn up
At revision 721.

$ svn info
Path: .
...
Revision: 721
Last Changed Author: reuben
Last Changed Rev: 721
Last Changed Date: 2008-08-31 22:55:22 +0300 (Sun, 31 Aug 2008)
هل كانت مفيدة؟

المحلول

طريقة واحدة.عند تحقق من رمز ، انظر السطر الأخير من svn الإخراج:

$ svn up
...stuff...
Updated to revision 66593.

وسيلة أكثر مباشرة:

$ svn info
Path: .
URL: https://svn.example.com/svn/myproject/trunk
Repository Root: https://svn.example.com/svn/
Repository UUID: d2a7a951-c712-0410-832a-9abccabd3052
Revision: 66593
Node Kind: directory
Schedule: normal
Last Changed Author: bnguyen
Last Changed Rev: 66591
Last Changed Date: 2008-09-11 18:25:27 +1000 (Thu, 11 Sep 2008)

نصائح أخرى

svnversion يبدو أن أنظف طريقة للقيام بذلك:

svnversion -c /path/to/your-projects-local-working-copy/. | sed -e 's/[MS]//g' -e 's/^[[:digit:]]*://'

الأمر أعلاه سيتم تنظيف أي م و ق الحروف (مشيرا إلى تعديلات المحلية أو switchedness) من الإخراج ، وكذلك أصغر رقم المراجعة في حالة svnversion إرجاع مجموعة بدلا من واحد فقط رقم المراجعة (انظر مستندات لمزيد من المعلومات).إذا كنت لا تريد تصفية الإخراج ، واخراج الأنابيب ، sed جزء من هذا الأمر.

إذا كنت ترغب في استخدام svn info, تحتاج إلى استخدام "عودي" (-R) حجة للحصول على معلومات من جميع الدلائل أيضا.منذ خرج ثم يصبح قائمة طويلة, سوف تحتاج إلى القيام ببعض الترشيح للحصول على آخر تغيير التنقيح عدد من تلك التي هي أعلى:

svn info -R /path/to/your-projects-local-working-copy/. | awk '/^Last Changed Rev:/ {print $NF}' | sort -n | tail -n 1

ما أن الأمر لا أن يأخذ كل الخطوط التي تشمل سلسلة "Last Changed Rev", ثم يزيل كل شيء من كل هذه الخطوط ما عدا الحقل الأخير (أيرقم المراجعة) ، ثم أنواع هذه الخطوط عدديا و يزيل كل شيء ولكن السطر الأخير ، مما أدى في أعلى رقم المراجعة.إذا كنت تقوم بتشغيل Windows, أنا متأكد من أنك يمكن أن تفعل هذا بسهولة تامة في PowerShell كذلك ، على سبيل المثال.

لمجرد أن يكون واضحا:الأساليب المذكورة أعلاه تحصل على العودية آخر تغيير التنقيح عدد من المسار في الريبو أن نسخة العمل المحلية يمثل ، هذا العمل المحلية نسخ ، دون ضرب الخادم.حتى إذا كان شخص ما لديه تحديث شيء في هذا المسار على مستودع الخادم بعد آخر svn update, لن تنعكس في هذا الانتاج.

إذا كان ما تريده هو آخر تغيير تنقيح هذا المسار على الملقم, يمكنك القيام به:

svn info /path/to/your-projects-local-working-copy/.@HEAD | awk '/^Last Changed Rev:/ {print $NF}'

مكررة هذا السؤال.كما نشرت لي هناك ، svnversion الأمر هو صديقك.لا تحتاج إلى تحليل الإخراج ، لا تحتاج إلى تحديث الأولى فقط لا وظيفة.

أنا لا أعرف إذا كنت تستخدم MSBuild(Visual Studio) لبناء الثنائيات.ولكن إذا كنت:هناك علاقة محتملة بين Subverion و MSBuild من خلال MSBuild المجتمع مهام المشروع

هنا جزء من بناء النصي:لدينا (C#) التطبيق يحصل على svn revision عدد شملت:

  <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="installationpath\of\subversion\bin">
     <Output TaskParameter="Revision" PropertyName="Revision" />
  </SvnVersion>
  <Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)"/>
...
    AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)"
     AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"

يناير

الإجابات المقدمة من قبل @تشارلز ميلر @ترولز ارفين صحيحة - يمكنك استخدام إخراج svn update أو svn info, ولكن كما يمكنك التلميح ، هذا الأخير يعمل فقط إذا كان المستودع هو ما يصل إلى التاريخ.ثم مرة أخرى, لست متأكدا ما قيمة أي رقم المراجعة ستكون لك لو جزء من شجرة المصدر على مختلف مراجعة من جزء آخر.حقا يبدو لي أنك ينبغي أن تعمل على متجانس شجرة.أقترح إما تحديث قبل تشغيل معلومات (أو إذا كنت قد قمت بالفعل تحديث لجهازك أنت الذهبي) أو باستخدام svn info URL-to-source.

هناك برنامج توزيعها مع التخريب يسمى svnversion الذي يفعل بالضبط ما تريد القيام به.كيف ونحن الوسم مواقعنا.

إذا كنت ترغب فقط في تنقيح عدد من أحدث التغيير التي ارتكبت ، تستخدم ويندوز دون grep/أوك/xargs, هنا هو البدائي الأمر تشغيل (سطر الأوامر):

X:\trunk>svn info -r COMMITTED | for /F "tokens=2" %r in ('findstr /R "^Revision"') DO @echo %r
67000

svn info -r COMMITTED سوف تعطيك أحدث ارتكبت التغيير إلى الدليل الذي يتم حاليا في:

X:\Trunk>svn info -r COMMITTED
Path: trunk
URL: https://svn.example.com/svn/myproject/trunk
Repository Root: https://svn.example.com/svn/
Repository UUID: d2a7a951-c712-0410-832a-9abccabd3052
Revision: 67400
Node Kind: directory
Last Changed Author: example
Last Changed Rev: 67400
Last Changed Date: 2008-09-11 18:25:27 +1000 (Thu, 11 Sep 2008)

لحلقة يعمل findstr لتحديد تنقيح جزء من الانتاج من svn info.الناتج من هذا أن يكون (لن ترى هذا):

Revision: 67000

ثم يقسم الرموز, و ترجع 2nd, إلى echoاد بها:

67000

"إس معلومات" سوف تظهر لك عمل نسخ التنقيح عدد (انظر "التنقيح" في الإخراج من "إس معلومات").الخاص بك بناء نظام ربما يسمح لك بوضع الجزء ذي الصلة من "إس معلومات"'s الانتاج مكان حيث أنها سوف تنعكس في التطبيق الخاص بك.على سبيل المثال ، يمكنك تحديد ذلك عند بناء مؤقت (هيئة الأمم المتحدة إصدار) يجب إنشاء الملف, تحتوي على الإخراج من "إس معلومات";ثم تدرج هذا الملف عند تجميع.

بالنسبة لي أفضل طريقة لمعرفة آخر تنقيح عدد من الجذع/فرع الحصول عليه من رابط البعيد.من المهم عدم استخدام العامل dir لأنه قد يكون عفا عليها الزمن.هنا مقتطف مع دفعة ( أكره كثيرا؛ -)):

@for /f "tokens=4" %%f in ('svn info %SVNURL% ^|find "Last Changed Rev:"') do set lastPathRev=%%f

echo trunk rev no: %lastPathRev%

ومع ذلك لدي مشكلة هاردكودي هذا العدد المؤقتة نسخة في المصادر التي تحتوي $القس:$.المشكلة هي أن $القس:$ يحتوي على الملف rev.لا.حتى إذا الجذع rev لا أكبر ثم مراجعة أي من إصدار الملف, أنا بحاجة إلى تعديل هذا الملف "مصطنع" و ارتكاب ذلك على الصحيح المؤقتة إصدار (=الجذع الإصدار).هذا هو جزء!لا أحد لديه فكرة أفضل ؟ شكرا جزيلا

هذا أمر مثير للسخرية ولكن svn info أو svnversion لن تأخذ بعين الاعتبار الدلائل;انها ميزة تسمى العامل 'مختلطة التنقيحات' - أنا أسميها التعذيب.أنا فقط بحاجة للعثور على أحدث 'المراجعة' من العيش ومصدر برنامج اختراق أقل عملت بالنسبة لي - قد يستغرق بعض الوقت لتشغيل:

repo_root# find ./ | xargs -l svn info  | grep 'Revision: ' | sort
...
Revision: 86
Revision: 86
Revision: 89
Revision: 90
root@fairware:/home/stage_vancity#
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top