كيف يمكنك تنظيم عدة مخازن git ، بحيث كل منهم احتياطيا معا ؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

مع SVN, كان واحد كبير مستودع ظللت على خادم ، و التحقق من عدد قليل من الأجهزة.هذا كان جيد جدا نظام النسخ الاحتياطي ، سمح لي العمل بسهولة على أي من الآلات.يمكنني الخروج مشروع معين ، الالتزام و تحديثه 'master' المشروع أو أن الخروج الشيء كله.

الآن لدي مجموعة من بوابة مستودعات لمختلف مشاريع عدة منها على جيثب.أنا أيضا لدي إس مستودع ذكرت المستوردة عبر git-svn الأمر..

أساسا أنا أحب وجود كل رمز (ليس فقط المشاريع ، ولكن عشوائية قصاصات من البرامج النصية ، بعض الأشياء مثل سيرتي الذاتية المقالات التي كتبتها المواقع جعلت وهلم جرا) في واحد كبير مستودع أنا يمكن بسهولة استنساخ على الأجهزة البعيدة ، أو الذاكرة العصي/أقراص صلبة النسخ الاحتياطي.

المشكلة هي انه منذ خاص مستودع git لا تسمح التحقق من مجلد معين (أن أتمكن من دفع إلى جيثب كمشروع منفصل ، ولكن قد تظهر التغييرات في كل من الماجستير-الريبو ، sub-repos)

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

حاليا لدي مجلد من بوابة اتفاقيات إعادة الشراء (على سبيل المثال ، ~/code_projects/proj1/.بوابة/ ~/code_projects/proj2/.بوابة/), و بعد القيام تغييرات proj1 أفعل git push github, ثم نسخ الملفات إلى ~/الوثائق/القانون/python/المشاريع/proj1/ و لا واحد ارتكاب (بدلا من العديد منها في الفرد اتفاقيات إعادة الشراء).ثم القيام git push backupdrive1, git push mymemorystick الخ

إذن السؤال:كيف التعليمات البرمجية الشخصية والمشاريع مع بوابة مستودعات والاحتفاظ بها مزامنة و المدعومة ؟

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

المحلول

أود أن بقوة ننصح بعدم وضع البيانات لا علاقة لها في Git.النفقات العامة من إنشاء مستودعات جديدة جدا منخفضة ، وهذا هو ميزة هذا يجعل من الممكن للحفاظ على مختلفة الأنساب منفصلة تماما.

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

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

/repos/a.git
/repos/b.git
/repos/c.git

بمجرد عدد قليل من الاتفاقيات أنشئت يصبح تافها تطبيق العمليات الإدارية (النسخ الاحتياطي ، التعبئة ، نشر ويب) إلى كاملة الهرمي الذي يقدم دورا ليس تماما تختلف "متجانسة" إس مستودعات.العمل مع هذه المستودعات أيضا يصبح تشبه إلى حد ما SVN سير العمل, بالإضافة إلى أن واحد يمكن استخدام المحلية يرتكب فروع:

svn checkout   --> git clone
svn update     --> git pull
svn commit     --> git push

يمكنك الحصول على العديد من أجهزة التحكم عن بعد في كل عمل استنساخ, لسهولة مزامنة بين أطراف متعددة:

$ cd ~/dev
$ git clone /repos/foo.git       # or the one from github, ...
$ cd foo
$ git remote add github ...
$ git remote add memorystick ...

ثم يمكنك جلب/سحب كل من "مصادر" العمل والالتزام محليا ، ومن ثم دفع ("النسخ الاحتياطي") إلى كل من هذه أجهزة التحكم عن بعد عند على استعداد مع شيء من هذا القبيل (لاحظ كيف أن يدفع نفس يرتكب والتاريخ إلى كل من أجهزة التحكم عن بعد!):

$ for remote in origin github memorystick; do git push $remote; done

أسهل طريقة لتحويل العمل القائمة مستودع ~/dev/foo في مثل هذه العارية مستودع هو الأرجح:

$ cd ~/dev
$ git clone --bare foo /repos/foo.git
$ mv foo foo.old
$ git clone /repos/foo.git

وهو في الغالب ما يعادل svn import- ولكن لا رمي القائمة "المحلية" التاريخ بعيدا.

ملاحظة: الوحدات الفرعية هي آلية تشمل مشترك ذات الصلة الأنساب ، لذلك أنا في الواقع لا تنظر لهم الأداة المناسبة المشكلة التي تحاول حلها.

نصائح أخرى

أريد أن أضيف إلى داميان الجواب حيث يوصي:

$ for remote in origin github memorystick; do git push $remote; done

يمكنك إعداد خاص بعد دفع إلى كل فرد الحقيقي أجهزة التحكم عن بعد مع 1 الأمر ، لقد وجدت في ذلك http://marc.info/?l=git&m=116231242118202&w=2:

