سؤال

كيف يمكنني إضافة دليل فارغ (لا يحتوي على ملفات) إلى مستودع Git؟

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

المحلول

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

# Ignore everything in this directory
*
# Except this file
!.gitignore

إذًا لن يتعين عليك الحصول على الطلب بالطريقة الصحيحة التي يتعين عليك القيام بها في m104 حل.

وهذا يعطي أيضًا فائدة أن الملفات الموجودة في هذا الدليل لن تظهر على أنها "غير متعقبة" عندما تقوم بحالة git.

تحضير @GreenAsJadeتعليق مستمر:

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

نصائح أخرى

لا يمكنك.انظر الأسئلة الشائعة حول جيت.

في الوقت الحالي ، يسمح تصميم فهرس GIT (منطقة التدريج) فقط بإدراج الملفات ، ولا أحد مؤهل بما يكفي لإجراء التغيير للسماح بالدلالة الفارغة على هذا الموقف لعلاقته.

تتم إضافة الدلائل تلقائيًا عند إضافة ملفات بداخلها.أي أن الدلائل لا يجب إضافتها أبدًا إلى المستودع ، ولا يتم تتبعها بمفردها.

تستطيع أن تقول "git add <dir>"وسيضيف ملفات هناك.

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

قم بإنشاء ملف فارغ يسمى .gitkeep في الدليل، وإضافة ذلك.

يمكنك دائمًا وضع ملف README في الدليل مع شرح سبب رغبتك في هذا الدليل، وإلا فهو فارغ، في المستودع.

touch .keep

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

وبدلا من ذلك، كما ذكر في آخر إجابة, ، يمكن أن يحتوي الدليل على وصفي README أو README.md ملف بدلاً من.

بالطبع يتطلب هذا ألا يؤدي وجود الملف إلى تعطل تطبيقك.

لماذا نحتاج إلى المجلدات ذات الإصدارات الفارغة

اهم الاشياء اولا:

دليل فارغ لا يمكن أن يكون جزءًا من شجرة ضمن نظام إصدار Git.

ببساطة لن يتم تتبعها.ولكن هناك سيناريوهات يمكن أن يكون فيها "إصدار" الدلائل الفارغة ذا معنى، على سبيل المثال:

  • السقالات أ بنية المجلد المحددة مسبقا, وجعله متاحًا لكل مستخدم/مساهم في المستودع؛أو، كحالة متخصصة مما سبق، إنشاء مجلد لـ ملفات مؤقتة, ، مثل أ cache/ أو logs/ الدلائل، حيث نريد توفير المجلد ولكن .gitignore محتوياته
  • المتعلقة بما سبق، بعض المشاريع لن تعمل بدون بعض المجلدات (والذي غالبًا ما يكون إشارة إلى مشروع سيئ التصميم، ولكنه سيناريو متكرر في العالم الحقيقي وربما تكون هناك، على سبيل المثال، مشاكل في الأذونات يجب معالجتها).

بعض الحلول المقترحة

يقترح العديد من المستخدمين:

  1. وضع أ README ملف أو ملف آخر يحتوي على بعض المحتوى لجعل الدليل غير فارغ، أو
  2. خلق شيء .gitignore ملف بنوع من "المنطق العكسي" (أي.لتضمين جميع الملفات) والتي، في النهاية، تخدم نفس الغرض من الطريقة رقم 1.

بينما كلا الحلين يعملان بالتأكيد أجدها غير متوافقة مع النهج الهادف لإصدار Git.

  • لماذا من المفترض أن تضع ملفات زائفة أو ملفات README ربما لا تريدها حقًا في مشروعك؟
  • لماذا الاستخدام .gitignore لفعل شيء(حفظ files) وهذا هو عكس ما هو المقصود منه (باستثناء الملفات)، على الرغم من أنه من الممكن؟

نهج .gitkeep

استخدم فارغ ملف يسمى .gitkeep من أجل فرض وجود المجلد في نظام الإصدار.

