গিট সংগ্রহস্থলে কীভাবে আমি একটি খালি ডিরেক্টরি (এতে কোনও ফাইল নেই) যুক্ত করতে পারি?
গিট সংগ্রহস্থলে কীভাবে আমি একটি খালি ডিরেক্টরি (এতে কোনও ফাইল নেই) যুক্ত করতে পারি?
উত্তর:
ডিরেক্টরি থাকার (প্রায়) খালি রাখার অন্য উপায় (সংগ্রহশালায়) হ'ল .gitignore
সেই ডিরেক্টরিটির ভিতরে একটি ফাইল তৈরি করা যাতে এই চারটি লাইন থাকে:
# Ignore everything in this directory
*
# Except this file
!.gitignore
তারপর আপনি সঠিক ভাবে আপনি m104 এর যা করতে হবে যে পেতে হবে না সমাধান ।
এটি সেই সুবিধাটি দেয় যে সেই ডিরেক্টরিতে থাকা ফাইলগুলি যখন আপনি গিট স্ট্যাটাস করবেন তখন "চিহ্নবিহীন" হিসাবে প্রদর্শিত হবে না।
মেকিং @GreenAsJade এর মন্তব্যে ক্রমাগত:
আমি মনে করি এটি লক্ষণীয় যে এই সমাধানটি যথাযথভাবে সেই প্রশ্নের জন্য যা জিজ্ঞাসা করেছিল, কিন্তু সম্ভবত এই প্রশ্নটির দিকে চেয়ে বহু মানুষ যা খুঁজছিল তা নয়। এই সমাধানটি গ্যারান্টি দেয় যে ডিরেক্টরি খালি থাকবে। এটি বলে যে "আমি এখানে সত্যিকার অর্থে ফাইলগুলি চেক ইন করতে চাই না"। "এখানে চেক ইন করার জন্য আমার কাছে কোনও ফাইল নেই, তবে এর বিপরীতে, তবে এখানে আমার ডিরেক্টরি দরকার, ফাইলগুলি পরে আসতে পারে"।
README
ভিতরে যে ডকুমেন্টেশন রেখেছি তা লিখি .gitignore
(মন্তব্য হিসাবে)।
আপনি পারবেন না। দেখুন গীত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী ।
বর্তমানে গিট ইনডেক্সের নকশা (স্টেজিং এরিয়া) কেবলমাত্র ফাইলগুলি তালিকাভুক্ত করার অনুমতি দেয় এবং খালি ডিরেক্টরিগুলি পরিবর্তনের জন্য যথেষ্ট সক্ষম কেউই এ পরিস্থিতির প্রতিকারের জন্য যথেষ্ট যত্ন নেয়নি।
ডিরেক্টরিগুলির মধ্যে ফাইল যুক্ত করার পরে স্বয়ংক্রিয়ভাবে যুক্ত হয়। এটি হ'ল ডিরেক্টরিগুলি কখনই ভান্ডারে যুক্ত করতে হয় না এবং সেগুলি নিজেই ট্র্যাক করা যায় না।
আপনি "
git add <dir>
" বলতে পারেন এবং এটি সেখানে ফাইল যুক্ত করবে।যদি আপনার সত্যিকারের চেকআউটগুলিতে একটি ডিরেক্টরি থাকতে হয় তবে আপনার এটিতে একটি ফাইল তৈরি করা উচিত। .gitignore এই উদ্দেশ্যে ভাল কাজ করে; আপনি এটিকে খালি রেখে দিতে পারেন, বা ডিরেক্টরিতে প্রদর্শিত ফাইলগুলির নাম পূরণ করতে পারেন।
git mv
কারণ গিট অভিযোগ করবে যে নতুন ডিরেক্টরি সংস্করণ নিয়ন্ত্রণের অধীনে নেই
.gitignore
কৌতুক একটি ঘন উত্তর, এবং সন্তুষ্ট অনেক চাহিদা। তবে এটা কি সম্ভব Git একটি ট্র্যাক করতে সত্যিই খালি , ডিরেক্টরির আমার উত্তর দেখুন
.gitkeep
এই উদ্দেশ্যে খালি ফাইল ব্যবহার করে ।
.gitkeep
ডিরেক্টরিতে ডাকা একটি খালি ফাইল তৈরি করুন এবং এটি যুক্ত করুন।
.keep
।
.gitkeep
গিট দ্বারা নির্ধারিত হয়নি এবং লোকেরা দ্বিতীয়বার এর অর্থ অনুমান করতে চলেছে, যা তাদের গুগল অনুসন্ধানে নিয়ে যাবে, যা তাদের এখানে নিয়ে যাবে। .git
উপসর্গ সম্মেলন ফাইল ও ডিরেক্টরিগুলি জন্য সংরক্ষিত করা উচিত যে গীত নিজেই ব্যবহার করে।
.git
প্রিফিক্স কনভেনশনটি সংরক্ষণ করা উচিত ..." কেন? গিট কি এই রিজার্ভেশনটির অনুরোধ করে?
README
বা ABOUT
ফাইল ঠিক তত ভাল বা আরও ভাল হবে। পরবর্তী লোকের জন্য একটি নোট রেখে, ঠিক যেমন আমরা URL এর আগে করতাম।
আপনি কেন রেপোস্টরিতে ডিরেক্টরিটি অন্যথায় খালি রাখতে চান তা ব্যাখ্যা করার জন্য আপনি ডিরেক্টরিটিতে একটি README ফাইল সর্বদা রেখে দিতে পারেন।
touch .keep
লিনাক্সে এটি একটি খালি ফাইল তৈরি করে .keep
। এটির মূল্য কী, এই নামটি গিতের কাছে অজ্ঞেয়বাদী, যদিও .gitkeep
গিটের জন্য নির্দিষ্ট। দ্বিতীয়ত, অন্য একজন ব্যবহারকারী যেমন উল্লেখ করেছেন, .git
উপসর্গের কনভেনশনটি গিট নিজেই যে ফাইল এবং ডিরেক্টরি ব্যবহার করে সেগুলির জন্য সংরক্ষণ করা উচিত।
বিকল্পভাবে, অন্য উত্তরে উল্লিখিত হিসাবে , ডিরেক্টরিটিতে পরিবর্তে বর্ণনামূলক README
বা README.md
ফাইল থাকতে পারে ।
অবশ্যই এটির প্রয়োজন রয়েছে যে ফাইলটির উপস্থিতি আপনার অ্যাপ্লিকেশনটি ভঙ্গ করবে না।
.keep
ফাইলটি মুছুন বা কেবল এটি উপেক্ষা করুন। যদি পরিবর্তে ডিরেক্টরিতে থাকা ফাইলগুলি উপেক্ষা করা হয়, তবে এটি সম্পূর্ণ আলাদা a
git clean -nd | sed s/'^Would remove '// | xargs -I{} touch "{}.keep"
সমস্ত চিহ্নবিহীন ফাঁকা ডিরেক্টরিতে এটি করবে।
আগেরটা আগে:
গিট সংস্করণ সিস্টেমের অধীনে একটি খালি ডিরেক্টরি কোনও গাছের অংশ হতে পারে না ।
এটি কেবল ট্র্যাক করা হবে না। তবে এমন পরিস্থিতিতে রয়েছে যেখানে "সংস্করণ" খালি ডিরেক্টরিগুলি অর্থবহ হতে পারে, উদাহরণস্বরূপ:
cache/
বা logs/
ডিরেক্টরি, যেখানে আমরা ফোল্ডারটি সরবরাহ করতে চাই তবে .gitignore
এর সামগ্রীগুলিঅনেক ব্যবহারকারী পরামর্শ:
README
ডিরেক্টরিটি খালি নয়, বা করার জন্য কিছু সামগ্রী সহ একটি ফাইল বা অন্য একটি ফাইল স্থাপন করা.gitignore
এক ধরণের "বিপরীত যুক্তি" দিয়ে ফাইল তৈরি করা (অর্থাত্ সমস্ত ফাইল অন্তর্ভুক্ত করা) যা শেষে, # 1 এর একই উদ্দেশ্যকে পরিবেশন করে।যদিও উভয় সমাধান নিশ্চয় কাজ আমি তাদের গীত ভার্সন করার জন্য একটি অর্থপূর্ণ পদ্ধতির সঙ্গে সঙ্গতিহীন পাবেন।
.gitignore
কোনও জিনিস ( ফাইল রাখার ) কেন ব্যবহার করবেন ?সংস্করণ সিস্টেমে ফোল্ডারের উপস্থিতি জোর করার জন্য ডাকা একটি খালি ফাইল ব্যবহার করুন .gitkeep
।
যদিও এটি এত বড় পার্থক্য মনে হয় না:
আপনি এমন একটি ফাইল ব্যবহার করেন যার ফোল্ডারটি রাখার একক উদ্দেশ্য রয়েছে। আপনি রাখতে চান না এমন কোনও তথ্য আপনি সেখানে রাখেন না।
উদাহরণস্বরূপ, আপনার ফোল্ডারটি রাখার অজুহাত হিসাবে নয়, দরকারী তথ্য সহ README গুলিও ব্যবহার করা উচিত।
উদ্বেগের বিচ্ছেদ সর্বদা একটি ভাল জিনিস এবং আপনি এখনও .gitignore
অযাচিত ফাইলগুলি উপেক্ষা করার জন্য যুক্ত করতে পারেন ।
এটির নামকরণ .gitkeep
ফাইল ফাইল থেকেই এটি খুব স্পষ্ট এবং সোজা হয়ে যায় (এবং অন্যান্য বিকাশকারীদেরও , যা একটি ভাগ প্রকল্পের জন্য ভাল এবং গিট সংগ্রহস্থলের মূল উদ্দেশ্যগুলির মধ্যে একটি) এই ফাইলটি হ'ল
লারাভেল , অ্যাঙ্গুলার-সিএলআই-এর.gitkeep
মতো অত্যন্ত গুরুত্বপূর্ণ ফ্রেমওয়ার্কগুলির দ্বারা গৃহীত দৃষ্টিভঙ্গি আমি দেখেছি ।
.gitkeep
অন্য কোনও গিট-প্রিফিক্সড ফাইলের নামের সাথে প্রতিস্থাপনের জন্য সম্পাদনা করেন তবে আপনি আমার উত্তরটি অর্জন করেন তবে আমি মনে করি এটি সেরা এবং সবচেয়ে তথ্যপূর্ণ উত্তর। কারণ: আমি মনে করি ".git *" গিট নির্ধারিত ফাইলগুলির জন্য সংরক্ষিত হওয়া উচিত, যদিও এটি কেবল নিখুঁত স্থানধারক। আমার প্রথম অনুমান যখন আমি এটি দেখেছিলাম যে উদাহরণস্বরূপ একটি ".গিটকিপ" ফাইলটি স্বয়ংক্রিয়ভাবে উপেক্ষা করা হবে (এটি একটি দুর্দান্ত বৈশিষ্ট্য হবে) তবে এটি ঠিক নয়, তাই না?
অন্যান্য উত্তরে বর্ণিত হিসাবে, গিট তার মঞ্চস্থানের খালি ডিরেক্টরি উপস্থাপন করতে অক্ষম। ( গিট এফএকিউ দেখুন ।) তবে, যদি আপনার উদ্দেশ্যে, যদি কোনও ডিরেক্টরি .gitignore
কেবল একটি ফাইল থাকে তবে ডিরেক্টরিটি যথেষ্ট খালি থাকে তবে আপনি .gitignore
কেবল খালি ডিরেক্টরিতে ফাইলগুলি তৈরি করতে পারেন :
find . -type d -empty -exec touch {}/.gitignore \;
find . -name .git -prune -o -type d -empty -exec touch {}/.gitignore \;
find * -type d -empty -exec touch {}/.gitignore \;
find . -name .DS_Store -exec rm {} \;
এবং তারপরে এই উত্তর থেকে পছন্দসই রূপটি ব্যবহার করা হয়েছিল। এটি শুধুমাত্র সঠিক ফোল্ডারে চালিত করতে ভুলবেন না!
.gitignore
কোনও প্রভাব নেই । আমার মন্তব্যটি একটি ডিরেক্টরি ট্রিতে থাকা ফাইলগুলি সরিয়ে দেওয়ার বিষয়ে , যাতে পতাকাটি প্রয়োগ করা যায়। -empty
find
.DS_Store
-empty
অ্যান্ডি লেস্টার সঠিক, তবে যদি আপনার ডিরেক্টরিটি কেবল খালি হওয়া দরকার, এবং খালি খালি না হয় , তবে আপনি .gitignore
সেখানে একটি খালি ফাইলটি কর্মফল হিসাবে রাখতে পারেন।
অন্যদিকে, এটি একটি বাস্তবায়ন সমস্যা, মৌলিক গিট স্টোরেজ ডিজাইনের সমস্যা নয়। যেমনটি গিট মেলিং তালিকায় বহুবার উল্লেখ করা হয়েছে, এটি কার্যকর না হওয়ার কারণটি হ'ল কেউ এর জন্য কোনও প্যাচ জমা দেওয়ার যথেষ্ট যত্ন নেননি, এটি করা বা করা উচিত নয় তা নয়।
পাগল নেভিগেশন রুবি সৃষ্টি পথ ফোল্ডারের লগ ইন করুন:
mkdir log && touch log/.gitkeep && git add log/.gitkeep
এখন লগ ডিরেক্টরি গাছের মধ্যে অন্তর্ভুক্ত করা হবে। মোতায়েন করার সময় এটি অত্যন্ত কার্যকর, সুতরাং আপনাকে লগ ডিরেক্টরিগুলি তৈরি করার জন্য একটি রুটিন লিখতে হবে না।
লগফাইলগুলি জারি করে বাইরে রাখা যায়,
echo log/dev.log >> .gitignore
কিন্তু আপনি সম্ভবত এটি জানতেন।
গিট খালি ডিরেক্টরিগুলি ট্র্যাক করে না। দেখুন গীত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী আরো ব্যাখ্যার জন্য। প্রস্তাবিত কাজটি হ'ল .gitignore
খালি ডিরেক্টরিতে একটি ফাইল রাখা। আমি সেই সমাধানটি পছন্দ করি না, কারণ এটি .gitignore
ইউনিক্স কনভেনশন দ্বারা "লুকানো"। ডিরেক্টরি কেন খালি তা নিয়েও কোনও ব্যাখ্যা নেই।
ডিরেক্টরিটি খালি কেন এবং গিটে কেন এটি ট্র্যাক করা দরকার তা ব্যাখ্যা করে আমি খালি ডিরেক্টরিতে একটি README ফাইল রাখার পরামর্শ দিই। README ফাইলটি জায়গায় রেখে যতক্ষণ গিট সম্পর্কিত, ডিরেক্টরিটি আর খালি নেই।
আসল প্রশ্নটি হ'ল গিটে আপনার খালি ডিরেক্টরিটি কেন দরকার? সাধারণত আপনার কিছু বিল্ড স্ক্রিপ্ট থাকে যা সংকলন / চালানোর আগে খালি ডিরেক্টরি তৈরি করতে পারে। যদি না হয় তবে একটি তৈরি করুন। গিটের মধ্যে খালি ডিরেক্টরি স্থাপনের চেয়ে এটি একটি আরও ভাল সমাধান।
সুতরাং গিটে আপনার খালি ডিরেক্টরি দরকার হওয়ার কারণ রয়েছে। 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
সতর্কতা: এই ত্বকটি প্রকৃতপক্ষে কার্যকর হয় না যেমন এটি পরিণত হয়। অসুবিধার জন্য দুঃখিত.
নীচে মূল পোস্ট:
গিট ইন্টারনালদের সাথে খেলতে গিয়ে আমি একটি সমাধান খুঁজে পেয়েছি!
আপনার খালি ডিরেক্টরি তৈরি করুন:
$ mkdir path/to/empty-folder
নদীর গভীরতানির্ণয় কমান্ড এবং খালি গাছ SHA-1 ব্যবহার করে সূচীতে এটি যুক্ত করুন :
$ git update-index --index-info
040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 path/to/empty-folder
কমান্ডটি টাইপ করুন এবং তারপরে দ্বিতীয় লাইনে প্রবেশ করুন। আপনার ইনপুটটি শেষ করতে + টিপুন Enterএবং তারপরে Ctrl+ টিপুন D। দ্রষ্টব্য: ফর্ম্যাটটি মোড [SPACE] প্রকারের [SPACE] SHA-1hash [TAB] পাথ (ট্যাবটি গুরুত্বপূর্ণ, উত্তর বিন্যাসটি এটি সংরক্ষণ করে না)।
এটাই! আপনার খালি ফোল্ডারটি আপনার সূচীতে রয়েছে। আপনাকে যা করতে হবে তা হল প্রতিশ্রুতিবদ্ধ।
এই সমাধানটি সংক্ষিপ্ত এবং দৃশ্যত দুর্দান্ত কাজ করে ( সম্পাদনা দেখুন! ) তবে এটি মনে রাখা এত সহজ নয় ...
খালি গাছ SHA-1 একটি নতুন ফাঁকা গিট সংগ্রহশালা তৈরি cd
করে এটিতে ইস্যু করা যায় git write-tree
যা খালি গাছটি SHA-1 কে আউটপুট করে।
সম্পাদনা করুন:
এটি সন্ধান করার পর থেকেই আমি এই সমাধানটি ব্যবহার করছি। এটি কোনও সাবমডিউল তৈরির মতো ঠিক একইভাবে কাজ করে বলে মনে হচ্ছে, কোনও মডিউল কোথাও সংজ্ঞায়িত না করে। এটি প্রদান করার সময় ত্রুটি বাড়ে git submodule init|update
। সমস্যাটি git update-index
এই 040000 tree
অংশটি আবার লিখে দেয় 160000 commit
।
তদুপরি, সেই পথের নীচে স্থাপন করা কোনও ফাইলই কখনও গিতের নজরে আসবে না, কারণ এটি মনে করে যে তারা অন্য কোনও সংগ্রহস্থলের অন্তর্ভুক্ত। এটি সহজেই উপেক্ষা করা যেতে পারে কারণ এটি বাজে!
তবে, যদি আপনি ইতিমধ্যে আপনার ভাণ্ডারে কোনও গিট সাবমডিউল ব্যবহার করেন না (এবং তা করবেন না) এবং "খালি" ফোল্ডারটি খালি থাকবে বা আপনি যদি গিটকে এর অস্তিত্ব সম্পর্কে জানতে চান এবং এর বিষয়বস্তু উপেক্ষা করতে চান তবে আপনি যেতে পারেন এই ত্বক। সাবমোডিয়ুলগুলি সহ স্বাভাবিক পথে যেতে আরও বেশি পদক্ষেপ গ্রহণ করে যা এই টুইটটিকে সামঞ্জস্য করে।
git svn dcommit
এটি কি পছন্দসই ফলাফল দিয়ে সম্ভব ?
ধরা যাক আপনার tmp নামের একটি খালি ডিরেক্টরি দরকার :
$ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp
অন্য কথায়, আপনি গিটকে এড়িয়ে যাওয়ার (এবং খালি ডিরেক্টরিতে থাকা সমস্ত কিছু) বলার আগে আপনাকে সূচীতে .gitignore ফাইল যুক্ত করতে হবে।
echo bla > file
আপনি পাবেন না file: File exists
কারণ >
এটি ইতিমধ্যে উপস্থিত থাকলে ফাইলটি ওভাররাইট করে দেবে বা এটি উপস্থিত না থাকলে একটি নতুন তৈরি করবে।
/bin/sh
সাংস্কৃতিক ধারণা! * যদি "এখানে" থাকে csh
এবং ভেরিয়েবলটি noclobber
সেট করা থাকে তবে আপনি অবশ্যই পাবেন file: File exists
। যদি কেউ "আমি এটি পেয়েছি" বলে, তারা বোকা এবং "না তুমি না" জবাব দেবে না। * c2.com/cgi/wiki? আমেরিকান
সম্ভবত একটি খালি ডিরেক্টরি যুক্ত করা মনে হচ্ছে এটি সর্বনিম্ন প্রতিরোধের পথ হবে কারণ আপনার কাছে এমন স্ক্রিপ্ট রয়েছে যা প্রত্যাশা করে যে ডিরেক্টরিটি বিদ্যমান রয়েছে (সম্ভবত কারণ এটি উত্পাদিত বাইনারিগুলির জন্য লক্ষ্য)। প্রয়োজন অনুসারে ডিরেক্টরি তৈরি করতে আপনার স্ক্রিপ্টগুলি সংশোধন করার জন্য আরেকটি পদ্ধতির প্রয়োজন ।
mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed
এই উদাহরণস্বরূপ, আপনি ডিরেক্টরিটির (ভাঙ্গা) প্রতীকী লিঙ্কটি পরীক্ষা করতে পারেন যাতে আপনি "জেনারেটেড" উপসর্গ ছাড়া এটি অ্যাক্সেস করতে পারেন (তবে এটি optionচ্ছিক)।
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
.generated
ডিরেক্টরিটি প্রাথমিকভাবে উপস্থিত নেই। একবার আপনি আপনার বিল্ডিং করলে তা আর ভাঙা যাবে না।
আমি খালি ডিরেক্টরিগুলি নিয়েও সমস্যার মুখোমুখি হয়েছি। স্থানধারক ফাইলগুলি ব্যবহার করে সমস্যা হ'ল আপনার এগুলি তৈরি করতে হবে এবং মুছে ফেলতে হবে, যদি সেগুলি আর প্রয়োজন না হয় (কারণ পরে সেখানে সাব-ডিরেক্টরি বা ফাইল যুক্ত হয়েছিল big বড় উত্স গাছের সাহায্যে এই স্থানধারক ফাইলগুলি পরিচালনা করা জটিল এবং ত্রুটি হতে পারে can প্রবণ।
এ কারণেই আমি কোনও ওপেন সোর্স সরঞ্জামটি লেখার সিদ্ধান্ত নিয়েছি যা এই ধরনের স্থানধারক ফাইলগুলি স্বয়ংক্রিয়ভাবে তৈরি / মুছতে পারে। এটি .NET প্ল্যাটফর্মের জন্য লেখা এবং মনো (লিনাক্সের জন্য .NET) এবং উইন্ডোজ এর অধীনে চলে।
কেবল একবার দেখুন: http://code.google.com/p/markemptydirs
আমি @ আর্টুর 79৯ এবং @ এমজেএস এর উত্তরগুলি পছন্দ করি তাই আমি উভয়ের সংমিশ্রণটি ব্যবহার করেছি এবং এটি আমাদের প্রকল্পের জন্য একটি মানক করে তুলেছি।
find . -type d -empty -exec touch {}/.gitkeep \;
তবে, আমাদের কয়েকটি বিকাশকারীই ম্যাক বা লিনাক্সে কাজ করেন। উইন্ডোজে প্রচুর পরিশ্রম এবং আমি সেখানে সমাপ্তির জন্য সমতুল্য সহজ ওয়ান-লাইনার খুঁজে পাইনি। কিছু অন্যান্য কারণে সাইগউইন ইনস্টল করার জন্য যথেষ্ট ভাগ্যবান ছিলেন , তবে সাইগউইনকে কেবল এটির জন্য নির্ধারিত করে ওভারকিল মনে হয়েছিল।
আরও ভাল সমাধানের জন্য সম্পাদনা করুন
সুতরাং, যেহেতু আমাদের বেশিরভাগ বিকাশকারী ইতিমধ্যে এন্টি ইনস্টল করে রেখেছেন, আমি প্রথমে যা ভাবলাম তা এন্টি বিল্ড ফাইলটিকে প্ল্যাটফর্মের স্বতন্ত্রভাবে সম্পন্ন করার জন্য একত্রিত করা হয়েছিল। এটি এখনও এখানে পাওয়া যাবে
তবে , আমি পরে, ভেবেছিলাম এটা ভাল হবে একটি ছোট ইউটিলিটি কমান্ড এই করতে তাই আমি পাইথন ব্যবহার করে এটি recreated এবং 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
ফাইল যুক্ত করেন, আপনি যদি এতে কোনও পরিমাণের সামগ্রী রেখে চলেছেন (যে আপনি গিটকে উপেক্ষা করতে চান) আপনি সম্ভবত একটি নক্ষত্রের সাথে একটি লাইন যুক্ত করতে চান যাতে *
আপনি দুর্ঘটনাক্রমে উপেক্ষিত সামগ্রীটি যুক্ত না করেন তা নিশ্চিত করতে পারেন ।
ডিরেক্টরিগুলি ট্র্যাক করার জন্য গিট পাওয়ার কোনও উপায় নেই, সুতরাং আপনি যে ডিরেক্টরিটি গিটকে ট্র্যাক করতে চান সেই ডিরেক্টরিতে কোনও স্থানধারক ফাইল যুক্ত করা একমাত্র সমাধান।
ফাইলটির নামকরণ করা যেতে পারে এবং আপনি যে কোনও কিছু রাখতে পারেন, তবে বেশিরভাগ লোকেরা একটি খালি ফাইল নামেই ব্যবহার করেন .gitkeep
(যদিও কিছু লোকেরা ভিসিএস-অগ্নোস্টিক পছন্দ করেন .keep
)।
উপসৃত .
এটি একটি লুকানো ফাইল হিসাবে চিহ্নিত করে।
আর একটি ধারণা README
হ'ল ডিরেক্টরিটি কী ব্যবহৃত হবে তা ব্যাখ্যা করে একটি ফাইল যুক্ত করা হবে।
উল্লিখিত হিসাবে খালি ডিরেক্টরি যুক্ত করা সম্ভব নয়, তবে এখানে একটি লাইন রয়েছে যা সমস্ত ডিরেক্টরিতে খালি .gitignore ফাইল যুক্ত করে।
ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'
আমি সহজে অ্যাক্সেসের জন্য এটি একটি রেকফাইলে আটকে রেখেছি।
find . -type d -empty -print0 | xargs --null bash -c 'for a; do { echo "*"; echo "!.gitignore"; } >>"$a/.gitignore"; done' --
জেমি ফ্লোরনয়ের সমাধানটি দুর্দান্ত কাজ করে। এখানে রাখার জন্য কিছুটা বর্ধিত সংস্করণ দেওয়া হয়েছে .htaccess
:
# Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess
এই সমাধান আপনি একটি খালি ফোল্ডার, উদাহরণস্বরূপ কমিট করতে পারবেন /log
, /tmp
অথবা /cache
এবং ফোল্ডার খালি থাকতে হবে।
আমি আমার কাঙ্ক্ষিত ফোল্ডার কাঠামোটি যাচাই করতে এবং প্রকল্পের মধ্যে আমার জন্য এটি তৈরি করতে সর্বদা একটি ফাংশন তৈরি করি। খালি ফোল্ডারগুলি প্রক্সি দ্বারা গিটে রাখা হওয়ায় এটি এই সমস্যাটি ঘটাবে।
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");
}
এটি পিএইচপি-তে রয়েছে তবে আমি নিশ্চিত যে বেশিরভাগ ভাষা একই কার্যকারিতা সমর্থন করে এবং যেহেতু অ্যাপলিকেশন দ্বারা ফোল্ডার তৈরির যত্ন নেওয়া হয়, ফোল্ডারগুলি সর্বদা সেখানে থাকবে।
.gitkeep
কনভেনশন অনেক ভালো অভ্যাস।
এখানে একটি হ্যাক, তবে এটি মজাদার যে এটি কাজ করে (গিট ২.২.১) @ টেকা যা পরামর্শ দিয়েছে তার অনুরূপ, তবে মনে রাখা সহজ:
git submodule add path_to_repo
).submodules
। একটি পরিবর্তন প্রতিশ্রুতিবদ্ধ।.submodules
ফাইল মুছুন এবং পরিবর্তন প্রতিশ্রুতিবদ্ধ।এখন, আপনার কাছে একটি ডিরেক্টরি রয়েছে যা প্রতিশ্রুতিবদ্ধতা পরীক্ষা করার পরে তৈরি হয়। তবে একটি আকর্ষণীয় বিষয় হ'ল আপনি যদি এই ফাইলটির ট্রি অবজেক্টের সামগ্রীটি দেখেন তবে আপনি পাবেন:
মারাত্মক: বৈধ অবজেক্টের নাম নয় b64338b90b4209263b50244d18278c0999867193
আমি এটি ব্যবহার করতে উত্সাহিত করব না যদিও এটি গিটের ভবিষ্যতের সংস্করণগুলিতে কাজ করা বন্ধ করে দিতে পারে। যা আপনার সংগ্রহস্থলটিকে দূষিত করে রাখতে পারে।
ইতিমধ্যে অনেকেই এই প্রশ্নের উত্তর দিয়েছেন। এখানে কেবল একটি পাওয়ারশেল সংস্করণ যুক্ত করা হচ্ছে।
ডিরেক্টরিতে সমস্ত খালি ফোল্ডার সন্ধান করুন
সেখানে একটি খালি .gitkeep ফাইল যুক্ত করুন
Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}
আপনি যদি এমন একটি ফোল্ডার যুক্ত করতে চান যা একাধিক শব্দার্থক ডিরেক্টরিতে প্রচুর ক্ষণস্থায়ী ডেটা রাখে, তবে একটি পদ্ধতির মধ্যে রয়েছে আপনার রুটে এই জাতীয় কিছু যুক্ত করা g gitignore ...
/app/data/**/*.*
!/app/data/**/*.md
তারপরে আপনি *.md
ডিরেক্টরিগুলি রেপোর অংশই রয়েছেন তা নিশ্চিত করার জন্য প্রতিটি ডিরেক্টরিতে বর্ণনামূলক README.md ফাইলগুলি (বা ফাঁকা ফাইলগুলি যতক্ষণ না আপনি এই ক্ষেত্রে এর মতো অনন্যভাবে টার্গেট করতে পারেন ) তাতে প্রতিশ্রুতি রাখতে পারেন but ফাইলগুলি (এক্সটেনশন সহ) উপেক্ষা করা হয়। সীমাবদ্ধতা: .
ডিরেক্টরি নামগুলিতে অনুমোদিত নয়!
আপনি এই সমস্ত ডিরেক্টরি এক্সএমএল / চিত্র ফাইল বা যা কিছু দিয়ে পূরণ করতে পারেন এবং এর অধীনে আরও ডিরেক্টরি যুক্ত করতে পারেন /app/data/
আপনার অ্যাপ্লিকেশনটির স্টোরেজটির বিকাশ হওয়ার সাথে সাথে সময়ের সাথে সাথে করতে পারেন (প্রতিটি স্টোরেজ ডিরেক্টরিটি কী জন্য তার বিবরণে পোড়ানোর জন্য README.md ফাইলগুলির সাথে) ঠিক)।
প্রতিটি নতুন ডিরেক্টরিতে .gitignore
নতুন তৈরি করে আপনার বিকেন্দ্রীকরণ বা বিকেন্দ্রীকরণের প্রয়োজন নেই .gitignore
। সম্ভবত বুদ্ধিমান সমাধান নয় তবে গিটিগনোর বুদ্ধিমান এবং সর্বদা আমার জন্য কাজ করে। সুন্দর এবং সহজ! ;)
এটি করার একটি সহজ উপায় আপনি .gitkeep
যে ডিরেক্টরিটি (বর্তমানে) খালি রাখতে চান তাতে একটি ফাইল যুক্ত করা।
আরও তথ্যের জন্য এই সফটওয়্যারটির উত্তরটি দেখুন - এটিও ব্যাখ্যা করে যে কিছু লোক কেন একটি .gitignore ফাইল যুক্ত করার প্রতিযোগিতামূলক সম্মেলন খুঁজে পান (এখানে অনেক উত্তরে বলা আছে) বিভ্রান্তিকর।
লড়াইয়ে আরও একটি বিকল্প যুক্ত করা হচ্ছে।
ধরে নিই 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 দ্বারা একটি মন্তব্যের প্রতিক্রিয়ায়), যদি আপনি একটি খালি ফোল্ডার যে ট্র্যাক করতে চান মে ভবিষ্যতে ট্র্যাক ফাইল থাকতে, কিন্তু এখন জন্য খালি থাকবে, ommit করতে *
থেকে .gitignore
ফাইল, এবং চেক যে হবে। মূলত, সমস্ত ফাইল বলছে " আমাকে উপেক্ষা করবেন না ", তবে অন্যথায় ডিরেক্টরিটি খালি এবং ট্র্যাক।
আপনার .gitignore
ফাইলটি দেখতে এমন হবে:
!.gitignore
এটি এটি, এটি পরীক্ষা করে দেখুন এবং আপনার একটি ফাঁকা, তবুও ট্র্যাকড ডিরেক্টরি রয়েছে যা আপনি পরে কোনও সময়ে ফাইলগুলি ট্র্যাক করতে পারেন।
ফাইলটিতে একটি লাইন রাখার পরামর্শ দেওয়ার কারণটি এটি .gitignore
উদ্দেশ্য দেয় । অন্যথায়, লাইনের নীচে থাকা কেউ এটি সরিয়ে ফেলার চিন্তা করতে পারে। আপনি লাইনের উপরে কোনও মন্তব্য রাখলে এটি সাহায্য করতে পারে।
কখনও কখনও আপনাকে খারাপ লিখিত গ্রন্থাগার বা সফ্টওয়্যার নিয়ে কাজ করতে হয়, যার জন্য "সত্যিকারের" খালি এবং বিদ্যমান ডিরেক্টরি প্রয়োজন। একটি সরল রাখা .gitignore
বা .keep
এগুলি ভেঙে একটি বাগ তৈরি করতে পারে। নিম্নলিখিতগুলি এই ক্ষেত্রে সহায়তা করতে পারে তবে কোনও গ্যারান্টি নেই ...
প্রথমে প্রয়োজনীয় ডিরেক্টরি তৈরি করুন:
mkdir empty
তারপরে আপনি এই ডিরেক্টরিতে একটি ভাঙা প্রতীকী লিঙ্ক যুক্ত করুন (তবে উপরে বর্ণিত ব্যবহারের ক্ষেত্রে অন্য কোনও ক্ষেত্রে দয়া করে README
একটি ব্যাখ্যা সহ একটি ব্যবহার করুন ):
ln -s .this.directory empty/.keep
এই ডিরেক্টরিতে ফাইল উপেক্ষা করার জন্য, আপনি এটি আপনার মূলটিতে যুক্ত করতে পারেন .gitignore
:
echo "/empty" >> .gitignore
উপেক্ষা করা ফাইল যুক্ত করতে, এটি জোর করার জন্য একটি পরামিতি ব্যবহার করুন:
git add -f empty/.keep
প্রতিশ্রুতি দেওয়ার পরে আপনার সূচীতে একটি ভাঙা প্রতীকী লিঙ্ক রয়েছে এবং গিট ডিরেক্টরিটি তৈরি করে। ভাঙা লিঙ্কটির কিছু সুবিধা রয়েছে, যেহেতু এটি কোনও নিয়মিত ফাইল নয় এবং কোনও নিয়মিত ফাইলকে নির্দেশ করে না। এটি এমনকি "(এতে কোনও ফাইল নেই)" প্রশ্নের অংশের সাথে খাপ খায়, উদ্দেশ্য হিসাবে নয় তবে অর্থ দ্বারা, আমার ধারণা:
find empty -type f
এই ডিরেক্টরিতে কোনও ফাইল উপস্থিত না থাকায় এই কমান্ডগুলি একটি খালি ফলাফল দেখায়। সুতরাং বেশিরভাগ অ্যাপ্লিকেশন, যেগুলি ডিরেক্টরিতে সমস্ত ফাইল পায় সাধারণত এই লিঙ্কটি দেখতে পায় না, যদি তারা "ফাইল বিদ্যমান" বা "পাঠযোগ্য" হয় তবে কমপক্ষে। এমনকি কিছু স্ক্রিপ্ট সেখানে কোনও ফাইল খুঁজে পাবে না:
$ php -r "var_export(glob('empty/.*'));"
array (
0 => 'empty/.',
1 => 'empty/..',
)
তবে আমি দৃ solution়ভাবে এই সমাধানটি কেবলমাত্র বিশেষ পরিস্থিতিতে ব্যবহার করার পরামর্শ দিচ্ছি, README
খালি ডিরেক্টরিতে একটি ভাল লেখা সাধারণত একটি ভাল সমাধান। (এবং এটি উইন্ডোজ ফাইল সিস্টেমের সাথে কাজ করে কিনা আমি জানি না ...)
পড়া @ofavre 's এবং @ Stanislav-bashkyrtsev ভাঙ্গা এলেবেলে submodule রেফারেন্স ব্যবহার এলেবেলে ডিরেক্টরি তৈরি করতে এর উত্তর, আমি বিস্মিত যে কেউ কিছু ধারণা এখনো এই সহজ সংশোধনী সুপারিশ করেছে পুরো জিনিস বিবেকী ও নিরাপদ করতে:
বরং এলেবেলে মধ্যে একটি জাল submodule ফাটান , শুধু একটি খালি বাস্তব এক যোগ ।
ঠিক একটি প্রতিশ্রুতিযুক্ত একটি জিআইটি সংগ্রহস্থল:
commit e84d7b81f0033399e325b8037ed2b801a5c994e0
Author: Nobody <none>
Date: Thu Jan 1 00:00:00 1970 +0000
কোনও বার্তা নেই, প্রতিশ্রুতিবদ্ধ ফাইল নেই।
আপনার জিআইটি রেপোতে একটি খালি ডিরেক্টরি যুক্ত করতে:
git submodule add https://gitlab.com/empty-repo/empty.git path/to/dir
সমস্ত বিদ্যমান খালি ডিরেক্টরি সাবমোডিয়ালে রূপান্তর করতে:
find . -type d -empty -delete -exec git submodule add -f https://gitlab.com/empty-repo/empty.git \{\} \;
সাব-মডিউল রেফারেন্স তৈরি করার সময় গিট সর্বশেষ প্রতিশ্রুতিবদ্ধ হ্যাশ সংরক্ষণ করবে, সুতরাং আপনাকে দূষিত ফাইলগুলি ইনজেক্ট করতে আমার (বা গিটল্যাব) সম্পর্কে চিন্তা করতে হবে না। দুর্ভাগ্যক্রমে আমি চেকআউট করার সময় কোন প্রতিশ্রুতিবদ্ধ আইডি ব্যবহার করার জন্য জোর করার কোনও উপায় খুঁজে পাইনি, সুতরাং আপনাকে রেফারেন্স কমিট আইডি e84d7b81f0033399e325b8037ed2b801a5c994e0
ব্যবহার করছে তা নিজেই পরীক্ষা করতে হবেgit submodule status
রেপো যুক্ত করার পরে আপনাকে ।
এখনও একটি স্থানীয় সমাধান নয়, তবে আমরা সম্ভবত সর্বোত্তমভাবে কারও হাত ছাড়া সত্যই , সত্যিই পেতে পারি এলেবেলে কোডবেস মধ্যে মলিন।
আপনি (খালি ডিরেক্টরিতে) ব্যবহার করে এই সঠিক প্রতিশ্রুতিটি পুনরায় তৈরি করতে সক্ষম হবেন:
# Initialize new GIT repository
git init
# Set author data (don't set it as part of the `git commit` command or your default data will be stored as “commit author”)
git config --local user.name "Nobody"
git config --local user.email "none"
# Set both the commit and the author date to the start of the Unix epoch (this cannot be done using `git commit` directly)
export GIT_AUTHOR_DATE="Thu Jan 1 00:00:00 1970 +0000"
export GIT_COMMITTER_DATE="Thu Jan 1 00:00:00 1970 +0000"
# Add root commit
git commit --allow-empty --allow-empty-message --no-edit
পুনরুত্পাদনযোগ্য জিআইটি কমিট তৈরি করা আশ্চর্যরকম কঠিন…
আপনি পারবেন না। এটি গিট রক্ষণকারীদের ইচ্ছাকৃতভাবে ডিজাইনের সিদ্ধান্ত। মূলত, গিটের মতো সোর্স কোড ম্যানেজমেন্ট সিস্টেমের উদ্দেশ্য হ'ল সোর্স কোড পরিচালনা করা এবং খালি ডিরেক্টরিগুলি সোর্স কোড নয়। গিটকে প্রায়শই একটি বিষয়বস্তু ট্র্যাকার হিসাবেও বর্ণনা করা হয় এবং আবার খালি ডিরেক্টরিগুলি সামগ্রীতে নয় (একেবারে বিপরীতে, আসলে) তাই সেগুলি ট্র্যাক করা হয় না।
আপনি এই কোডটি create_readme.php হিসাবে সংরক্ষণ করতে পারেন এবং আপনার গিট প্রকল্পের মূল ডিরেক্টরি থেকে পিএইচপি কোড চালাতে পারেন ।
> 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
checkout
গিটের বর্তমান সংস্করণগুলির সাথে হবে না ।