كيف ترتكب في التخريب و إضافة الملفات/المجلدات و إزالة الملفات القديمة/المجلدات تلقائيا ؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

بعد أن كان مدلل من قبل TortoiseSVN, أنا الآن باستخدام سطر الأوامر في لينكس للتفاعل مع SVN مستودع.

في TortoiseSVN وأود أن مجرد ارتكاب التغييرات ، فإنه تظهر لي قائمة من ما كان ما كان حذف ما تم تعديله.أنا سوف تحقق من كل المربعات وانقر طيب.

مع سطر الأوامر ، يبدو علي أن أفعل svn add عندما أضيف الملفات svn rm عند إزالة الملفات عند هذا كل ما فعلت, ثم اكتب svn commit, وهي تلزم إضافتها ، إزالة تعديلها.

هناك أمر لا يمكن استخدام هذا فقط يرتكب الملفات/المجلدات لقد إزالة الملفات/المجلدات لقد أضاف والملفات لقد تعديلها دفعة واحدة ؟

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

المحلول

ومع الأدوات SVN القياسية، وليس هناك شيء من هذا القبيل - هو مذكور في لل التعليمات باعتبارها أمرا سيئا.

نصائح أخرى

وتحت Windows، فإن الملف الدفعي التالي العمل:

for /f "tokens=2*" %%i in ('svn status %1 ^| find "?"') do svn add "%%i"  
for /f "tokens=2*" %%i in ('svn status %1 ^| find "!"') do svn delete "%%i"  
svn commit -m "Automatic commit" %1  

وببساطة حفظ خطوط الثلاثة المذكورة أعلاه في ملف يسمى 'autocommit.bat. إذا كنت تشغيلها من دليل العمل، لا تحتاج إلى تحديد معلمة. إذا كنت في دليل آخر، يمكنك أن نسميها مثل autocommit.bat c:\MyProjectFolder.

وكان نادر Shirazie الأمر الصحيح في البرنامج النصي نشر . هنا في النسخة سطر واحد لينكس:

svn add  $(svn st | sed -n 's/^[A?] *\(.*\)/\1/p')

وكنت أريد أن ظائف لفترة طويلة، وأنا سعيد لاني بحثت هنا!

وليس هناك قيادة SVN، ولكن أنا متأكد من أن هناك النصي أو اثنين يمكن أن تفحص لملفات غير معلومة الإصدار / المفقودة وإصدار الأوامر المناسبة ...

ولقد وجدت واحدة هنا: http://gael-varoquaux.info/computers/ svnautocommit / index.html و

وإضافة النص الكامل

#!/bin/bash


#------------------------------- Subroutines ---------------------------------
usage(){
echo " Usage: $(basename $0) PATH"
echo ""
echo "Automatically commits the changes of svn working copy located in PATH."
echo "The new files are automatically added and the files that have been removed"
echo "are removed."
echo ""
echo "By Gael Varoquaux"
}

#------------------------------- Process the options -------------------------
if [ $# -eq 1 ]
then
    workingdir="$1"
else
    usage
    exit 1
fi

if ! cd $workingdir
then
    echo $workingdir is not a accessible path.
    usage
    exit 1
fi

#------------------------------- Find out what has changed -------------------

# A warning if this fails :
echo "SVN autocommit failed" > $HOME/local/motd

svnstatus=$(svn status $workingdir)
added=$(printf "$svnstatus" | sed -n 's/^[A?] *\(.*\)/\1/p')
removed=$(printf "$svnstatus" | sed -n 's/^! *\(.*\)/\1/p')

if [ "x$added" != "x" ]
then
    echo adding "$added" to repository
    svn add $added
fi

if [ "x$removed" != "x" ]
then
    echo removing "$removed" to repository
    svn remove $removed
fi

svn commit -m "autocommit" && rm $HOME/local/motd

والنسخة بيثون يبدو أن لا يكون هناك سوء الحظ.

وأنت قد تحتاج إلى تعديل السيناريو لاتخاذ معلمة للتعليق عليه، لكنه بداية. يمكنك أيضا تعديله ليكون وسيلة سهلة للقيام إضافة / حذف بالنسبة لك، والقيام ارتكاب يدويا.

لإضافة:

svn status | grep "^\?" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn add

لإزالة:

svn status | grep "^\!" | sed -e 's/! *//' | sed -e 's/ /\\ /g' | xargs svn remove

وأنه يعمل بشكل جيد بالنسبة لي.

وباختصار، لا. لديك لsvn add وsvn delete كل بند.

إذا كنت غير مرتبطة SVN، تقدم بعض أنظمة أخرى تحكم مصدر هذه الميزة. على سبيل المثال، hg addremove زئبقي ل.

تلقائيا إضافة ملفات جديدة:

svn st | sed -rn '/^\?/s/^.{8}(.+)$/\1/p' | xargs -r svn add

تلقائيا إزالة الملفات المحذوفة:

svn st | sed -rn '/^!/s/^.{8}(.+)$/\1/p' | xargs -r svn rm

تفسير

هذا هو في الأساس نسخة مختصرة من لوكا الجواب الذي يجمع بين grep واثنين sed يدعو إلى واحد.

sed

  • -r يستخدم تمديد التعبيرات العادية
  • -n لا يمر من خلال المدخلات
  • المرشحات خطوط بداية مع ? أو ! (/^\?/ و /^!/, على التوالي) ،
  • تخفيضات أول 8 أحرف (التي تحتوي على الأعلام) بعيدا: s/^.{8}//
  • طباعة بقية خط الانتاج: s/(.+)$/\1/p

انظر أيضا: http://www.grymoire.com/Unix/sed.html

xargs

على -r (أو --no-run-if-empty) الخيار xargs (جنو الإصدار) محطات المعالجة عندما لا يكون هناك مدخلات من sed, وبالتالي القضاء على SVN خطأ Not enough arguments provided.

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