كيفية تعيين الزناد لمنع الالتزام إلى SVN مع خاصية Mergeinfo؟
-
18-09-2019 - |
سؤال
أرغب ب تجنب إنشاء خاصية SVN MergeInfo على أي شيء سوى جذر الفروع. لدينا فرع الجذع وبعض الفروع الأخرى.
على افتراض أنني أعلم أنه لا يوجد شيء على الإطلاق حول مشغلات SVN، ما هي الخطوات التي أحتاج إلى متابعتها لإعداد خطاف مسبق الالتزام الذي يمنع إضافات خصائص Mergeinfo إلى أي شيء سوى جذر الفروع؟
يقع الجذع في قاعدة المستودع "/ الجذع"، وجميع الفروع موجودة في "/ branches / foo"
المحلول
أساسا، تحتاج إلى تحديد SVN ما قبل ارتكاب صنارة صيد. أولا، قرأ عن السنانير بشكل عام.
من المحتمل أن ترغب في البدء في نسخ ملف Pre-Comment.tmpl pre-commit
, وتنفيذ المنطق هناك.
من المحتمل أن ترغب في فحص فرق المعاملة المنفذة حاليا لخطوط مثل: تمت إضافته: SVN: MergeInfo
نظرا لأن المعلومات حول الملف الذي تمت إضافته بهذا في خط مختلف، فقد تحتاج إلى أداة معالجة أكثر تعقيدا من GREP - ربما نص Perl بسيط.
عند تحديد أن المعاملة تحتوي على خاصية مضافة لا تريدها، يمكنك حظر الالتزام؛ أو، إذا كنت جريئا بشكل خاص، فيمكنك محاولة تعديل المعاملة والمتابعة.
نصائح أخرى
يجب أن تعمل ما يلي. مستودع الخاص بك يحتوي بالفعل على SVN: Mergeinfo على الجذع، لذلك لا تريد أي شخص إضافته مرة أخرى.
بالمناسبة، تضمن هوكنا الفعلي أيضا أن يكون كل الالتزام مصحوبا برسالة سجل ويحمي أيضا من حذف بعض أدلة المستوى الأعلى المهمة لدينا عبر مستعرض الريبو.
@echo off
set logfile=%TEMP%\%2.txt
"c:\program files\subversion\svnlook" log -t %2 %1 > %logfile%
for /f "tokens=1,2*" %%i in (%logfile%) do (
if %%i==UU goto checkmergetracking
)
for /f "tokens=1,2*" %%i in (%logfile%) do (
if %%i==_U goto checkmergetracking
)
del %logfile%
exit 0
:checkmergetracking
"c:\program files\subversion\svnlook" diff -t %2 %1 > %logfile%
find "Added: svn:mergeinfo" %logfile%
if ERRORLEVEL 1 goto nomergeinfo
del %logfile%
echo "Addition of Merge Info Not Allowed" >&2
exit 1
:nomergeinfo
del %logfile%
exit 0