كيف تحدد أحدث SVN revision عدد الجذور في الدليل ؟
-
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#