سؤال

ما هي العديد من السنانير المشتركة و / أو مفيدة قبل SVN؟

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

المحلول

لدينا خطاف مركز النشر الذي ينشر الرسالة إلى حساب تويتر. الاستخدامات Twitsvn. (إخلاء المسئولية: أنا committer في هذا المشروع).

سخيف؟ ربما ... لكنه اتضح أنه وسيلة جيدة بالنسبة لنا لتوصيل إجوات مستودعنا إلى بعض أعضاء فريق التحكم في الإصدار لدينا. بمجرد بدء SVN التحدث إليهم عبر عميل Twitter الخاص بهم، لم يشعر الأمر كثيرا مثل الصندوق الأسود.

نصائح أخرى

أن المستخدم قد أدخل بالفعل تعليقا على رسالة الالتزام، وأنه يحتوي على رقم مشكلة معين لتتبعه.

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

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

  • تحقق من علامات التبويب ورفض تسجيل الوصول.
  • تحقق من وجود نهايات خط غير متناسقة ورفض تسجيل الوصول.
  • تحقق من وجود "CR: [اسم المستخدم] ورفض تسجيل الوصول إذا لم يكن هناك مراجعة رمز.

قد ترغب في إلقاء نظرة على:http://svn.apache.org/repos/asf/subversion/branches/1.6.x/www/tools_contrib.html#hook_scripts. (قد تكون هذه الصفحة قديمة بوضوح لا يتم الحفاظ عليها بعد الآن عن التخريب 1.7)

أو مباشرة في:https://svn.apache.org/repos/asf/subversion/trunk/contrib/

أنا أحب استخدام svn السنانير إلى:

  • فرض نقاط أكثر صرامة من نمط التعليمات البرمجية
  • تحقق من وجود أخطاء بناء الجملة واضحة
  • تأكد من أن الكلمات الرئيسية TRAC الخاصة مثل "إصلاحات" أو "العناوين" تسبق بالفعل رقم القضية المناسب