على الرغم من أنه قد لا يبدو فرقًا كبيرًا:

  • يمكنك استخدام ملف يحتوي على أعزب الغرض من الاحتفاظ بالمجلد.لا تضع هناك أي معلومات لا تريد وضعها.

    على سبيل المثال، يجب عليك استخدام المستندات التمهيدية مثل المستندات التمهيدية التي تحتوي على معلومات مفيدة، وليس كذريعة للاحتفاظ بالمجلد.

    يعد الفصل بين الاهتمامات أمرًا جيدًا دائمًا، ولا يزال بإمكانك إضافة ملف .gitignore لتجاهل الملفات غير المرغوب فيها.

  • تسميتها .gitkeep يجعلها واضحة ومباشرة جدًا من اسم الملف نفسه (وأيضًا للمطورين الآخرين, ، وهو أمر جيد لمشروع مشترك وأحد الأغراض الأساسية لمستودع Git) وهو هذا الملف

    • ملف لا علاقة له بالكود (بسبب النقطة البادئة والاسم)
    • ملف مرتبط بشكل واضح بـ Git
    • الغرض منه (يحفظ) منصوص عليه بشكل واضح ومتسق ومتعارض لغويًا في معناه يتجاهل

تبني

لقد رأيت .gitkeep النهج الذي اعتمدته أطر مهمة جدًا مثل لارافيل, الزاوي-CLI.

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

find . -type d -empty -exec touch {}/.gitignore \;

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

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

ال روبي على القضبان طريقة إنشاء مجلد السجل:

mkdir log && touch log/.gitkeep && git add log/.gitkeep

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

يمكن الاحتفاظ بملفات السجل عن طريق الإصدار،

echo log/dev.log >> .gitignore

ولكن ربما كنت تعرف ذلك.

لا يتتبع Git الدلائل الفارغة.انظر الأسئلة الشائعة حول جيت لمزيد من التوضيح.الحل المقترح هو وضع .gitignore الملف في الدليل الفارغ.أنا لا أحب هذا الحل، لأن .gitignore "مخفي" بواسطة اتفاقية Unix.كما لا يوجد تفسير لسبب كون الدلائل فارغة.

أقترح وضع ملف README في الدليل الفارغ لشرح سبب كون الدليل فارغًا وسبب ضرورة تتبعه في Git.مع وجود ملف README في مكانه، فيما يتعلق بـ Git، لم يعد الدليل فارغًا.

السؤال الحقيقي هو لماذا تحتاج إلى الدليل الفارغ في git؟عادةً ما يكون لديك نوع من البرامج النصية للإنشاء التي يمكنها إنشاء الدليل الفارغ قبل الترجمة/التشغيل.إذا لم يكن الأمر كذلك، اصنع واحدة.هذا حل أفضل بكثير من وضع أدلة فارغة في git.

إذن لديك سبب وراء حاجتك إلى دليل فارغ في git.ضع هذا السبب في ملف README.بهذه الطريقة يعرف المطورون الآخرون (وأنت المستقبلي) سبب ضرورة وجود الدليل الفارغ هناك.ستعرف أيضًا أنه يمكنك إزالة الدليل الفارغ عندما يتم حل المشكلة التي تتطلب الدليل الفارغ.


لسرد كل دليل فارغ استخدم الأمر التالي:

find -name .git -prune -o -type d -empty -print

لإنشاء عناصر نائبة لملفات README في كل دليل فارغ:

find -name .git -prune -o -type d -empty -exec sh -c \
  "echo this directory needs to be empty because reasons > {}/README.emptydir" \;

لتجاهل كل شيء في الدليل باستثناء ملف README، ضع الأسطر التالية في ملف .gitignore:

path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir

بدلا من ذلك، يمكنك فقط استبعاد كل ملف README من التجاهل:

path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir

لسرد كل ملف README بعد إنشائه بالفعل:

find -name README.emptydir

تحذير:هذا القرص لا يعمل حقًا كما اتضح. نأسف للإزعاج.

المشاركة الأصلية أدناه:

