installation تحميل - كيفية إنشاء مستودع Git عن بعد من مستودع محلي؟




شرح 'git' (6)

تحتاج إلى إنشاء دليل على خادم بعيد. ثم استخدم أمر "git init" لتعيينه كمستودع. يجب القيام بذلك لكل مشروع جديد لديك (كل مجلد جديد)

بافتراض أنك قمت بالفعل بإعداد واستخدام git باستخدام مفاتيح ssh ، كتبت نص برمجي صغير ، والذي عند تنفيذه من دليل عمل سوف يقوم بإعداد جهاز تحكم عن بعد وتهيئة الدليل على هيئة git repo. وبالطبع ، سيكون عليك تحرير البرنامج النصي (مرة واحدة فقط) لإخباره بالخادم ومسار الجذر لجميع المستودعات.

تحقق هنا - https://github.com/skbobade/ocgi

لدي مستودع Git محلي. أرغب في إتاحتها على جهاز خادم يعمل عن بعد باستخدام ssh. كيف أقوم بهذا العمل؟


عادة يمكنك إعداد git repo من خلال استخدام أمر init

git init

في قضيتك ، هناك بالفعل الريبو على جهاز تحكم عن بعد المتاحة. تعتمد على كيفية الوصول إلى الريبو عن بعد (مع اسم المستخدم داخل عنوان url أو مفتاح ssh الذي يتعامل مع التحقق) ، استخدم فقط أمر clone :

git clone [email protected][my.url.com]:[git-repo-name].git

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


المستودع عن بعد هو مستودع بشكل عام - مستودع Git لا يحتوي على دليل عملي. نظرًا لأنه يتم استخدام المستودع كنقطة تعاون فقط ، فلا يوجد سبب لوجود اللقطات المسحوبة على القرص ؛ انها مجرد بيانات Git. في أبسط المصطلحات ، فإن المستودع المجرد هو محتويات دليل .git للمشروع الخاص بك ولا شيء آخر.

يمكنك عمل مستودع git gre مع الكود التالي:

$ git clone --bare /path/to/project project.git

هناك خيار واحد لوجود مستودع git بعيد يستخدم بروتوكول SSH:

بروتوكول نقل عام لـ Git عندما يكون الاستضافة الذاتية على SSH. وذلك لأن وصول SSH إلى الخوادم تم إعداده بالفعل في معظم الأماكن - وإذا لم يكن كذلك ، فمن السهل القيام به. SSH هو بروتوكول شبكة مصادق عليه ، لأنه في كل مكان ، فإنه من السهل بشكل عام إعداده واستخدامه.

لاستنساخ مستودع Git عبر SSH ، يمكنك تحديد عنوان ssh:// URL مثل:

$ git clone ssh://[[email protected]]server/project.git

أو يمكنك استخدام صيغة أقصر مثل scp لبروتوكول SSH:

$ git clone [[email protected]]server:project.git

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

الايجابيات

الايجابيات لاستخدام SSH كثيرة. أولاً ، من السهل نسبيًا إعداد SSH - شواهد SSH شائعة ، والعديد من مدراء الشبكات لديهم خبرة معهم ، ويتم إعداد العديد من توزيعات OS معهم أو لديهم أدوات لإدارتها. بعد ذلك ، يعد الوصول عبر SSH آمنًا - حيث يتم تشفير جميع عمليات نقل البيانات والمصادقة عليها. وأخيرًا ، مثل HTTPS و Git والبروتوكولات المحلية ، يتميز SSH بالكفاءة ، مما يجعل البيانات مضغوطة قدر الإمكان قبل نقلها.

السلبيات

يتمثل الجانب السلبي لـ SSH في أنه لا يدعم الوصول المجهول لمستودع Git الخاص بك. إذا كنت تستخدم SSH ، فيجب أن يكون لدى الأشخاص وصول SSH إلى جهازك ، حتى إذا كان قابلاً للقراءة فقط ، الأمر الذي لا يجعل SSH مؤاتياً لمشاريع مفتوحة المصدر قد يرغب الناس ببساطة في استنساخ المستودع لفحصها. إذا كنت تستخدمها فقط داخل شبكة الشركة الخاصة بك ، فقد يكون SSH هو البروتوكول الوحيد الذي تحتاج إلى التعامل معه. إذا كنت تريد السماح بالوصول المجهول للقراءة فقط إلى المشاريع الخاصة بك وترغب أيضًا في استخدام SSH ، فسيتعين عليك إعداد SSH بحيث يمكنك الدفع بدلاً من ذلك ولكن هناك شيء آخر قد يجلبه الآخرون.

لمزيد من المعلومات ، راجع المرجع: Git on the Server - The Protocols


أعتقد أنك قمت بعمل مستودع git init --bare على الجانب البعيد ، git init --bare ، أضف الجانب البعيد git init --bare الدفع / السحب للمستودع المحلي ( git remote add origin URL ) ، ومن ثم يمكنك أن تقول محليًا git push origin master . الآن يمكن لأي مستودع آخر pull من مستودع بعيد.