لذا ل "بوابة الدفع" (حيث يجعل بمعنى أن دفع نفس الفروع عدة مرات) ، يمكنك القيام به في الواقع ما أقوم به:

  • .بوابة/config يحتوي على:

    [remote "all"]
    url = master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
    url = login.osdl.org:linux-2.6.git
    
  • و الآن git push all master دفع "سيد" فرع سواء
    تلك مستودعات النائية.

يمكنك أيضا حفظ نفسك كتابة عناوين مرتين باستخدام سيتدخل:

[url "<actual url base>"]
    insteadOf = <other url base>

وأنا أيضا غريبة عن طرق مقترحة للتعامل مع هذا و سوف تصف الإعداد الحالية التي تستخدم (مع SVN).لقد خلقت أساسا مستودع يحتوي على ميني نظام الملفات الهرمي بما في ذلك بلده بن lib dirs.هناك النصي في جذر هذه الشجرة التي من شأنها إعداد البيئة الخاصة بك لإضافة هذه بن, lib, الخ...أخرى dirs السليم متغيرات البيئة.لذلك الدليل الجذر أساسا تبدو مثل:

./bin/            # prepended to $PATH
./lib/            # prepended to $LD_LIBRARY_PATH
./lib/python/     # prepended to $PYTHONPATH
./setup_env.bash  # sets up the environment

الآن داخل /bin /lib هناك مشاريع متعددة ، وما يقابلها من المكتبات.أعرف أن هذا ليس معيار المشروع ، ولكن من السهل جدا لشخص آخر في المجموعة أن الخروج الريبو تشغيل 'setup_env.باش' script ويكون معظم ما يصل إلى أحدث الإصدارات من جميع المشاريع محليا في الخروج.انهم لا داعي للقلق حول تثبيت/تحديث /usr/bin أو /usr/lib و يحفظه بسيطة متعددة المخارج جدا مترجمة البيئة في الخروج.شخص يمكن أيضا فقط rm كامل مستودع و لا تقلق بشأن إلغاء تثبيت أي برامج.

هذا يسير على ما يرام بالنسبة لنا ، وأنا لست متأكدا مما إذا كان سوف يغير ذلك.المشكلة مع ذلك هو أن هناك العديد من المشاريع في هذا واحد كبير مستودع.هل هناك بوابة/Hg/bzr الطريقة القياسية خلق بيئة مثل هذا الخروج المشاريع في مستودعات خاصة بهم?

انا لم اجرب التعشيش مخازن git بعد لأنني لم تصل إلى حالة حيث كنت في حاجة إليها.كما قرأت على #بوابة قناة بوابة يبدو أن الحصول على الخلط من جانب تداخل مستودعات ، أيأنت تحاول بوابة التهيئة داخل git.الطريقة الوحيدة لإدارة متداخلة بوابة الهيكل هو إما استخدام git-submodule أو الروبوت repo الأداة المساعدة.

كما أن النسخ الاحتياطي المسؤولية أنت تصف أقول مندوب ذلك...بالنسبة لي أنا عادة وضع "الأصل" مستودع لكل مشروع على محرك أقراص شبكة اتصال في العمل احتياطيا بانتظام قبل ذلك-التكنولوجية خلال استراتيجية احتياطية من خيار.أنها بسيطة و لا داعي للقلق حول هذا الموضوع.;)

ماذا عن استخدام السيد إدارة متعددة بوابة اتفاقيات إعادة الشراء في آن واحد:

السيد(1) الأمر يمكن الخروج أو تحديث أو تنفيذ إجراءات أخرى على مجموعة من المستودعات كما لو كانت واحدة جنبا إلى جنب respository.ذلك يدعم أي مزيج من التخريب, بوابة, cvs, الزئبقي, bzr, darcs, cvs, vcsh ، الأحفوري وصدق مستودعات ودعم آخر مراجعة أنظمة التحكم يمكن بسهولة أن تضاف.[...]

هو شكلي للغاية عبر بسيطة shell scripting.بعض الأمثلة من الأشياء التي يمكن القيام به ما يلي:

[...]

  • عند تحديث بوابة مستودع سحب من upstreams و دمج الاثنين معا.
  • تشغيل عدة مستودع التحديثات في موازاة ذلك ، إلى حد كبير في تسريع عملية التحديث.
  • تذكر الإجراءات التي فشلت بسبب جهاز كمبيوتر محمول يجري حاليا ، بحيث يمكن إعادة عندما يتعلق الأمر مرة أخرى على الانترنت.

هناك طريقة أخرى عن وجود متداخلة بوابة repos, ولكن هذا لا يحل المشكلة أنك بعد.لا يزال ، للآخرين الذين يبحثون عن الحل كان:

في أعلى مستوى بوابة الريبو فقط إخفاء المجلد .gitignore تحتوي متداخلة بوابة الريبو.هذا يجعل من السهل أن يكون اثنين من منفصلة (ولكن متداخلة!) بوابة اتفاقيات إعادة الشراء.

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