لقد وجدت حلاً أثناء اللعب باستخدام Git Internals!

  1. لنفترض أنك في المستودع الخاص بك.
  2. أنشئ دليلك الفارغ:

    $ mkdir path/to/empty-folder
    
  3. قم بإضافته إلى الفهرس باستخدام أمر السباكة والشجرة الفارغة شا-1:

    $ git update-index --index-info
    040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904    path/to/empty-folder
    

    اكتب الأمر ثم أدخل السطر الثاني.يضعط يدخل وثم كنترول + د لإنهاء الإدخال الخاص بك.ملحوظة:التنسيق هو وضع [فضاء] يكتب [مسافة] شا-1هاش [فاتورة غير مدفوعة] المسار (علامة التبويب مهمة، وتنسيق الإجابة لا يحافظ عليها).

  4. هذا كل شيء!المجلد الفارغ الخاص بك موجود في ملف Index.كل ما عليك فعله هو الالتزام.

هذا الحل قصير ويبدو أنه يعمل بشكل جيد (راجع التعديل!)، ولكن ليس من السهل أن نتذكر ...

يمكن العثور على الشجرة الفارغة SHA-1 عن طريق إنشاء مستودع Git فارغ جديد، cd فيه وإصداره git write-tree, ، الذي يقوم بإخراج الشجرة الفارغة SHA-1.

يحرر:

لقد كنت أستخدم هذا الحل منذ أن وجدته.يبدو أنه يعمل بنفس طريقة إنشاء وحدة فرعية، باستثناء أنه لا توجد وحدة محددة في أي مكان.وهذا يؤدي إلى أخطاء عند الإصدار git submodule init|update.المشكلة هي git update-index يعيد كتابة 040000 tree جزء في 160000 commit.

علاوة على ذلك، فإن أي ملف يتم وضعه تحت هذا المسار لن يلاحظه Git أبدًا، لأنه يعتقد أنه ينتمي إلى مستودع آخر.وهذا أمر سيئ لأنه يمكن التغاضي عنه بسهولة!

ومع ذلك، إذا لم تكن تستخدم بالفعل (ولن تستخدم) أيًا من وحدات Git الفرعية في مستودعك، وسيظل المجلد "الفارغ" فارغًا أو إذا كنت تريد أن يعرف Git بوجوده ويتجاهل محتواه، فيمكنك استخدام هذا القرص.يتطلب اتباع الطريقة المعتادة مع الوحدات الفرعية خطوات أكثر من هذا التعديل.

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

mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed

في هذا المثال، يمكنك التحقق من رابط رمزي (معطل) للدليل بحيث يمكنك الوصول إليه بدون البادئة ".generated" (ولكن هذا اختياري).

ln -sf .generated/bin bin
git add bin

عندما تريد تنظيف شجرة المصدر الخاصة بك، يمكنك فقط:

rm -rf .generated ## this should be in a "clean" script or in a makefile

إذا اتبعت الطريقة المقترحة غالبًا للتحقق من مجلد فارغ تقريبًا، فستواجه صعوبة بسيطة تتمثل في حذف المحتويات دون حذف ملف ".gitignore" أيضًا.

يمكنك تجاهل كافة الملفات التي تم إنشاؤها عن طريق إضافة ما يلي إلى الجذر الخاص بك .gitignore:

.generated

لنفترض أنك بحاجة إلى دليل فارغ اسمه com.tmp :

$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp

بمعنى آخر، تحتاج إلى إضافة ملف .gitignore إلى الفهرس قبل أن تتمكن من إخبار Git بتجاهله (وكل شيء آخر في الدليل الفارغ).

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

ولهذا السبب قررت أن أكتب أداة مفتوحة المصدر يمكنها إدارة إنشاء/حذف هذه الملفات النائبة تلقائيًا.إنه مكتوب لمنصة .NET ويعمل ضمن Mono (.NET لنظام التشغيل Linux) وWindows.

مجرد إلقاء نظرة على: http://code.google.com/p/markemptydirs

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

هناك صخب هناك في مكان ما قرأته مرة واحدة.

وجدت يكرر:أدلة فارغة.., ، ولكن ربما هناك واحد آخر.

عليك أن تتعايش مع الحلول... لسوء الحظ.

تعجبني إجابات @Artur79 و@mjs لذلك كنت أستخدم مزيجًا من الاثنين وجعلته معيارًا لمشاريعنا.

find . -type d -empty -exec touch {}/.gitkeep \;

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

