كيف يمكنني الحصول على بوابة لمتابعة روابط الرمزية?
سؤال
أفضل سيكون قذيفة النصي الذي يستبدل روابط الرمزية مع نسخ ، أو هل هناك طريقة أخرى أقول بوابة لمتابعة روابط الرمزية?
PS:وأنا أعلم أنها ليست آمنة جدا ، أريد فقط أن تفعل ذلك في بضع حالات محددة.
المحلول
ملاحظة: هذه النصيحة هي الآن خارج مؤرخة كما في تعليق منذ جيت 1.6.1.بوابة اعتادت أن تتصرف بهذه الطريقة و لم يعد.
بوابة افتراضيا محاولات لتخزين روابط الرمزية بدلا من اتباع لهم (على الاكتناز ، و عموما ما يريده الناس).
ومع ذلك, أنا بطريق الخطأ تمكنت من الحصول لإضافة ملفات إلى أبعد من الارتباط الرمزي عند الارتباط الرمزي هو الدليل.
I. e.:
/foo/
/foo/baz
/bar/foo --> /foo
/bar/foo/baz
عن طريق القيام
git add /bar/foo/baz
يبدو أن العمل عندما حاولت ذلك.هذا السلوك كان ذلك غير مرغوب فيه من قبل لي في ذلك الوقت, لذلك لا أستطيع أن أعطيك معلومات أبعد من ذلك.
نصائح أخرى
ماذا فعلت إضافة إلى الحصول على الملفات داخل والرمزي في بوابة (لم استخدم الارتباط الرمزي ولكن):
sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY
هل هذا الأمر في بوابة تمكنت الدليل. TARGETDIRECTORY
لابد من خلق قبل SOURCEDIRECTORY
هي التي شنت في ذلك.
أنه يعمل بشكل جيد على لينكس ، ولكن ليس على OS X!هذه الخدعة ساعدني التخريب أيضا.أنا استخدامها لتشمل الملفات من حساب دروببوإكس ، حيث webdesigner هل له/لها الأشياء.
لماذا لا إنشاء روابط الرمزية العكس ؟ يعني بدلا من ربط من بوابة مستودع إلى دليل التطبيق فقط رابط العكس.
على سبيل المثال, دعونا نقول أنا إنشاء تطبيق مثبت في ~/application
الذي يحتاج إلى ملف التكوين config.conf
:
- إضافة
config.conf
إلى Git ، على سبيل المثال ،~/repos/application/config.conf
. - ثم إنشاء والرمزي من
~/application
عن طريق تشغيلln -s ~/repos/application/config.conf
.
هذا النهج قد لا تعمل دائما ، لكنها عملت بشكل جيد بالنسبة لي حتى الآن.
استخدام وصلات الصلب بدلا من ذلك.وهذا يختلف من لينة (رمزية) الرابط.جميع البرامج ، بما في ذلك git
علاج الملف باسم ملف منتظم.لاحظ أن محتويات يمكن تعديلها عن طريق تغيير إما المصدر أو الوجهة.
على ماك (قبل 10.13 سييرا عالية)
إذا كان لديك بالفعل بوابة كسكودي المثبتة ، تثبيت hardlink.إنه المجهري أداة لإنشاء ارتباطات ثابتة.
إنشاء ارتباط ثابت ، ببساطة:
hln source destination
ماك سييرا عالية التحديث
هل أبل دعم نظام الملفات الدليل الثابت الروابط ؟
الدليل الثابت الروابط غير معتمدة من قبل شركة آبل نظام الملفات.كل دليل من الصعب الروابط المحولة إلى روابط رمزية أو الأسماء المستعارة عند التحويل من HFS+ إلى APFS حجم الأشكال على ماك.
اتبع https://github.com/selkhateeb/hardlink/issues/31 المستقبل البدائل.
على لينكس و يونكس الأخرى النكهات
على ln
القيادة يمكن أن تجعل من الصعب الروابط:
ln source destination
على ويندوز (Vista, 7, 8, ...)
اقترح شخص ما استخدام mklink إنشاء تقاطع على ويندوز, ولكن أنا لم تكن قد حاولت ذلك:
mklink /j "source" "destination"
هذا هو قبل ارتكاب هوك الذي يحل محل الارتباط الرمزي النقط في المؤشر ، مع مضمون هذه روابط الرمزية.
ضع هذا في .git/hooks/pre-commit
, و جعله قابل للتنفيذ:
#!/bin/sh
# (replace "find ." with "find ./<path>" below, to work with only specific paths)
# (these lines are really all one line, on multiple lines for clarity)
# ...find symlinks which do not dereference to directories...
find . -type l -exec test '!' -d {} ';' -print -exec sh -c \
# ...remove the symlink blob, and add the content diff, to the index/cache
'git rm --cached "$1"; diff -au /dev/null "$1" | git apply --cached -p1 -' \
# ...and call out to "sh".
"process_links_to_nondir" {} ';'
# the end
ملاحظات
نحن نستخدم POSIX متوافقة مع وظائف قدر الإمكان ؛ ومع ذلك ، diff -a
لا POSIX متوافقة ، ربما من بين أمور أخرى.
قد يكون هناك بعض أخطاء/أخطاء في هذا القانون ، على الرغم من أنه تم اختبار إلى حد ما.
أنا استخدامها لإضافة ملفات تتجاوز روابط الرمزية لبعض الوقت الآن.كان هذا العمل على ما يرام ، دون اتخاذ أي ترتيبات خاصة.منذ تحديث بوابة 1.6.1 هذا لا يعمل أي أكثر من ذلك.
كنت قد تكون قادرة على التحول إلى بوابة 1.6.0 لجعل هذا العمل.أتمنى أن النسخة المقبلة من بوابة لديهم العلم git-add
مما يتيح له متابعة روابط الرمزية مرة أخرى.
لقد تعبت من كل الحل هنا إما أن عفا عليها الزمن أو التي تتطلب الجذر ، لذلك لقد قمت LD_PRELOAD الحل القائم على (لينكس فقط).
عليه خطاطيف في بوابة الداخلية ، تجاوز هذا الارتباط الرمزي?' وظيفة ، مما يسمح روابط الرمزية أن يعامل على محتوياتها.افتراضي جميع الروابط خارج الريبو هي inlined;راجع الرابط لمزيد من التفاصيل.
مع بوابة 2.3.2+ (Q1 2015) ، وهناك حالة أخرى حيث سوف Git لا اتبع الارتباط الرمزي بعد الآن:انظر ارتكاب e0d201b قبل Junio ج Hamano (gitster
) (الرئيسية بوابة معيل)
apply
:لا تلمس ملف وراء ارتباط رمزي
لأن بوابة المسارات الروابط رمزية رمزية الروابط المسار الذي لديه ارتباط رمزي في الرائد جزء (مثلا ،
path/to/dir/file
, حيثpath/to/dir
هو ارتباط رمزي إلى مكان آخر ، سواء كان ذلك داخل أو خارج العمل شجرة) يمكن أن تظهر أبدا في التصحيح يصح أن ينطبق إلا نفس التصحيح الأولى يزيل الارتباط الرمزي للسماح دليل على أن تنشأ هناك.الكشف عن رفض مثل هذا التصحيح.
وبالمثل ، عند إدخال يخلق ارتباط رمزي
path/to/dir
ثم يقوم بإنشاء ملفpath/to/dir/file
, نحن بحاجة إلى العلم أنها خطأ في الواقع دون خلقpath/to/dir
الارتباط الرمزي في نظام الملفات.بدلا من ذلك, في أي رقعة في مدخلات أن يترك الطريق (أيعدم الحذف) في النتيجة ، نحن تحقق من كل الرائدة مسارات ضد الناتجة الشجرة أن التصحيح من شأنه أن يخلق من خلال فحص جميع بقع في المدخلات ومن ثم الهدف من تطبيق التصحيح (أي مؤشر أو شجرة العمل).
بهذه الطريقة:
- ألحق الأذى أو خطأ لإضافة ارتباط رمزي
path/to/dir
و ملفpath/to/dir/file
في نفس الوقت ،- في حين يسمح صالح التصحيح الذي يزيل رمزي
link path/to/dir
ثم يضيف ملفpath/to/dir/file
.
وهذا يعني في هذه الحالة رسالة الخطأ لن يكون عام واحد مثل "%s: patch does not apply"
, لكن أكثر واحدة محددة:
affected file '%s' is beyond a symbolic link
هممم ، mount --bind
لا يبدو أن العمل على داروين.
لا أحد يملك حيلة ؟
[تحرير]
حسنا, لقد وجدت الإجابة على نظام التشغيل Mac OS X هو جعل hardlink.إلا أن هذا API يتم كشفها عن طريق ln
, لذلك لديك لاستخدام الخاص بك البرنامج الصغير للقيام بذلك.هنا هو ارتباط إلى هذا البرنامج:
إنشاء الدليل الثابت الروابط في نظام التشغيل Mac OS X
استمتع!
على MacOS
(عندي موهافي/ 10.14, git
النسخة 2.7.1), استخدام bindfs
.
brew install bindfs
cd /path/to/git_controlled_dir
mkdir local_copy_dir
bindfs <source_dir> local_copy_dir
كان ألمح من خلال تعليقات أخرى ، ولكن ليس من الواضح المقدمة في إجابات أخرى.نأمل أن هذا يحفظ شخص بعض الوقت.
أنا باستخدام بوابة 1.5.4.3 وانها التالية مرت الارتباط الرمزي إذا كان لديه مائل زائدة.E. g.
# Adds the symlink itself
$ git add symlink
# Follows symlink and adds the denoted directory's contents
$ git add symlink/
التحويل من روابط الرمزية يمكن أن تكون مفيدة.الرابط في بوابة المجلد بدلا من الارتباط الرمزي من قبل البرنامج النصي.