سؤال

لدي حالة تطوير مثيرة للاهتمام إلى حد ما.العميل وخادم النشر موجودان داخل جدار الحماية دون الوصول إلى خادم Subversion.لكن المطورين موجودون خارج جدار الحماية ويستطيعون استخدام خادم Subversion.الحل الذي توصلت إليه الآن هو تحديث نسختي المحلية من الكود ثم سحب أحدث الملفات التي تم تحديثها باستخدام UnleashIT.

والسؤال هو كيفية إخراج الملفات المحدثة من Subversion بحيث يمكن نقلها فعليًا عبر جدار الحماية ووضعها على خادم النشر.

لست قلقًا بشأن محاولة تغيير إعداد جدار الحماية أو محاولة اكتشاف طريقة أسهل للوصول إلى خادم Subversion من داخل جدار الحماية.أنا مهتم فقط بطريقة للحصول على تصدير جزئي من مستودع الملفات التي تم تغييرها مؤخرًا.

هل هناك أي اقتراحات أخرى؟

تم العثور على الإجابة:بالإضافة إلى الإجابة التي حددتها كإجابة، وجدت أيضًا ما يلي هنا لأتمكن من القيام بذلك من TortoiseSVN:

من http://svn.haxx.se/tsvn/archive-2006-08/0051.shtml

* select the two revisions
* right-click, "compare revisions"
* select all files in the list
* right-click, choose "export to..." 
هل كانت مفيدة؟

المحلول

لقد وجدت rsync مفيد للغاية لمزامنة أشجار الدليل عبر أنظمة متعددة.إذا كان لديك حق الوصول إلى الخادم الخاص بك من محطة عمل التطوير، فيمكنك التحقق بانتظام من التعليمات البرمجية محليًا وتشغيل rsync، والذي سينقل فقط الملفات التي تم تغييرها إلى الخادم.

(يفترض هذا وجود بيئة تشبه Unix في محطات عمل التطوير لديك.سيعمل Cygwin بشكل جيد.)

cd deploy
svn update
rsync -a . server:webdir/

يبدو سؤالك وكأنك لا تملك في الواقع أي وصول مباشر للشبكة من محطات عمل التطوير الخاصة بك إلى الخادم الخاص بك، وما تبحث عنه حقًا هو طريقة للحصول على Subversion لإخبارك بالملفات التي تم تغييرها. تصدير svn يدعم وسيطة للسماح لك بالتحقق فقط من الملفات التي تغيرت بين مراجعات معينة.من مساعدة svn:

  -r [--revision] arg      : ARG (some commands also take ARG1:ARG2 range)
                             A revision argument can be one of:
                                NUMBER       revision number
                                '{' DATE '}' revision at start of the date
                                'HEAD'       latest in repository
                                'BASE'       base rev of item's working copy
                                'COMMITTED'  last commit at or before BASE
                                'PREV'       revision just before COMMITTED

ستحتاج إلى تتبع آخر مراجعة قمت بنسخها إلى الخادم.بافتراض أنها مراجعة SVN xxxx:

svn export -r xxxx:HEAD http://svn/

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

لن يتعامل هذا مع الملفات المحذوفة، الأمر الذي قد يمثل مشكلة في بعض البيئات.

نصائح أخرى

svn export لا يقبل نطاق المراجعة، جربه.

الحل المحتمل هو الحصول على قائمة الملفات التي تم تغييرها باستخدام:

svn diff --summarize -rXXX http://svn/...

ومن ثم تصدير كل واحد منهم.

لذلك إذا فهمت بشكل صحيح ...

لنفترض أن لديك مستودعًا يبدو كما يلي:

/
|+-DIR1
|   |- FILEa
|   |- FILEb
|+-DIR2
|   |- FILEc
|   |- FILEd
|- FILEe
|- FILEf

ولنفترض أنك قمت بتحديث الملفات FILEa, FILEc, ، و FILEf وألزمهم مرة أخرى بالمستودع.ثم ما تريد تصديره من المستودع هو هيكل يبدو كما يلي:

/
|+-DIR1
|   |- FILEa
|+-DIR2
|   |- FILEc
|- FILEf

هل هذا صحيح؟

يبدو أن خطافات Subversion لديها الكثير من الوعود.لكن كوني غير مطلع نسبيًا على كيفية كتابة الخطاف، كيف يمكنني سحب الملفات التي تم الالتزام بها وإرسالها إلى بروتوكول نقل الملفات (FTP) في مكان ما مع الحفاظ على بنية الدليل؟

إذا تمكنت من القيام بذلك، فيمكن لشخص ما داخل جدار الحماية سحب الملفات إلى خادم النشر وسنكون جاهزين للمضي قدمًا.

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

ليس الحل الأمثل لأنه يعمل من حيث المستودع وليس الملفات الفردية.

أنت فقط تريد أن يتمكن الأشخاص الذين يقفون خلف جدار الحماية من الوصول إلى أحدث الملفات المخصصة لـ Subversion، أليس كذلك؟

هل يمكنك كتابة البرنامج النصي هوك svn يستخدم طريقة ما (ربما scp أو ftp) لإرسال الملفات إلى الموقع البعيد في وقت الالتزام بها؟

إذا قمت بوضع علامة على المراجعات، فقد يساعد ذلك جيثب svn-diff-تصدير

لا تقدم معلومات حول ما هو مسموح به من خلال جدار الحماية.أنا لست على دراية بـ UnleashIT.

أعتقد أنه يمكن أن يكون لديك برنامج نصي يقوم بالتصدير من SVN إلى مجلد على خادم SVN.يقوم البرنامج النصي بعد ذلك بضغط الملفات المصدرة.يمكنك بعد ذلك نقل ملف ZIP بالطريقة التي تريدها واستخراجه إلى خادم النشر.

هل يدعم TortoiseSVN الخوادم الوكيلة حتى تتمكن من استخدام أحد تلك الخوادم من جانب العميل؟

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