تحرير للحصول على حل أفضل

لذلك، نظرًا لأن معظم المطورين لدينا لديهم بالفعل نملة بعد تثبيته، كان أول شيء فكرت فيه هو تجميع ملف إنشاء Ant لإنجاز ذلك بشكل مستقل عن النظام الأساسي.لا يزال من الممكن العثور على هذا هنا

لكن, ، اعتقدت لاحقًا أنه سيكون من الأفضل تحويل هذا إلى أمر أداة مساعدة صغيرة، لذلك قمت بإعادة إنشائه باستخدام Python ونشرته على PyPI هنا.يمكنك تثبيته ببساطة عن طريق تشغيل:

pip3 install gitkeep2

سوف يسمح لك بإنشاء وإزالة .gitkeep الملفات بشكل متكرر، وسيسمح لك أيضًا بإضافة رسائل إليها لكي يفهم زملائك سبب أهمية هذه الدلائل.هذا الجزء الأخير هو مكافأة.اعتقدت أنه سيكون من الجميل إذا .gitkeep يمكن أن تكون الملفات ذاتية التوثيق.

$ gitkeep --help
Usage: gitkeep [OPTIONS] PATH

  Add a .gitkeep file to a directory in order to push them into a Git repo
  even if they're empty.

  Read more about why this is necessary at: https://git.wiki.kernel.org/inde
  x.php/Git_FAQ#Can_I_add_empty_directories.3F

Options:
  -r, --recursive     Add or remove the .gitkeep files recursively for all
                      sub-directories in the specified path.
  -l, --let-go        Remove the .gitkeep files from the specified path.
  -e, --empty         Create empty .gitkeep files. This will ignore any
                      message provided
  -m, --message TEXT  A message to be included in the .gitkeep file, ideally
                      used to explain why it's important to push the specified
                      directory to source control even if it's empty.
  -v, --verbose       Print out everything.
  --help              Show this message and exit.

أتمنى أن تجدها مفيدة.

عندما تقوم بإضافة أ .gitignore الملف، إذا كنت ستضع أي قدر من المحتوى فيه (الذي تريد أن يتجاهله Git)، فقد ترغب في إضافة سطر واحد بعلامة النجمة فقط * للتأكد من عدم إضافة المحتوى الذي تم تجاهله عن طريق الخطأ.

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

ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'

لقد علقت هذا في Rakefile لسهولة الوصول إليه.

حل جيمي فلورنوي يعمل بشكل رائع.هنا نسخة محسنة قليلاً للحفاظ على .htaccess :

# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess

باستخدام هذا الحل، يمكنك إنشاء مجلد فارغ، على سبيل المثال /log, /tmp أو /cache وسيبقى المجلد فارغًا.

أقوم دائمًا بإنشاء وظيفة للتحقق من بنية المجلد المطلوب وإنشائه لي داخل المشروع.يؤدي هذا إلى التغلب على هذه المشكلة حيث يتم الاحتفاظ بالمجلدات الفارغة في Git بواسطة الوكيل.

function check_page_custom_folder_structure () {
    if (!is_dir(TEMPLATEPATH."/page-customs"))
        mkdir(TEMPLATEPATH."/page-customs");    
    if (!is_dir(TEMPLATEPATH."/page-customs/css"))
        mkdir(TEMPLATEPATH."/page-customs/css");
    if (!is_dir(TEMPLATEPATH."/page-customs/js"))
        mkdir(TEMPLATEPATH."/page-customs/js");
}

هذا موجود في PHP، لكنني متأكد من أن معظم اللغات تدعم نفس الوظيفة، ولأن إنشاء المجلدات يتم الاعتناء به بواسطة التطبيق، فستكون المجلدات موجودة دائمًا.

إليك اختراق، لكن من المضحك أنه يعمل (Git 2.2.1).مشابه لما اقترحه @Teka، ولكن من الأسهل تذكره:

  • إضافة وحدة فرعية إلى أي مستودع (git submodule add path_to_repo)
  • سيؤدي هذا إلى إضافة مجلد وملف .submodules.ارتكاب التغيير.
  • يمسح .submodules ملف وتنفيذ التغيير.

