سؤال

كيف يمكنني تجاهل الملفات في Subversion؟

وأيضًا، كيف يمكنني العثور على الملفات التي لا تخضع للتحكم في الإصدار؟

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

المحلول

(تم تحديث هذه الإجابة لتتوافق مع سلوك SVN 1.8 و1.9)

لديك سؤالين:

وضع علامة على الملفات على أنها متجاهلة:

أعني بـ "الملف الذي تم تجاهله" أن الملف لن يظهر في القوائم حتى لو كان "غير مُصدر":سوف يتظاهر عميل SVN الخاص بك بأن الملف غير موجود على الإطلاق في نظام الملفات.

يتم تحديد الملفات التي تم تجاهلها بواسطة "نمط الملف".تم شرح بناء جملة أنماط الملفات وتنسيقها في وثائق SVN عبر الإنترنت: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html “أنماط الملفات في التخريب”.

يدعم Subversion، بدءًا من الإصدار 1.8 (يونيو 2013) والإصدارات الأحدث، ثلاث طرق مختلفة لتحديد أنماط الملفات.وفيما يلي ملخص مع الأمثلة:

1 - منطقة تكوين وقت التشغيل - global-ignores خيار:

  • هذا ال جانب العميل فقط الإعداد، لذلك الخاص بك global-ignores لن تتم مشاركة القائمة من قبل مستخدمين آخرين، وينطبق ذلك على جميع عمليات إعادة الشراء التي تقوم بإجرائها على جهاز الكمبيوتر الخاص بك.
  • تم تعريف هذا الإعداد في ملف منطقة تكوين وقت التشغيل الخاص بك:
    • ويندوز (يعتمد على الملف) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • ويندوز (القائم على التسجيل) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores معا HKLM و HKCU.
    • لينكس/يونكس - ~/.subversion/config

2 - ال svn:ignore الخاصية التي تم تعيينها على الدلائل (وليس الملفات):

  • يتم تخزين هذا في الريبو، لذلك سيكون لدى المستخدمين الآخرين نفس ملفات التجاهل.على غرار كيف .gitignore يعمل.
  • svn:ignore يتم تطبيقه على الدلائل وهو غير متكرر أو موروث.أي ملف أو مباشر سيتم استبعاد الدليل الفرعي للدليل الأصلي الذي يطابق نمط الملف.
  • بينما يضيف SVN 1.8 مفهوم "الخصائص الموروثة"، فإن svn:ignore يتم تجاهل الخاصية نفسها في الدلائل التابعة غير المباشرة:

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    (لذلك الملف ./subdirectory/ignoreThis لا يتم تجاهله، على الرغم من "ignoreThis.txt"يتم تطبيقه على . جذر الريبو).

  • ولذلك، لتطبيق قائمة التجاهل بشكل متكرر يجب عليك استخدامها svn propset svn:ignore <filePattern> . --recursive.

    • سيؤدي هذا إلى إنشاء نسخة من الخاصية على كل دليل فرعي.
    • إذا <filePattern> إذا كانت القيمة مختلفة في الدليل الفرعي، فإن قيمة الطفل تتجاوز القيمة الأصلية تمامًا، لذلك لا يوجد أي تأثير "إضافي".
    • لذلك إذا قمت بتغيير <filePattern> على الجذر ., ، فيجب عليك تغييره مع --recursive للكتابة فوقه في الدلائل التابعة والتابعة.
  • ألاحظ أن بناء جملة سطر الأوامر غير بديهي.

    • لقد بدأت بافتراض أنك ستتجاهل ملفًا في SVN عن طريق كتابة شيء مثل svn ignore pathToFileToIgnore.txt ولكن هذه ليست الطريقة التي تعمل بها ميزة التجاهل في SVN.

3- ال svn:global-ignores ملكية.يتطلب SVN 1.8 (يونيو 2013):

  • هذا مشابه ل svn:ignore, ، إلا أنه يستخدم ميزة "الخصائص الموروثة" الخاصة بـ SVN 1.8.
  • قارن ب svn:ignore, ، يتم تطبيق نمط الملف تلقائيًا في كل دليل تابع (وليس فقط العناصر الفرعية المباشرة).
    • وهذا يعني أنه ليس من الضروري تعيين svn:global-ignores مع ال --recursive العلم، حيث يتم تطبيق أنماط ملفات التجاهل الموروثة تلقائيًا عند توريثها.
  • تشغيل نفس مجموعة الأوامر كما في المثال السابق، ولكن باستخدام svn:global-ignores بدلاً من:

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

