سؤال

هل من الممكن أن يكون لديك مستودعين git في دليل واحد؟لا أعتقد ذلك، لكن أعتقد أنني سأسأل.في الأساس، أرغب في التحقق من ملفات تكوين الدليل الرئيسي (على سبيل المثال..emacs) والتي يجب أن تكون مشتركة عبر جميع الأجهزة التي أعمل عليها، ولكن لديها مستودع ثانٍ للملفات المحلية (على سبيل المثال..emacs.local)، والذي يحتوي على تكوينات خاصة بالجهاز.الطريقة الوحيدة التي يمكنني التفكير بها للقيام بذلك هي الحصول على التكوين المحلي في دليل فرعي وتجاهل هذا الدليل الفرعي من مستودع git الرئيسي.هل هناك أي أفكار أخرى؟

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

المحلول

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

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

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

نصائح أخرى

وهذه المادة يغطي هذا جيدا نسبيا:

https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown

وأساسا إذا كنت تعمل من سطر الأوامر هذا هو أبسط مما كنت قد يتبادر إلى ذهنك. افترض أنك تريد إعادة الشراء 2 بوابة:

.gitone
.gittwo

هل يمكن إقامتها مثل ذلك:

git init .
mv .git .gitone
git init .
mv .git .gittwo

هل يمكن إضافة ملف وارتكابها الى واحد فقط مثل ذلك:

git --git-dir=.gitone add test.txt
git --git-dir=.gitone commit -m "Test"

وهكذا الخيارات لبوابة تأتي أولا، ثم الأمر، ثم خيارات الأمر بوابة ل. هل يمكن بسهولة يكفي الاسم المستعار أمر بوابة مثل:

#!/bin/sh
alias gitone='git --git-dir=.gitone'
alias gittwo='git --git-dir=.gittwo'

وهكذا يمكنك ارتكاب واحدة أو أخرى مع أقل قليلا الكتابة، مثل gitone commit -m "blah".

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

إذا كنت تفضل أدوات واجهة المستخدم الرسومية مثل تورتويز جت كنت قد أيضا بعض التحديات. هل يمكن كتابة سيناريو صغير تسمية .gitone أو .gittwo ل. بوابة مؤقتا حتى يتم استيفاء افتراضات هذه الأدوات ".

وإلقاء نظرة على بوابة حدة ثانويه .

<اقتباس فقرة>   

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

وRichiH كتب أداة تسمى vcsh حيث أداة لإدارة dotfiles باستخدام اتفاقيات إعادة الشراء العارية وهمية بوابة لوضع المزيد من دليل عمل واحد في $ HOME. لا علاقة لها AFAIK CSH.

ولكن، إذا لم دينا أدلة متعددة، بديلا للبوابة-الوحدات الفرعية (التي هي ألم في أفضل الظروف وهذا الاستخدام سبيل المثال ليست أفضل من الظروف) هو <وأ href = "HTTP: // gitslave .sf.net "يختلط =" noreferrer "> gitslave حيث يترك العبد اتفاقيات إعادة الشراء سحبه على طرف فرع في جميع الأوقات ولا يتطلب عملية من ثلاث خطوات لإحداث تغيير في الريبو فرعية ( الخروج على فرع الصحيح، وجعل وارتكاب التغيير، ثم انتقل إلى superproject وارتكاب حدة ثانويه الجديد ارتكاب).

ومن الممكن باستخدام GIT_DIR متغير ولكن لديه الكثير من المحاذير إذا كنت لا تعرف ما تقومون به.

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

طريقتي المفضلة هي استخدام الريبو في مجلد فرعي، واستخدام الروابط الرمزية المتكررة:

git clone repo1
cd somerepo
git clone repo2
cd repo2
./build

أين ال 'الريبو/بناء'-يبدو الملف كما يلي:

#!/bin/bash 
SELF_PATH="$(dirname "$(readlink -f "$0")" )"  # get current dir 
cd .. && git stash && git clean -f -d ''       # remove previous symlinks
cp -sR "$SELF_PATH"/* ../.                     # create recursive symlinks in root

حذر:لا تستخدم "git add."

الخيار الآخر هو وضعها في مجلدات منفصلة وإنشاء روابط ثابتة رمزية من مجلد إلى آخر.

على سبيل المثال، إذا كانت هناك مستودعات:

  1. ريبو1/مجلد أ
  2. ريبو 1/مجلد ب

و:

  1. ريبو2/مجلدC

يمكنك ربط المجلدات FolderA و FolderB من Repo1 إلى Repo2.بالنسبة لنظام التشغيل Windows، سيكون الأمر الذي سيتم تشغيله على Repo1 هو:

User@Repo1$ mklink /J FullPath/Repo2/FolderA FullPath/Repo1/FolderA
User@Repo1$ mklink /J FullPath/Repo2/FolderB FullPath/Repo1/FolderB
User@Repo1$ printf "/FolderA/*\n/FolderB/*\n" >> .gitignore

بالنسبة للملفات الموجودة في المستودعات الرئيسية، ستحتاج إلى ربط كل منها، وإضافتها أيضًا إلى المستودع .gitignore لتجنب الضوضاء، إلا إذا كنت ترغب في ذلك.

تنويه: هذا ليس الدعاية. أنا مطور مكتبة المقدمة.

ولقد خلق تمديد بوابة للتعامل مع الحالات التي كنت تريد خلط مستودعات متعددة في مجلد واحد. الاستفادة من ليب هو، لتتبع مستودعات والصراعات الملف. يمكنك العثور عليها في جيثب . هناك أيضا 2 المثال مستودعات لمحاولة الخروج منها.

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