الآن، لديك دليل يتم إنشاؤه عند سحب الالتزام.لكن الشيء المثير للاهتمام هو أنك إذا نظرت إلى محتوى كائن الشجرة في هذا الملف، فستحصل على:

مميت:ليس اسم كائن صالح B64338B90B4209263B50244D18278C0999867193

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

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

يمكن تسمية الملف ويحتوي على أي شيء تريده، ولكن معظم الأشخاص يستخدمون ملفًا فارغًا مسمى .gitkeep (على الرغم من أن بعض الأشخاص يفضلون VCS-agnostic .keep).

البادئة . يضع علامة عليه كملف مخفي.

فكرة أخرى هي إضافة أ README ملف يشرح الغرض الذي سيتم استخدام الدليل من أجله.

لا يمكنك.هذا قرار تصميم متعمد من قبل مشرفي Git.في الأساس، الغرض من نظام إدارة كود المصدر مثل Git هو إدارة كود المصدر والأدلة الفارغة ليست كود مصدر.غالبًا ما يتم وصف Git أيضًا على أنه متتبع للمحتوى، ومرة ​​أخرى، الدلائل الفارغة ليست محتوى (على العكس تمامًا، في الواقع)، لذلك لا يتم تعقبها.

إذا كنت ترغب في إضافة مجلد يضم الكثير من البيانات المؤقتة في أدلة دلالية متعددة، فإن إحدى الطرق هي إضافة شيء مثل هذا إلى جذرك .gitignore...

/app/data/**/*.* !/app/data/**/*.md

بعد ذلك، يمكنك تنفيذ ملفات README.md وصفية (أو ملفات فارغة، لا يهم، طالما يمكنك استهدافها بشكل فريد كما هو الحال مع *.md في هذه الحالة) في كل دليل للتأكد من بقاء جميع الدلائل جزءًا من الريبو ولكن يتم تجاهل الملفات (ذات الامتدادات).الحدود: .غير مسموح به في أسماء الدليل!

يمكنك ملء كل هذه الدلائل بملفات xml/images أو أي شيء آخر وإضافة المزيد من الدلائل ضمنها /app/data/ بمرور الوقت مع تطور احتياجات التخزين لتطبيقك (مع ملفات README.md التي تعمل على النسخ في وصف لما هو مخصص لكل دليل تخزين بالضبط).

ليست هناك حاجة لمزيد من التغيير الخاص بك .gitignore أو اللامركزية عن طريق إنشاء جديد .gitignore لكل دليل جديد.ربما لا يكون الحل الأذكى ولكنه مقتضب gitignore-حكيم ويعمل دائمًا بالنسبة لي.لطيفة وبسيطة!;)

enter image description here

إضافة خيار آخر إلى المعركة.

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

والصيغة كما ذكرنا هي:

*
!.gitignore

الآن، إذا كنت تريد طريقة للقيام بذلك في سطر الأوامر، بضربة واحدة، بينما داخل الدليل الذي تريد إضافته، يمكنك تنفيذ:

$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore

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

#!/bin/bash

dir=''

if [ "$1" != "" ]; then
    dir="$1/"
fi

echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore

باستخدام هذا، يمكنك إما تنفيذه من داخل الدليل الذي ترغب في إضافته، أو الإشارة إلى الدليل باعتباره المعلمة الأولى والوحيدة:

$ ignore_dir ./some/directory

هناك خيار آخر (ردًا على تعليق @GreenAsJade)، إذا كنت تريد تتبع مجلد فارغ يمكن تحتوي على ملفات متعقبة في المستقبل، ولكنها ستكون فارغة في الوقت الحالي، يمكنك حذفها * من .gitignore الملف، والتحقق الذي - التي في.في الأساس، كل ما يقوله الملف هو "لا تتجاهل أنا"، ولكن بخلاف ذلك، يكون الدليل فارغًا ومتتبعًا.

لك .gitignore سيبدو الملف كالتالي:

!.gitignore

هذا كل شيء، تحقق من ذلك، وسيكون لديك دليل فارغ، ولكن متتبع، يمكنك تتبع الملفات فيه في وقت لاحق.

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

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

