كيفية تعيين الزناد لمنع الالتزام إلى SVN مع خاصية Mergeinfo؟

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

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top