ملاحظة للأشخاص الذين قاموا بإنشاء النسخة المحلية على Windows ويريدون إنشاء مستودع بعيد عن بعد على نظام Unix-line ، حيث تحصل الملفات النصية على نهايات LF على استنساخات أخرى بواسطة المطورين على أنظمة Unix-like ، لكن نهايات CRLF على Windows.

إذا قمت بإنشاء مستودع ويندوز الخاص بك قبل إعداد ترجمة نهاية السطر ، فستواجه مشكلة. الإعداد الافتراضي لـ Git ليس ترجمة ، لذا فإن مجموعة العمل الخاصة بك تستخدم CRLF ولكن المستودع (أي البيانات المخزنة تحت .git) قام بحفظ الملفات كـ CRLF أيضًا.

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

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

لست متأكدا إذا كان هناك طريقة سهلة لمعرفة ما هي نهايات الأسطر الموجودة في مستودع ويندوز الخاص بك - أعتقد أنك تستطيع اختبار ذلك عن طريق تعيين core.autocrlf = false ومن ثم الاستنساخ (إذا كان الريبو له نهايات LF ، LF أيضا).


الإجابات القصيرة

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

حذف فرع بعيد:

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin :<branch>          # Git versions older than 1.7.0

حذف فرع محلي:

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force delete un-merged branches

حذف فرع تتبع عن بعد محلي:

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete tracking branches
git fetch <remote> -p      # Shorter

الجواب طويل: هناك 3 فروع مختلفة لحذفها!

عندما تتعامل مع حذف الفروع محليًا وعن بعد ، ضع في اعتبارك أن هناك 3 فروع مختلفة متضمنة :

  1. الفرع المحلي X
  2. فرع المنشأ البعيد X
  3. الفرع المحلي من فرع التتبع عن بُعد origin/X الذي يتتبع الفرع البعيد X

الملصق الأصلي المستخدم

git branch -rd origin/bugfix

التي لم تحذف إلا origin/bugfix فرع التتبع المحلي عن بعد origin/bugfix ، وليس origin/bugfix البعيدة الفعلي في origin .

لحذف هذا الفرع الفعلي البعيد ، تحتاج

git push origin --delete bugfix

تفاصيل اضافية

تصف الأقسام التالية التفاصيل الإضافية التي يجب مراعاتها عند حذف فروع التتبع عن بعد والبعيد.

يؤدي الضغط على حذف الفروع البعيدة إلى حذف فروع التتبع عن بعد

لاحظ أن حذف الفرع البعيد X من سطر الأوامر باستخدام git push سيؤدي أيضًا إلى حذف origin/X فرع التتبع المحلي عن بُعد origin/X ، لذلك ليس من الضروري تقليم فرع التتبع عن بعد git fetch --prune مع git fetch --prune أو git fetch -p ، على الرغم من أنه لن يضر إذا فعلت ذلك على أي حال.

يمكنك التحقق من أنه تم أيضًا حذف origin/X فرع التتبع عن بُعد origin/X عن طريق تشغيل ما يلي:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

تشذيب فرع فرع التتبع المحلي البعيدة المنشأ / X

إذا لم تقم بحذف فرعك عن بعد X من سطر الأوامر (كما في الأعلى) ، فستظل ريبوك المحلي الخاص بك يحتوي على فرع (بعيد الآن) تابع للفرع البعيد origin/X يمكن أن يحدث هذا إذا قمت بحذف فرع بعيد مباشرة من خلال واجهة الويب الخاصة بـ GitHub ، على سبيل المثال.

وهناك طريقة نموذجية لإزالة هذه الفروع القديمة للتتبع عن بعد (حيث أن الإصدار Git 1.6.6) هو ببساطة تشغيل git fetch مع - --prune أو أقصر -p . لاحظ أن هذا يزيل جميع فروع التتبع المحلي البالية لأي فروع بعيدة لم تعد موجودة على جهاز التحكم عن بعد :

git fetch origin --prune
git fetch origin -p # Shorter

هنا هو الاقتباس ذات الصلة من ملاحظات الإصدار 1.6.6 (التأكيد لي):

"git fetch" المستفادة - كل و - خيارات متعددة ، لتشغيل الجلب من العديد من المستودعات ، و --prune الخيار لإزالة فروع التتبع عن بعد التي لا معنى لها. هذه تجعل "git تحديث عن بعد" و "git البعيد تقليم" أقل ضرورية (لا توجد خطة لإزالة "التحديث عن بعد" ولا "تقليم البعيد" ، على الرغم من).

بديل لفرز التقليم الأوتوماتيكي لفروع التتبع البعيدة

بدلاً من تشذيب فروع التتبع المحلية البالية من خلال git fetch -p ، يمكنك تجنب إجراء عملية الشبكة الإضافية عن طريق إزالة الفرع (الفروع) يدويًا باستخدام --remote أو - -r :

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

أنظر أيضا





git installation