قم أولاً بإنشاء الدليل المطلوب:

mkdir empty

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

ln -s .this.directory empty/.keep

لتجاهل الملفات الموجودة في هذا الدليل، يمكنك إضافتها إلى الجذر الخاص بك .gitignore:

echo "/empty" >> .gitignore

لإضافة الملف الذي تم تجاهله، استخدم معلمة لفرضه:

git add -f empty/.keep

بعد الالتزام، يكون لديك رابط رمزي معطل في الفهرس الخاص بك ويقوم git بإنشاء الدليل.يتمتع الرابط المعطل ببعض المزايا، لأنه ليس ملفًا عاديًا ويشير إلى عدم وجود ملف عادي.حتى أنه يناسب الجزء من السؤال "(الذي لا يحتوي على ملفات)"، ليس بالقصد بل بالمعنى، على ما أعتقد:

find empty -type f

تظهر هذه الأوامر نتيجة فارغة، حيث لا توجد ملفات في هذا الدليل.لذا فإن معظم التطبيقات، التي تحصل على جميع الملفات في الدليل، لا ترى عادةً هذا الرابط، على الأقل إذا كانت "ملف موجود" أو "قابل للقراءة".حتى بعض البرامج النصية لن تجد أي ملفات هناك:

$ php -r "var_export(glob('empty/.*'));"
array (
  0 => 'empty/.',
  1 => 'empty/..',
)

لكنني أوصي بشدة باستخدام هذا الحل فقط في ظروف خاصة، مكتوبة بشكل جيد README في دليل فارغ عادة ما يكون الحل الأفضل.(ولا أعرف ما إذا كان هذا يعمل مع نظام ملفات Windows ...)

يمكنك حفظ هذا الرمز باسم create_readme.php وتشغيل ملف بي أتش بي رمز من الدليل الجذر لمشروع Git الخاص بك.

> php create_readme.php

سيضيف ملفات README إلى كافة الدلائل الفارغة بحيث تتم إضافة هذه الدلائل بعد ذلك إلى الفهرس.

<?php
    $path = realpath('.');
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),       RecursiveIteratorIterator::SELF_FIRST);
    foreach($objects as $name => $object){
        if ( is_dir($name) && ! is_empty_folder($name) ){
            echo "$name\n" ;
            exec("touch ".$name."/"."README");
        }
    }

    function is_empty_folder($folder) {
        $files = opendir($folder);
        while ($file = readdir($files)) {
            if ($file != '.' && $file != '..')
                return true; // Not empty
            }
        }
?>

ثم افعل

git commit -m "message"
git push

في بعض الأحيان يكون لدي مستودعات تحتوي على مجلدات لن تحتوي إلا على ملفات تعتبر "محتوى" - أي أنها ليست ملفات أهتم بإصدارها، وبالتالي لا ينبغي الالتزام بها أبدًا.باستخدام ملف Git.gitignore، يمكنك تجاهل الأدلة بأكملها.ولكن هناك أوقات يكون فيها وجود المجلد في الريبو مفيدًا.إليك حلاً ممتازًا لتحقيق هذه الحاجة.

ما قمت به في الماضي هو وضع ملف .gitignore في جذر الريبو الخاص بي، ثم استبعاد المجلد، كما يلي:

/app/some-folder-to-exclude
/another-folder-to-exclude/*

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

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

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

*
!.gitignore

السطر الأول (*) يخبر Git بتجاهل كل شيء في هذا الدليل.السطر الثاني يخبر Git بعدم تجاهل ملف .gitignore.يمكنك حشو هذا الملف في كل مجلد فارغ تريد إضافته إلى المستودع.

طريقة سهلة للقيام بذلك هي عن طريق إضافة .gitkeep الملف إلى الدليل الذي ترغب في الاحتفاظ به (حاليًا) فارغًا.

انظر الى هذا إجابة قوات العمليات الخاصة لمزيد من المعلومات - وهو ما يفسر أيضًا سبب اعتقاد بعض الأشخاص أن التقليد المتنافس لإضافة ملف .gitignore (كما هو مذكور في العديد من الإجابات هنا) مربك.

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