أتحقق من نموذج FILETYPE وتأكد من عدم ارتكاب بعض الأنواع المحظورة عن طريق الصدفة (مثل .obj، .pdb). حسنا، ليس منذ المرة الأولى التي تحقق فيها شخص ما في 2 أزعج من الملفات المؤقتة التي تم إنشاؤها المترجم :(

للنوافذ:


@echo off

svnlook log -t "%2" "%1" | c:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 goto DISALLOWED

echo Please enter a check-in comment 1>&2
exit 1


:DISALLOWED
svnlook changed -t %2 %1 > c:\temp\pre-commit.txt

findstr /G:"%1\hooks\ignore-matches.txt"  c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit /b 0

echo disallowed file extension >> c:\temp\precommit-bad.txt
type c:\temp\precommit-bad.txt 1>&2
exit 1

يمكنني استخدام خطاف بعد الالتزام لإعادة كتابة خاصية المؤلف إلى اسم ودود من شجرة LDAP الخاصة بنا. (المصادقة مع معرف الموظف)

خطاف ارتكاب كبير لدينا في أرشيفنا هو التحقق من مشاريع Visual Studio .vcproj (أو .csproj) للتأكد من أن أدلة الناتج لم تتغير إلى أي شيء محلي (شائع الاستخدام لتصحيح الأخطاء).

ستكون هذه المشكلات تجميعها بشكل صحيح ولكن لا تزال تقطع المبنى بسبب الأجزاء التنفيذية المفقودة.

في الشركة التي أعمل حاليا، يتم التحقق من ذلك:

  • إذا كانت الملفات الثنائية لديها مجموعة سمة Lock Lock؛
  • إذا كانت ملفات Java لديها إشعار حقوق النشر القياسي وإذا كان يتضمن العام الحالي؛
  • إذا تم تنسيق التعليمات البرمجية بشكل صحيح (نستخدم Jalopy for Code formatting) - فقد يبدو هذا سخيفا، لكنه يقوم بالفعل بإجراء مقارنات نصية بين الإصدارات المختلفة أسهل؛
  • إذا كان الرمز لديه رسالة ارتكاب؛
  • إذا كان بنية الدليل يتوافق مع ما يتم تعريفه (يجب أن تكون جميع المشاريع بموجب مجلد SVN محدد، ويجب أن يكون لكل مشروع علامات ومجلد فرع ومجمع جذع)؛

أعتقد أن هذا هو ذلك.

أحب فكرة التحقق مما إذا كان الالتزام مرتبط بتذكرة؛ في الواقع يجعل الكثير من المنطقي بالنسبة لي.

يفضل البعض تشغيل أداة تشبه النسالة للحصول على لغة معينة للعثور على مشاكل مشتركة في التعليمات البرمجية و / أو فرض نمط الترميز. ولكن في فريق صغير ومهاري أفضل السماح لكل الالتزام بالمشاكل المحتملة والتعامل معها أثناء التعليق المستمر و / أو استعراض التعليمات البرمجية. بفضل هذا يرتكب أسرع مما يشجع ارتكاب أكثر تكرارا، مما يؤدي إلى تكامل أسهل.

انا استعمل ال check-mime-type.pl للتحقق من تعيين نوع MIME ونهاية خيارات الخط على ملفات ملتزمة. يمكنني استخدام التخريب لنشر الملفات المرئية على موقع ويب باستخدام DAV، وجميع الملفات دون تعيين مجموعة من نوع MIME حيث يتم عرض ملفات نصية (مثل مصدر HTML في متصفح بدلا من العلامات المقدمة).

إدراج ملاحظة في Mantis BugTracker مع تفاصيل التغيير التي تستند إلى رسالة الالتزام لها "إصدار #" أو ما شابه عن طريق Regex.

أنه يحتوي على رسالة ارتكاب، وهو! = من "إصلاح الأخطاء". لعنة، هل أكره هذه الرسائل عديمة الفائدة!

نحن نستخدم التحرير والسرد الخطاف ما قبل الالتزام وبعد التحديث تلقائيا بوجزيلا مع الإدخال المقترن من ارتكاب SVN.

نستخدم الخطاف الثاني (قبل الالتزام) للتأكد من أن SVN المناسب: نمط EOL و SVN: يتم تعيين خصائص الكلمات الرئيسية في ملف قبل إضافته إلى Rebostoration.

لدينا ربط ثالث (بعد الالتزام) لإطلاق البنية والبريد النتائج إذا تم كسر البناء، وإبلاغ الجميع عندما تم إصلاح البناء مرة أخرى.

لدينا ربط رابع (بعد الالتزام) لإطلاق النسخ المتماثل SVN، للتأكد من أن النسخ المتماثل خارج الموقع محدث قدر الإمكان.

لسوء الحظ، لا أستطيع نشر المصدر لهذه، ولكن، باستثناء تكامل Bugzilla، فهي سهلة بما يكفي لتنفيذها و هدسون ربما خيار أفضل للتكامل المستمر.

لتكامل بوجزيليلا، أود أن أقترح النظر SCMBUG..

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

#!/bin/bash

REPOS="$1"
TXN="$2"

# Exit on all errors.
set -e
SVNLOOK=svnlook
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
  if [[ $REPOS_PATH =~ A[[:blank:]]{3}(.*)\.(sh|c|h|cpp) ]]
  then
    if [ ${#BASH_REMATCH[*]} -ge 2 ]
        then
    FILENAME=${BASH_REMATCH[1]}.${BASH_REMATCH[2]};

    # Make sure shell scripts are executable
    if [[ sh == ${BASH_REMATCH[2]} ]]
    then
        EX_VALUE="true"
            if [ -z "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:executable \"$FILENAME\" 2> /dev/null`" ]
            then
            ERROR=1;
                echo "svn ps svn:executable $EX_VALUE \"$FILENAME\"" >&2
        fi
        EOL_STYLE="LF"
    else
        EOL_STYLE="native"
    fi

    # Make sure every file has the right svn:eol-style property set
        if [ $EOL_STYLE != "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:eol-style \"$FILENAME\" 2> /dev/null`" ]
        then
        ERROR=1;
            echo "svn ps svn:eol-style $EOL_STYLE \"$FILENAME\"" >&2
    fi
    fi
  fi
  test -z $ERROR || (echo "Please execute above commands to correct svn property settings." >& 2; exit 1)
done

ماذا عن هوك لتجميع المشروع؟ على سبيل المثال تشغيل تشغيل كل شيء. هذا يضمن لا أحد يتحقق في التعليمات البرمجية التي لا تجميعها! :)

حل عدم وجود ملف externals في SVN 1.5 باستخدام postupdate والتأكيد

كنت أستمتع خطاف يتحقق من [المراجع: XYZ] ملاحظة في رسالة الالتزام، ويرفض الالتزام.

أفكر في كتابة واحدة للتحقق من ملفات ASPX / HTML على ملفات ASPX / HTML، فقط للتأكد من أن الجميع يستخدمون الشخص الصحيح.

أيضا، يمكنك الحصول على هوك الالتزام قبل (أو بعد) دفع إشعار إلى خادم CI الخاص بك كما هو موضح في بلوق هدسون

أتحقق من تصادم الحالة (نوافذ غبية) ويتطلب أيضا-Mergeinfo.pl للتأكد من أن العميل لا يقل عن 1.5 - بهذه الطريقة SVN: سيتم دائما تعيين MergeInfo

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