لمستخدمي TortoiseSVN:

كان هذا الترتيب برمته مربكًا بالنسبة لي، لأن مصطلحات TortoiseSVN (كما هي مستخدمة في نظام قائمة Windows Explorer) كانت مضللة بالنسبة لي في البداية - لم أكن متأكدًا من أهمية "إضافة بشكل متكرر" و"إضافة *" و"إضافة" في قائمة التجاهل. خيارات.آمل أن يشرح هذا المنشور كيفية ارتباط ميزة التجاهل بميزة خصائص SVN.ومع ذلك، أقترح استخدام سطر الأوامر لتعيين الملفات التي تم تجاهلها حتى تتعرف على كيفية عملها بدلاً من استخدام واجهة المستخدم الرسومية، واستخدام واجهة المستخدم الرسومية فقط لمعالجة الخصائص بعد أن تشعر بالارتياح تجاه سطر الأوامر.

سرد الملفات التي تم تجاهلها:

الامر svn status سوف يخفي الملفات التي تم تجاهلها (أي الملفات التي تطابق ملف RGA global-ignores نمط، أو تطابق الدليل الأصلي المباشر svn:ignore نمط أو تطابق أي دليل سلف svn:global-ignores نمط.

استخدم ال --no-ignore خيار لرؤية تلك الملفات المدرجة.الملفات التي تم تجاهلها لها حالة I, ، ثم قم بتوجيه الإخراج إلى grep لإظهار الأسطر التي تبدأ بـ "I" فقط.

الأمر هو:

svn status --no-ignore | grep "^I"

على سبيل المثال:

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

تا دا!

نصائح أخرى

استخدم الأمر التالي لإنشاء قائمة ليست ضمن ملفات التحكم في الإصدار.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

ثم قم بتحرير الملف إلى اترك فقط الملفات التي تريد تجاهلها بالفعل.ثم استخدم هذا لتجاهل الملفات المدرجة في الملف:

svn propset svn:ignore -F ignoring.txt .

لاحظ النقطة في نهاية السطر.يخبر SVN أنه تم تعيين الخاصية على الدليل الحالي.

احذف الملف:

rm ignoring.txt

واخيرا الالتزام

svn ci --message "ignoring some files"

يمكنك بعد ذلك التحقق من الملفات التي تم تجاهلها عبر:

svn proplist -v

إذا كنت تستخدم السلحفاةSVN, ، انقر بزر الماوس الأيمن على الملف ثم حدد TortoiseSVN / أضف إلى قائمة التجاهل.سيؤدي هذا إلى إضافة الملف/حرف البدل إلى ملف svn:ignore ملكية.

svn:ignore سيتم فحصه عند قيامك بإيداع الملفات، وسيتم تجاهل الملفات المطابقة.لدي قائمة التجاهل التالية لمشروع Visual Studio .NET:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

يمكنك العثور على هذه القائمة في قائمة السياق على السلحفاةSVN / خصائص.

يمكنك تجاهل ملف أو دليل مثل .gitignore.ما عليك سوى إنشاء ملف نصي بقائمة الدلائل/الملفات التي تريد تجاهلها وتشغيل الكود أدناه:

svn propset svn:ignore -F ignorelist.txt .

أو إذا كنت لا تريد استخدام ملف نصي، يمكنك القيام بذلك على النحو التالي:

svn propset svn:ignore "first
 second
 third" .

مصدر:مدونة Karsten - قم بتعيين svn:ignore لملفات متعددة من سطر الأوامر

لقد وجدت المقال .svnignore مثال لجافا.

مثال:.svnignore لروبي أون ريلز،

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

وبعد ذلك:

svn propset svn:ignore -F .svnignore .

أمثلة على .gitignore.يمكنك استخدام .svnignore الخاص بك

https://github.com/github/gitignore

كما يبدو أن أحداً لم يذكر ذلك..

svn propedit svn:ignore .

ثم قم بتحرير محتويات الملف لتحديد الأنماط التي سيتم تجاهلها، ثم اخرج من المحرر وبذلك تكون قد انتهيت من كل شيء.

عند استخدام Propedit تأكد من عدم وجود أي مسافات زائدة لأن ذلك سيؤدي إلى استبعاد الملف من قائمة التجاهل.

يتم إدراجها تلقائيًا إذا كنت تستخدم علامة التبويب الإكمال التلقائي على نظام التشغيل Linux لإنشاء الملف للبدء به:

svn propset svn:ignore 'file1
file2' .

الحل الآخر هو:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

أو سطراً سطراً

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

ماذا يفعل:

  1. يحصل على ملفات الحالة من svn
  2. يحفظ جميع الملفات مع ? إلى الملف "svnignore.txt"
  3. الحصول على الملفات التي تم تجاهلها بالفعل وإلحاقها بالملف "svnignore.txt"
  4. يخبر svn بتجاهل الملفات الموجودة في "svnignore.txt"
  5. يزيل الملف

أيضًا، إذا كنت تستخدم Tortoise SVN، فيمكنك القيام بذلك:

  1. في قائمة السياق، حدد "TortoiseSVN"، ثم "الخصائص"
  2. في النافذة التي ظهرت، انقر على "جديد"، ثم "متقدم"
  3. في النافذة التي ظهرت مقابل "اسم الخاصية"، حدد أو اكتب "svn:ignore"، مقابل "قيمة الخاصية"، اكتب اسم الملف المطلوب أو اسم المجلد أو قناع الملف (في حالتي كان "*/target")، انقر فوق "تطبيق" الملكية بشكل متكرر"
  4. نعم.نعم.
  5. يقترف

نسخة أكثر قابلية للقراءة من إجابة بكبيلي:

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

ماذا يفعل:

  1. يحصل على ملفات الحالة من svn
  2. يحفظ جميع الملفات مع ? إلى الملف "svnignore.txt"
  3. الحصول على الملفات التي تم تجاهلها بالفعل وإلحاقها بالملف "svnignore.txt"
  4. يخبر svn بتجاهل الملفات الموجودة في "svnignore.txt"
  5. يزيل الملف
  1. مؤتمر نزع السلاح ~/.subversion
  2. فتح التكوين
  3. ابحث عن السطر مثل "التجاهل العالمي"
  4. قم بتعيين نوع ملف التجاهل مثل هذا:global-ignores = *.o *.lo *.la *.al .libs *.so .so.[0-9] *.pyc *.pyo 88 *.rej ~ ## .#* .*.swp .DS_Store إخراج وحدات العقدة

يمكنك أيضًا تعيين نمط تجاهل عام في ملف تكوين SVN.

svn status سيخبرك بالملفات غير الموجودة في SVN، بالإضافة إلى ما تم تغييره.

انظر الى خصائص SVN لخاصية التجاهل.

لجميع الأشياء SVN، و كتاب احمر مطلوب القراءة.

إضافة دليل للتخريب، وتجاهل محتويات الدليل

svn propset svn:ignore '\*.*' .

أو

svn propset svn:ignore '*' .

SVN ignore من السهل إدارتها في TortoiseSVN.افتح TortoiseSVN وانقر بزر الماوس الأيمن على قائمة الملف ثم حدد إضافة إلى قائمة التجاهل.

سيؤدي هذا إلى إضافة الملفات الموجودة في svn:ignore ملكية.عندما نقوم بالتحقق من الملفات، ثم تلك الملفات المتطابقة معها svn:ignore التي سيتم تجاهلها ولن تلتزم.

في مشروع Visual Studio أضفنا الملفات التالية لتجاهلها:

bin obj
*.exe
*.dll
*.pdb
*.suo

نحن ندير كود المصدر على SVN of قارنفخ باستخدام هذه الطريقة بنجاح

استخدم الأمر حالة svn على نسخة العمل الخاصة بك لإظهار حالة الملفات، فإن الملفات التي لم تخضع بعد للتحكم في الإصدار (ولم يتم تجاهلها) سيكون لها علامة استفهام بجوارها.

أما بالنسبة لتجاهل الملفات، فأنت بحاجة إلى تحرير خاصية svn:ignore، اقرأ الفصل "تجاهل العناصر التي لم يتم إصدارها" في svnbook على http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html.يصف الكتاب أيضًا المزيد حول استخدام حالة svn.

  1. افتح استخدام منتج JetBrains (أي.بيشارم)
  2. ثم انقر فوق الزر "التزام" الموجود في شريط الأدوات العلوي أو استخدم الاختصار "ctrl + k"Screenshot_toolbar
  3. في واجهة الالتزام، انقل ملفاتك غير المرغوب فيها إلى قائمة تغيير أخرى كما يلي.Screenshot_commit_change
  4. في المرة القادمة يمكنك فقط الالتزام بقائمة التغيير الافتراضية.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top