سؤال

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

أنا لم أرى أي طريقة واضحة للقيام بذلك في إس مساعدة.لدي .صافي فائدة المكتبة التي يلتف svn.exe في بعض الطرق, و كنت أفكر في تمديد هذه لاسترداد فقط المحتوى الذي يقابل بلدي امتداد الفائدة.ولكن أنا أفضل أن استخدام أسهل أو الطريقة الحالية في حالة وجود واحدة.

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

المحلول

هذا ممكن:يمكنك svn checkout دليل فارغ ، ثم svn update filename لكل ملف هل يريدون.

البرنامج النصي الخاص بك يمكن أن تفعل شيئا مثل:

  1. svn checkout svn://path/to/repos/directory --depth empty
  2. svn list --recursive svn://path/to/repos/directory
  3. الأنابيب التي تنتج من خلال مرشح أن يزيل المحرمة امتداد الملف مثلا grep
  4. تكرار عبر هذا الجديد تصفية القائمة ، svn update --parents كل ملف

التي من شأنها أن تعطي النتيجة المرجوة من نسخة عمل من دون ملفات معينة أو امتداد الملف.

بالطبع ، هناك أيضا المشكلة التي ذكر "الناس [فحص] في الكثير من زغب" ولكن هذه مسألة منفصلة.

نصائح أخرى

كما قلت هنا, هناك خيار واحد فقط في بناء إس في نفسها:ميزة جديدة في إس 1.5 يسمى متفرق الخروج, ومع ذلك يمكنك فقط تحديد الخروج على مستوى الدليل ، بحيث يكون لديك لفرز الملفات التي لا تحتاج في دليل مختلف.

وأنت لا يمكن أن تحقق من مجرد بضعة ملفات معينة - يمكنك التحقق فقط من مجلد كامل. يمكنك إعادة ترتيب وتنظيم ما كنت سحب، أو يمكنك فقط نسخ نسخة عمل من مكان آخر والتحديث.

لتطبيق معين بوويرشيل من الجواب من مايكل Hackner ، حاول شيئا مثل:

svn ls http://svn-server/src --recursive | Out-File svn.txt
Get-Content .\svn.txt | where {$_.toLower().EndsWith('special.xml')} | select -First 200 | foreach {New-Object PSObject -Property @{ Path = $_; Munged = $_.Replace('/', '_') } } | foreach { svn export "http://svn-server/src/$($_.Path)" $($_.Munged) }

واستخدامي قضية معينة هنا هو العثور على مجموعة من الملفات الذي يحمل الاسم نفسه (في هذه الحالة * special.xml) وإلقاء كل منهم في مجلد واحد، مع أسماء فريدة في الأساس. ولقد استخدمت ملف وسيط لتخزين قائمة الريبو بأكملها، ولكن هذا يمكن أن يكون كل inlined وكذلك إذا كان هذا أفضل بالنسبة لك.

وحاولت فقط على النهج الذي قدمه مايكل Hackner. وفيما يلي التنفيذ لنظام DOS. لاحظ أن لديك لأن الخروج على مجلد فارغ قبل تشغيل هذا البرنامج النصي.

@echo off

svn list --recursive https://path_to_repository_folder | find /I ".sql" > filelist.txt

REM Specify a custom delim. Otherwise space in filename will be treated as a delimiter.
FOR /F "delims=|" %%i  IN (filelist.txt) DO (
    echo -------------
    echo %%i
    svn update --parents "%%i"
)

والأكثر بسيطة والطريقة الصحيحة للقيام بذلك: لا تفعل ذلك!

وإذا كان هناك بعض حماقة في مجلد طرف ثالث حيث يفترض أن تكون ملفات .dll التي يجب أن يكون الخروج - إزالة هذا حماقة إلى موقع آخر! أنها لا تنتمي هنا على أي حال.

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