আমি কীভাবে একটি গিট সংগ্রহস্থলের একটি খালি ডিরেক্টরি যুক্ত করতে পারি?


4258

গিট সংগ্রহস্থলে কীভাবে আমি একটি খালি ডিরেক্টরি (এতে কোনও ফাইল নেই) যুক্ত করতে পারি?


16
এটি কার্যকর না হলেও, আপনার রেপোতে খালি (সত্যই ফাঁকা) ডিরেক্টরি হ্যাক করার একটি উপায় রয়েছে । এটি checkoutগিটের বর্তমান সংস্করণগুলির সাথে হবে না ।
tiw

335
@ এখনও আমি একমত নই যে এটি কার্যকর নয় useful আপনার ডিরেক্টরি শ্রেণিবিন্যাস আপনার প্রকল্পের অংশ, সুতরাং এটি সংস্করণে নিয়ন্ত্রিত হওয়া উচিত।
জেবেন্টলি

114
আমার ক্ষেত্রে, আমি tmp ফাইলগুলির জন্য একটি ডিরেক্টরি কাঠামো যুক্ত করতে চাই, তবে tmp ফাইলগুলি সেগুলি নয়। এটি করে, আমার পরীক্ষকের সঠিক কাঠামো রয়েছে (অন্যথায় ত্রুটি রয়েছে) তবে আমি টিএমপি ডেটা দিয়ে আমার কমিটগুলি আটকে রাখি না। তাই হ্যাঁ, এটি আমার পক্ষে কার্যকর!
অ্যাডাম মার্শাল

45
@ অ্যাডামমারশাল আমার ধারণা টিউউ বলছিল যে হ্যাকটি কার্যকর নয়, যেহেতু এটি চেকআউট দ্বারা উপেক্ষা করা হয়েছে। টিএমপি ডায়াররা ভিসিএসের জন্য দরকারী বৈশিষ্ট্যের মতো শব্দ করে।
কোয়ান্টাম 7

31
Tmp ফাইল তৈরি করার পদ্ধতিটি কেন tmp ডিরেক্টরি তৈরি করে না?
রাইপেক

উত্তর:


4125

ডিরেক্টরি থাকার (প্রায়) খালি রাখার অন্য উপায় (সংগ্রহশালায়) হ'ল .gitignoreসেই ডিরেক্টরিটির ভিতরে একটি ফাইল তৈরি করা যাতে এই চারটি লাইন থাকে:

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

তারপর আপনি সঠিক ভাবে আপনি m104 এর যা করতে হবে যে পেতে হবে না সমাধান

এটি সেই সুবিধাটি দেয় যে সেই ডিরেক্টরিতে থাকা ফাইলগুলি যখন আপনি গিট স্ট্যাটাস করবেন তখন "চিহ্নবিহীন" হিসাবে প্রদর্শিত হবে না।

মেকিং @GreenAsJade এর মন্তব্যে ক্রমাগত:

আমি মনে করি এটি লক্ষণীয় যে এই সমাধানটি যথাযথভাবে সেই প্রশ্নের জন্য যা জিজ্ঞাসা করেছিল, কিন্তু সম্ভবত এই প্রশ্নটির দিকে চেয়ে বহু মানুষ যা খুঁজছিল তা নয়। এই সমাধানটি গ্যারান্টি দেয় যে ডিরেক্টরি খালি থাকবে। এটি বলে যে "আমি এখানে সত্যিকার অর্থে ফাইলগুলি চেক ইন করতে চাই না"। "এখানে চেক ইন করার জন্য আমার কাছে কোনও ফাইল নেই, তবে এর বিপরীতে, তবে এখানে আমার ডিরেক্টরি দরকার, ফাইলগুলি পরে আসতে পারে"।


24
আমি মনে করি @ জনমাই দ্বারা প্রস্তাবিত README সমাধানটি এর সাথে একসাথে ব্যবহার করা উচিত; .gitignore ফাইলটি আমরা সংস্করণ নিয়ন্ত্রণের বাইরে কী রাখতে চাই তার একটি ব্যাখ্যা সরবরাহ করে, যখন README ফাইলটি ব্যাখ্যা করে যে ডিরেক্টরিটির উদ্দেশ্য কী, যা উভয়ই তথ্যের অত্যন্ত গুরুত্বপূর্ণ অংশ।
পেড্রোমোনেল

18
@pedromanoel আমি ফাইলটির READMEভিতরে যে ডকুমেন্টেশন রেখেছি তা লিখি .gitignore(মন্তব্য হিসাবে)।
কার্লোস ক্যাম্পাদ্রেসের

69
1 পার্থক্যটি চিহ্নিত করুন: ১) একটি খালি ফোল্ডার, ২) এতে .gitignore ফাইল সহ একটি ফোল্ডার। ;-)
পিটার পেরে

6
এটি ক্যাশে ফোল্ডারগুলির জন্য উপযুক্ত ।
26:30

10
দুর্ভাগ্যক্রমে, ফলাফলটি একটি খালি নয় খালি ডিরেক্টরিতে, এটিতে একটি একক লুকানো ফাইল রয়েছে।
পেডোরো

1090

আপনি পারবেন না। দেখুন গীত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

বর্তমানে গিট ইনডেক্সের নকশা (স্টেজিং এরিয়া) কেবলমাত্র ফাইলগুলি তালিকাভুক্ত করার অনুমতি দেয় এবং খালি ডিরেক্টরিগুলি পরিবর্তনের জন্য যথেষ্ট সক্ষম কেউই এ পরিস্থিতির প্রতিকারের জন্য যথেষ্ট যত্ন নেয়নি।

ডিরেক্টরিগুলির মধ্যে ফাইল যুক্ত করার পরে স্বয়ংক্রিয়ভাবে যুক্ত হয়। এটি হ'ল ডিরেক্টরিগুলি কখনই ভান্ডারে যুক্ত করতে হয় না এবং সেগুলি নিজেই ট্র্যাক করা যায় না।

আপনি " git add <dir>" বলতে পারেন এবং এটি সেখানে ফাইল যুক্ত করবে।

যদি আপনার সত্যিকারের চেকআউটগুলিতে একটি ডিরেক্টরি থাকতে হয় তবে আপনার এটিতে একটি ফাইল তৈরি করা উচিত। .gitignore এই উদ্দেশ্যে ভাল কাজ করে; আপনি এটিকে খালি রেখে দিতে পারেন, বা ডিরেক্টরিতে প্রদর্শিত ফাইলগুলির নাম পূরণ করতে পারেন।


67
নীচে উত্তর অনেক ভাল। নিম্ন স্তরের সফ্টওয়্যারটি আমার কাছে খালি ডিরেক্টরি প্রয়োজন যখন গিটটি আসলে গিট ব্যবহার করতে পারে ততটা আমার পক্ষে বিবেচনা করে না এই বিষয়টি সত্য নয়। 2 লাইন .gitignore যুক্ত করা আমার কাছে গ্রহণযোগ্য বলে মনে হচ্ছে।
আমালা

1
ওয়েল, যদি কেউ একটি নতুন ডিরেক্টরিতে ফাইলগুলি স্থানান্তর করতে চান, তবে তারা এটি করতে পারবেন না git mvকারণ গিট অভিযোগ করবে যে নতুন ডিরেক্টরি সংস্করণ নিয়ন্ত্রণের অধীনে নেই
lulalala

16
ঘন ঘন এই প্রশ্নের জন্য আপনি পুরো ইন্টারনেট জুড়ে " এটি অসম্ভব, আপনি পারবেন না " ইত্যাদি পড়তে পারেন । .gitignoreকৌতুক একটি ঘন উত্তর, এবং সন্তুষ্ট অনেক চাহিদা। তবে এটা কি সম্ভব Git একটি ট্র্যাক করতে সত্যিই খালি , ডিরেক্টরির আমার উত্তর দেখুন
ofavre

2
যদিও আমি মনে করি, এটি আরো মত "খালি স্ট্রিং এর রয়েছে SHA হ্যাশ" মতানুযায়ী, যদি উপস্থিত, আসলে হবে , একটি খালি গাছ একটি ভালভাবে সংজ্ঞায়িত আইডেন্টিফায়ার হতে যদি না তা বলতে যে বস্তুর কিনা অসম্ভব একটি গাছ বা একটি ফোটা
এমিল লুন্ডবার্গ

21
আমি প্রচুর রেপো দেখেছি যা .gitkeepএই উদ্দেশ্যে খালি ফাইল ব্যবহার করে ।
সুকিমা

758

.gitkeepডিরেক্টরিতে ডাকা একটি খালি ফাইল তৈরি করুন এবং এটি যুক্ত করুন।


58
পরিবর্তে উত্সাহিত করে আমি একটি উত্তর যুক্ত করেছি .keep
একিউম্যানাস

205
.gitkeepগিট দ্বারা নির্ধারিত হয়নি এবং লোকেরা দ্বিতীয়বার এর অর্থ অনুমান করতে চলেছে, যা তাদের গুগল অনুসন্ধানে নিয়ে যাবে, যা তাদের এখানে নিয়ে যাবে। .gitউপসর্গ সম্মেলন ফাইল ও ডিরেক্টরিগুলি জন্য সংরক্ষিত করা উচিত যে গীত নিজেই ব্যবহার করে।
টি-মার্ট

10
@ টি-মার্ট " .gitপ্রিফিক্স কনভেনশনটি সংরক্ষণ করা উচিত ..." কেন? গিট কি এই রিজার্ভেশনটির অনুরোধ করে?
সীমাবদ্ধ প্রায়শ্চিত্ত

9
এই ক্ষেত্রে একটি READMEবা ABOUTফাইল ঠিক তত ভাল বা আরও ভাল হবে। পরবর্তী লোকের জন্য একটি নোট রেখে, ঠিক যেমন আমরা URL এর আগে করতাম।
ডেভ

5
আপনি যদি একটি ইউনিট পরীক্ষা লিখছেন যা খালি ডিরেক্টরিতে কোড পরীক্ষা করা উচিত বলে কাজ করে না ...
thebjorn

435

আপনি কেন রেপোস্টরিতে ডিরেক্টরিটি অন্যথায় খালি রাখতে চান তা ব্যাখ্যা করার জন্য আপনি ডিরেক্টরিটিতে একটি README ফাইল সর্বদা রেখে দিতে পারেন।


39
+1, ভাল পরামর্শ, খালি ডিরেক্টরিটি ভবিষ্যতে ব্যবহার করা না হলে কোনও অর্থবোধ করে না। সুতরাং এটির ভিতরে একটি README ফাইল তৈরি করুন এবং এই ডিরেক্টরিটি কী জন্য লিখুন এবং ভবিষ্যতে কোন ফাইলগুলি এখানে রাখা হবে তা লিখুন। এটি দুটি সমস্যা সমাধান করে।
সাইদগ্নু

63
@ ইলিয়াস ননসেন্স খালি ডিরেক্টরি সম্বলিত একটি ডিরেক্টরি কাঠামো অনেক পরিস্থিতিতে উচ্চ পছন্দসই হতে পারে (যেমন কোনও এমভিসি অ্যাপ্লিকেশন যেখানে আপনি একটি মডেল ডিরেক্টরি চান তবে এখনও কোনও মডেল তৈরি করতে পারেন নি, বা ভাগ করা ভিউ ডিরেক্টরি যা আপনার ভাগ করে দেওয়া ভিউ যোগ করার পরিকল্পনা করেছেন, পরে )। তদুপরি, এগুলির প্রত্যেকটিতে একটি README স্থাপন করা অতিমাত্রায় দক্ষ কারণ তারা স্পষ্টতই এটির জন্য রয়েছে এবং তাদের প্রতিটিটির মধ্যে একটি README রাখা ভুলে যাওয়া সহজ। এবং আপনি যখন তাদের সাথে কিছু অন্যান্য ফাইল যুক্ত করেন তখন README মুছে ফেলতে হবে remember মূলত, গিট অবশ্যই স্পষ্টভাবে ফাঁকা ডিরেক্টরিতে অনুমতি দেয়।
জেজ

20
@ জিজ: আমি একমত নই মুল বক্তব্যটি হ'ল গিটটি সোর্স-কোড নিয়ন্ত্রণ করতে (এবং সূচি) তৈরি করা হয়েছে is গুরুত্বপূর্ণভাবে, প্রতিশ্রুতির আইডি হ'ল সামগ্রীগুলির একটি হ্যাশ। এটি বলতে গেলে এটিতে অবশ্যই সামগ্রী থাকতে হবে have আপনি একটি README প্রয়োজন হবে না যে গাছ, শুধুমাত্র পাত নোড অংশ। যদি আপনার কাছে কোডগুলি স্থাপনের উদ্দেশ্যে স্থান রয়েছে তবে কোনও কোড নেই এবং আপনি "মডেলগুলির জন্য জায়গা" >> README প্রতিধ্বনি করতে সময়ও নেবেন না, তবে আপনার কাছে যা আছে তা কোনও প্রতিশ্রুতি নয়। এটি গিটার জন্য আগ্রহী নয়। "আমি চলমান অ্যাপ্লিকেশনটিকে XYZ খালি ডিরেক্টরি রাখতে চাই" বলা একটি রানটাইম সমস্যা, উত্সের সমস্যা নয়। আপনার ডাব্লু / আপনার ইনস্টলারটি হ্যান্ডেল করুন।
জো অ্যাটবার্গার

6
@ জোএটজবার্গার এটি একটি অনুপস্থিত বৈশিষ্ট্য, উদ্দেশ্যমূলক সীমাবদ্ধতা নয়। গিট এফএকিউ থেকে: বর্তমানে গিট ইনডেক্সের নকশা (স্টেজিং এরিয়া) কেবলমাত্র ফাইলগুলি তালিকাভুক্ত করার অনুমতি দেয় এবং খালি ডিরেক্টরিগুলিকে অনুমতি দেওয়ার জন্য পরিবর্তন করতে যথেষ্ট সক্ষম কেউই এ পরিস্থিতির প্রতিকারের জন্য যথেষ্ট যত্ন নেয়নি।
jbo5112

7
@ jbo5112 হ্যাঁ, আপনি উল্লেখ করেছেন "বিশেষ কোড" হ'ল "ইনস্টলার" I আপনার ওয়েব অ্যাপ্লিকেশন ইনস্টলেশনটিতে ইতিমধ্যে একটি ডাটাবেস, স্থানীয় কনফিগারেশন, টানাপরণ নির্ভরতা বা 100 অন্যান্য ক্রিয়াকলাপগুলি পরিচালনা করতে হবে, তবে কয়েকটি ফাঁকা ডিরেক্টরিগুলি এর বাইরে? গ্রেড, যাত্রী, শেফ, একটি আদিম মেকফিল ইত্যাদি চেষ্টা করে দেখুন ডিরেক্টরি তৈরি এবং অ্যাপ্লিকেশন ইনস্টল করার অন্যান্য (সম্ভাব্যত আরও জটিল / বিপজ্জনক) কাজের মধ্যে কোনও সুরক্ষার পার্থক্য নেই। এবং যদি আপনার সত্যিই কোনও ডিপস, কনফিগারেশন, ডিবি, এবং কোনও ইনস্টলার না থাকে তবে কেবল README ব্যবহার করুন। কোনও ক্ষেত্রেই আপনার দুটোই করা দরকার।
জো এটজবার্গার

348
touch .keep

লিনাক্সে এটি একটি খালি ফাইল তৈরি করে .keep। এটির মূল্য কী, এই নামটি গিতের কাছে অজ্ঞেয়বাদী, যদিও .gitkeepগিটের জন্য নির্দিষ্ট। দ্বিতীয়ত, অন্য একজন ব্যবহারকারী যেমন উল্লেখ করেছেন, .gitউপসর্গের কনভেনশনটি গিট নিজেই যে ফাইল এবং ডিরেক্টরি ব্যবহার করে সেগুলির জন্য সংরক্ষণ করা উচিত।

বিকল্পভাবে, অন্য উত্তরে উল্লিখিত হিসাবে , ডিরেক্টরিটিতে পরিবর্তে বর্ণনামূলক READMEবা README.mdফাইল থাকতে পারে ।

অবশ্যই এটির প্রয়োজন রয়েছে যে ফাইলটির উপস্থিতি আপনার অ্যাপ্লিকেশনটি ভঙ্গ করবে না।


1
এটি প্রাথমিক বেয়ার ডিরেক্টরিতে ভাল তবে এটি যদি ফাইলগুলি পূরণ করতে শুরু করে তবে কী হবে? তারপরে গিট সেগুলি লক্ষ্য করবে এবং তাদের তালিকাভুক্ত ফাইল হিসাবে দাবি করবে। এখানে নির্বাচিত উত্তর একটিকে ডিরেক্টরিতে রাখার অনুমতি দেওয়ার জন্য আরও মার্জিতভাবে কাজ করে তবে নিরাপদে বিষয়বস্তুটিকে উপেক্ষা করুন।
জ্যাকগল্ড

14
প্রশ্ন এবং প্রধান সাধারণ উদ্বেগ খালি ডিরেক্টরি যুক্ত করার বিষয়ে। যদি এটির পরে কোনও আবাসিক ফাইল থাকে তবে স্পষ্টতই .keepফাইলটি মুছুন বা কেবল এটি উপেক্ষা করুন। যদি পরিবর্তে ডিরেক্টরিতে থাকা ফাইলগুলি উপেক্ষা করা হয়, তবে এটি সম্পূর্ণ আলাদা a
একিউম্যানাস

3
এটি প্রস্তাবিত হয়েছিল যে git clean -nd | sed s/'^Would remove '// | xargs -I{} touch "{}.keep"সমস্ত চিহ্নবিহীন ফাঁকা ডিরেক্টরিতে এটি করবে।
একিউম্যানাস

1
এই সমাধানটি পছন্দ করবেন না, এই ফাইলটি কী করে তা অনুমান করা শক্ত। এছাড়াও, যদি আপনি আপনার ডেভ পরিবেশে ফাইলগুলি তৈরি করে থাকেন (যেমন লগ বা চিত্র ইত্যাদি), তবে এই ফাইলগুলি সংস্করণিত হওয়া থেকে রক্ষা করা এবং তাদের উত্পাদনে যাওয়ার উপায় রাখা উচিত নয়, যা ভাল নয়।
danielrvt

1
উইন্ডোজ নাম ছাড়া ফাইল পছন্দ করে না এবং এটি সম্পাদনের জন্য বিশেষ যাদু প্রয়োজন (ওরফে বাশ-জাতীয় টার্মিনাল অ্যাপ্লিকেশন বা সমতুল্য)।
EntangledLoops

303

আমাদের খালি সংস্করণযুক্ত ফোল্ডারগুলির প্রয়োজন কেন

আগেরটা আগে:

গিট সংস্করণ সিস্টেমের অধীনে একটি খালি ডিরেক্টরি কোনও গাছের অংশ হতে পারে না

এটি কেবল ট্র্যাক করা হবে না। তবে এমন পরিস্থিতিতে রয়েছে যেখানে "সংস্করণ" খালি ডিরেক্টরিগুলি অর্থবহ হতে পারে, উদাহরণস্বরূপ:

  • একটি পূর্বনির্ধারিত ফোল্ডার কাঠামো ভাসিয়ে দেওয়া , এটি প্রতিটি ব্যবহারকারীর / সরবরাহকারীর জন্য উপলব্ধ করে তোলে; বা, উপরের বিশেষায়িত কেস হিসাবে অস্থায়ী ফাইলগুলির জন্য একটি ফোল্ডার তৈরি করা যেমন কোনও ডিরেক্টরি cache/বা logs/ডিরেক্টরি, যেখানে আমরা ফোল্ডারটি সরবরাহ করতে চাই তবে .gitignoreএর সামগ্রীগুলি
  • উপরোক্ত সম্পর্কিত, কিছু প্রকল্পগুলি কিছু ফোল্ডার ছাড়া কাজ করবে না (যা প্রায়শই খারাপভাবে নকশাকৃত প্রকল্পের ইঙ্গিত হয়ে থাকে, তবে এটি প্রায়শই বাস্তব-জগতের দৃশ্যপট এবং সম্ভবত সেখানে সমস্যাগুলির সমাধানের জন্য বলা যেতে পারে)।

কিছু পরামর্শ দেওয়া হয়েছে

অনেক ব্যবহারকারী পরামর্শ:

  1. READMEডিরেক্টরিটি খালি নয়, বা করার জন্য কিছু সামগ্রী সহ একটি ফাইল বা অন্য একটি ফাইল স্থাপন করা
  2. .gitignoreএক ধরণের "বিপরীত যুক্তি" দিয়ে ফাইল তৈরি করা (অর্থাত্ সমস্ত ফাইল অন্তর্ভুক্ত করা) যা শেষে, # 1 এর একই উদ্দেশ্যকে পরিবেশন করে।

যদিও উভয় সমাধান নিশ্চয় কাজ আমি তাদের গীত ভার্সন করার জন্য একটি অর্থপূর্ণ পদ্ধতির সঙ্গে সঙ্গতিহীন পাবেন।

  • আপনি কেন আপনার প্রকল্পে সত্যিই চান না এমন বোগাস ফাইল বা README গুলি রাখার কথা?
  • এটি সম্ভব ( এমনকী, ফাইলগুলি বাদ দিয়ে ) যা বোঝানো হয়েছে তার সম্পূর্ণ বিপরীত .gitignoreকোনও জিনিস ( ফাইল রাখার ) কেন ব্যবহার করবেন ?

.গিটকিপ অ্যাপ্রোচ

সংস্করণ সিস্টেমে ফোল্ডারের উপস্থিতি জোর করার জন্য ডাকা একটি খালি ফাইল ব্যবহার করুন .gitkeep

যদিও এটি এত বড় পার্থক্য মনে হয় না:

  • আপনি এমন একটি ফাইল ব্যবহার করেন যার ফোল্ডারটি রাখার একক উদ্দেশ্য রয়েছে। আপনি রাখতে চান না এমন কোনও তথ্য আপনি সেখানে রাখেন না।

    উদাহরণস্বরূপ, আপনার ফোল্ডারটি রাখার অজুহাত হিসাবে নয়, দরকারী তথ্য সহ README গুলিও ব্যবহার করা উচিত।

    উদ্বেগের বিচ্ছেদ সর্বদা একটি ভাল জিনিস এবং আপনি এখনও .gitignoreঅযাচিত ফাইলগুলি উপেক্ষা করার জন্য যুক্ত করতে পারেন ।

  • এটির নামকরণ .gitkeepফাইল ফাইল থেকেই এটি খুব স্পষ্ট এবং সোজা হয়ে যায় (এবং অন্যান্য বিকাশকারীদেরও , যা একটি ভাগ প্রকল্পের জন্য ভাল এবং গিট সংগ্রহস্থলের মূল উদ্দেশ্যগুলির মধ্যে একটি) এই ফাইলটি হ'ল

    • কোডের সাথে সম্পর্কিত নয় এমন একটি ফাইল (শীর্ষস্থানীয় ডট এবং নামের কারণে)
    • গিট সম্পর্কিত স্পষ্টভাবে সম্পর্কিত একটি ফাইল
    • এর উদ্দেশ্য ( রাখা ) স্পষ্টভাবে বিবৃত এবং ধারাবাহিকভাবে এবং উপেক্ষা করা এর অর্থের সাথে শব্দার্থবিরোধী

গ্রহণ

লারাভেল , অ্যাঙ্গুলার-সিএলআই-এর.gitkeep মতো অত্যন্ত গুরুত্বপূর্ণ ফ্রেমওয়ার্কগুলির দ্বারা গৃহীত দৃষ্টিভঙ্গি আমি দেখেছি ।


8
আপনি একটি চিন্তা মিস করেছেন - কী রাখার এবং ফোল্ডার খালি রাখার কারণ (যেমন / লগস, / টিএমপি, / আপলোড)? হ্যাঁ - এটি ফোল্ডারটি খালি রাখা। :) সুতরাং আপনি যদি কোনও ফোল্ডার খালি রাখতে চান তবে আপনাকে তার ভিতরে থাকা ফাইলগুলি উপেক্ষা করতে হবে।
রোমান

14
@ রোমান অ্যালেনস্টেইন: অগত্যা নয়। এটি এমন হতে পারে যে আপনি একটি প্রদত্ত কাঠামো সহ একটি রেপো তৈরি করেন যা পরে জনবহুল হয়ে উঠতে পারে। এই ফাইলগুলি তৈরি হওয়ার সাথে সাথেই রেপোতে যুক্ত করা হবে এবং .gitignore ফাইলগুলি মুছে ফেলা বা সম্পাদনা করা বিরক্তিকর হবে (এবং বিপজ্জনক, কারণ সম্ভবত আপনি বুঝতেও পারছেন না যে তাদের ট্র্যাক করা হচ্ছে না: git তাদের এড়িয়ে চলেছে )
ব্লুফাস্ট

45
@ বেহনাম: আমি ডাউনটাতে নেব, তবে এসও মেটা সম্পর্কিত আমার গবেষণাটি ভার্জোজ জবাবগুলির বিষয়ে কোনও উদ্বেগ প্রকাশ করবে না, যতক্ষণ না তারা প্রতিটি পাঠকের (এবং প্রতিটি দক্ষতার স্তর) জন্য দরকারী হওয়ার জন্য যথেষ্ট বিশদ এবং স্পষ্টতা সরবরাহ করে। তবুও আমি যে কোনও সমালোচনার প্রতি খুব উন্মুক্ত এবং কারণটি জনসমক্ষে প্রচার করার জন্য আপনাকে ধন্যবাদ, আমি এটিকে খুব ইতিবাচকভাবে গ্রহণ করি।
ক্র্যানিও

4
যদি আপনি আমার উত্তরটি .gitkeepঅন্য কোনও গিট-প্রিফিক্সড ফাইলের নামের সাথে প্রতিস্থাপনের জন্য সম্পাদনা করেন তবে আপনি আমার উত্তরটি অর্জন করেন তবে আমি মনে করি এটি সেরা এবং সবচেয়ে তথ্যপূর্ণ উত্তর। কারণ: আমি মনে করি ".git *" গিট নির্ধারিত ফাইলগুলির জন্য সংরক্ষিত হওয়া উচিত, যদিও এটি কেবল নিখুঁত স্থানধারক। আমার প্রথম অনুমান যখন আমি এটি দেখেছিলাম যে উদাহরণস্বরূপ একটি ".গিটকিপ" ফাইলটি স্বয়ংক্রিয়ভাবে উপেক্ষা করা হবে (এটি একটি দুর্দান্ত বৈশিষ্ট্য হবে) তবে এটি ঠিক নয়, তাই না?
জনি

5
আমি আশ্চর্য হয়েছি কেন লোকেরা কেন বুঝতে পারা যায় যে কেন কেউ গিটের জন্য "খালি" ফোল্ডার যুক্ত করতে চায়। তোমাকে কোথাও শুরু করতে হবে, তাই না? সুতরাং, সাধারণত আপনি আপনার প্রকল্পগুলির ফোল্ডার কাঠামো দিয়ে শুরু করেন এবং - হায় - প্রকল্পের শুরুতে এখনও কিছুই নেই। আপনার প্রকল্পের রেপোটি শেষ হয়ে গেলে, টিম কর্মীরা ক্লোন করতে পারে এবং একই কাঠামোর কাজ শুরু করতে পারে।
বিটকলার

127

অন্যান্য উত্তরে বর্ণিত হিসাবে, গিট তার মঞ্চস্থানের খালি ডিরেক্টরি উপস্থাপন করতে অক্ষম। ( গিট এফএকিউ দেখুন ।) তবে, যদি আপনার উদ্দেশ্যে, যদি কোনও ডিরেক্টরি .gitignoreকেবল একটি ফাইল থাকে তবে ডিরেক্টরিটি যথেষ্ট খালি থাকে তবে আপনি .gitignoreকেবল খালি ডিরেক্টরিতে ফাইলগুলি তৈরি করতে পারেন :

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

21
আপনি .git ডিরেক্টরিটি অগ্রাহ্য করতে চাইতে পারেন:find . -name .git -prune -o -type d -empty -exec touch {}/.gitignore \;
স্টিফেন

3
সবচেয়ে পরিস্থিতিতে জন্য একটি সহজতর তারতম্য আছেfind * -type d -empty -exec touch {}/.gitignore \;
akhan

2
যেহেতু ওএস এক্স প্রায় প্রতিটি ডিরেক্টয়য়ে একটি .DS_Store ফাইল তৈরি করে, এটি সেখানে কাজ করে না। আমি খুঁজে পাওয়া একমাত্র (ঝুঁকিপূর্ণ!) কাজটি হ'ল প্রথমে সমস্ত। ডিএসএসটোর ফাইলগুলি মুছে ফেলা find . -name .DS_Store -exec rm {} \;এবং তারপরে এই উত্তর থেকে পছন্দসই রূপটি ব্যবহার করা হয়েছিল। এটি শুধুমাত্র সঠিক ফোল্ডারে চালিত করতে ভুলবেন না!
জেরওয়েক

1
কমান্ড লাইন থেকে কেউ কি উইন্ডোজে এটি করার একটি উপায় জানেন? আমি এখানে রুবি এবং পাইথনে কিছু সমাধান দেখেছি, তবে আমি যদি এটি পরিচালনা করতে পারি তবে একটি নলবোন সমাধান চাই।
মিগ 82

1
@akhan কমান্ডের পতাকাটিতে কিছু যুক্ত করার .gitignoreকোনও প্রভাব নেই । আমার মন্তব্যটি একটি ডিরেক্টরি ট্রিতে থাকা ফাইলগুলি সরিয়ে দেওয়ার বিষয়ে , যাতে পতাকাটি প্রয়োগ করা যায়। -emptyfind.DS_Store-empty
জেরওয়েক

67

অ্যান্ডি লেস্টার সঠিক, তবে যদি আপনার ডিরেক্টরিটি কেবল খালি হওয়া দরকার, এবং খালি খালি না হয় , তবে আপনি .gitignoreসেখানে একটি খালি ফাইলটি কর্মফল হিসাবে রাখতে পারেন।

অন্যদিকে, এটি একটি বাস্তবায়ন সমস্যা, মৌলিক গিট স্টোরেজ ডিজাইনের সমস্যা নয়। যেমনটি গিট মেলিং তালিকায় বহুবার উল্লেখ করা হয়েছে, এটি কার্যকর না হওয়ার কারণটি হ'ল কেউ এর জন্য কোনও প্যাচ জমা দেওয়ার যথেষ্ট যত্ন নেননি, এটি করা বা করা উচিত নয় তা নয়।


4
আমি যা বলেছিলাম ঠিক তেমনটাই। উভয় অনুচ্ছেদ আমি পোস্ট করা FAQ এর স্নিপেটে সম্বোধন করা হয়।
অ্যান্ডি লেস্টার

1
আমি মনে করি যে বাদেটি আগ্রহহীন এবং এটি জানার জন্য দরকারী - এটি স্থির করা যেতে পারে, যখনই বেশিরভাগ ক্ষেত্রে এরকম সহজ পরিশ্রম হয় খুব শীঘ্রই কখনই এটির আশা করবেন না।
wnise

দুঃখিত, আমি শেষ অনুচ্ছেদটি পড়িনি, এবং আমি প্রথম অনুচ্ছেদটি পড়ার সময়, ভাল, আমি কেন সেই তথ্যটি পুনরাবৃত্তি করিনি তা নিশ্চিত।
এরিস্টটল পাগাল্টজিস

2
অবশ্যই, এই অতিরিক্ত উত্তরটি সত্যটি দেখায়।
মাইকেল জনসন

আমি এখানে একটি কেস দেখতে পেয়েছিলাম যেখানে ডিরেক্টরিটি উপস্থিত না থাকলে বিল্ডটি নীচে পড়ে এবং ডিফল্টরূপে এটি খালি হয়, তবে এটি খালি হওয়ার দরকার নেই। .Gitignore তৈরি করা সঠিক কাজ করে।
জোশুয়া

33

পাগল নেভিগেশন রুবি সৃষ্টি পথ ফোল্ডারের লগ ইন করুন:

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

এখন লগ ডিরেক্টরি গাছের মধ্যে অন্তর্ভুক্ত করা হবে। মোতায়েন করার সময় এটি অত্যন্ত কার্যকর, সুতরাং আপনাকে লগ ডিরেক্টরিগুলি তৈরি করার জন্য একটি রুটিন লিখতে হবে না।

লগফাইলগুলি জারি করে বাইরে রাখা যায়,

echo log/dev.log >> .gitignore

কিন্তু আপনি সম্ভবত এটি জানতেন।


23
রেলের সাথে রুবেলের কী দরকার?
কোলোনেল প্রশ্নগুলি


30

গিট খালি ডিরেক্টরিগুলি ট্র্যাক করে না। দেখুন গীত প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী আরো ব্যাখ্যার জন্য। প্রস্তাবিত কাজটি হ'ল .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

28

সতর্কতা: এই ত্বকটি প্রকৃতপক্ষে কার্যকর হয় না যেমন এটি পরিণত হয়। অসুবিধার জন্য দুঃখিত.

নীচে মূল পোস্ট:

গিট ইন্টারনালদের সাথে খেলতে গিয়ে আমি একটি সমাধান খুঁজে পেয়েছি!

  1. মনে করুন আপনি আপনার ভাণ্ডারে রয়েছেন।
  2. আপনার খালি ডিরেক্টরি তৈরি করুন:

    $ mkdir path/to/empty-folder
    
  3. নদীর গভীরতানির্ণয় কমান্ড এবং খালি গাছ SHA-1 ব্যবহার করে সূচীতে এটি যুক্ত করুন :

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

    কমান্ডটি টাইপ করুন এবং তারপরে দ্বিতীয় লাইনে প্রবেশ করুন। আপনার ইনপুটটি শেষ করতে + টিপুন Enterএবং তারপরে Ctrl+ টিপুন D। দ্রষ্টব্য: ফর্ম্যাটটি মোড [SPACE] প্রকারের [SPACE] SHA-1hash [TAB] পাথ (ট্যাবটি গুরুত্বপূর্ণ, উত্তর বিন্যাসটি এটি সংরক্ষণ করে না)।

  4. এটাই! আপনার খালি ফোল্ডারটি আপনার সূচীতে রয়েছে। আপনাকে যা করতে হবে তা হল প্রতিশ্রুতিবদ্ধ।

এই সমাধানটি সংক্ষিপ্ত এবং দৃশ্যত দুর্দান্ত কাজ করে ( সম্পাদনা দেখুন! ) তবে এটি মনে রাখা এত সহজ নয় ...

খালি গাছ SHA-1 একটি নতুন ফাঁকা গিট সংগ্রহশালা তৈরি cdকরে এটিতে ইস্যু করা যায় git write-treeযা খালি গাছটি SHA-1 কে আউটপুট করে।

সম্পাদনা করুন:

এটি সন্ধান করার পর থেকেই আমি এই সমাধানটি ব্যবহার করছি। এটি কোনও সাবমডিউল তৈরির মতো ঠিক একইভাবে কাজ করে বলে মনে হচ্ছে, কোনও মডিউল কোথাও সংজ্ঞায়িত না করে। এটি প্রদান করার সময় ত্রুটি বাড়ে git submodule init|update। সমস্যাটি git update-indexএই 040000 treeঅংশটি আবার লিখে দেয় 160000 commit

তদুপরি, সেই পথের নীচে স্থাপন করা কোনও ফাইলই কখনও গিতের নজরে আসবে না, কারণ এটি মনে করে যে তারা অন্য কোনও সংগ্রহস্থলের অন্তর্ভুক্ত। এটি সহজেই উপেক্ষা করা যেতে পারে কারণ এটি বাজে!

তবে, যদি আপনি ইতিমধ্যে আপনার ভাণ্ডারে কোনও গিট সাবমডিউল ব্যবহার করেন না (এবং তা করবেন না) এবং "খালি" ফোল্ডারটি খালি থাকবে বা আপনি যদি গিটকে এর অস্তিত্ব সম্পর্কে জানতে চান এবং এর বিষয়বস্তু উপেক্ষা করতে চান তবে আপনি যেতে পারেন এই ত্বক। সাবমোডিয়ুলগুলি সহ স্বাভাবিক পথে যেতে আরও বেশি পদক্ষেপ গ্রহণ করে যা এই টুইটটিকে সামঞ্জস্য করে।


সূচীতে ফাঁকা ফোল্ডারটি স্থাপন এবং প্রতিশ্রুতিবদ্ধ হওয়ার পরে, git svn dcommitএটি কি পছন্দসই ফলাফল দিয়ে সম্ভব ?
সীমাবদ্ধ প্রায়শ্চিত্ত

2
এই ঝাঁকুনিটি অন্য কোনও সরঞ্জামের সাথে কাজ করবে এমন সম্ভাবনা কম। সতর্কতা এবং সম্পাদনাতে বর্ণিত মত, আমি বেশ সীমাবদ্ধ ক্ষেত্রে না হলে এটি ব্যবহার করতে নিরুৎসাহিত করি।
ofavre

1
এবং অবশ্যই এই কারণে গিট ইন্টারনালের সাথে জগাখিচুড়ি করা contraindication হয়।
কেসি

@ অভিসেকপি কীভাবে এটি সম্ভব?
পাইরুলেজ

1
@ পাইরুলেজ ভাল, সফ্টওয়্যার জগতে কিছুই অসম্ভব। : ডি আসলে, আমি উত্তরটি অনুসরণ করেছি।
abhisekp

21

ধরা যাক আপনার tmp নামের একটি খালি ডিরেক্টরি দরকার :

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

অন্য কথায়, আপনি গিটকে এড়িয়ে যাওয়ার (এবং খালি ডিরেক্টরিতে থাকা সমস্ত কিছু) বলার আগে আপনাকে সূচীতে .gitignore ফাইল যুক্ত করতে হবে।


11
দুটি জিনিস: আপনি স্পর্শ করার পরিবর্তে কেবল "প্রতিধ্বনিত * * '> tmp / .gitignore" করতে পারেন, এবং "গিট কমিট-এম" আপনার সূচীতে ফাইলগুলি যুক্ত করার পরে কোনও পরিবর্তন ঘটায় না।
ক্রিস্টোফার হামারস্ট্রিম

6
আপনি যদি কেবল এটি করেন তবে echo bla > fileআপনি পাবেন না file: File existsকারণ >এটি ইতিমধ্যে উপস্থিত থাকলে ফাইলটি ওভাররাইট করে দেবে বা এটি উপস্থিত না থাকলে একটি নতুন তৈরি করবে।
সাইক্রেন্ডস্ট

3
/bin/shসাংস্কৃতিক ধারণা! * যদি "এখানে" থাকে cshএবং ভেরিয়েবলটি noclobberসেট করা থাকে তবে আপনি অবশ্যই পাবেন file: File exists। যদি কেউ "আমি এটি পেয়েছি" বলে, তারা বোকা এবং "না তুমি না" জবাব দেবে না। * c2.com/cgi/wiki? আমেরিকান
কালচারাল

1
@ ক্লােক যদি কেউ সবার চেয়ে আলাদা শেল ব্যবহার করার সিদ্ধান্ত নেন, তাদের যদি সমস্যা দেখা দেয় তবে তা স্পষ্টভাবে জানিয়ে দেওয়া উচিত। জাতীয়তার সাথে ভিন্ন, প্রত্যেকেরই শেল পছন্দসই পছন্দ।
সেলডমনিডি 25'16

2
@ সেলডমনিডি সম্ভবত তারা সাহায্যের সন্ধান করছেন কারণ তারা জানেন না যে তারা অন্য সবার চেয়ে আলাদা শেল ব্যবহার করছেন।
ক্লেক

20

সম্ভবত একটি খালি ডিরেক্টরি যুক্ত করা মনে হচ্ছে এটি সর্বনিম্ন প্রতিরোধের পথ হবে কারণ আপনার কাছে এমন স্ক্রিপ্ট রয়েছে যা প্রত্যাশা করে যে ডিরেক্টরিটি বিদ্যমান রয়েছে (সম্ভবত কারণ এটি উত্পাদিত বাইনারিগুলির জন্য লক্ষ্য)। প্রয়োজন অনুসারে ডিরেক্টরি তৈরি করতে আপনার স্ক্রিপ্টগুলি সংশোধন করার জন্য আরেকটি পদ্ধতির প্রয়োজন

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

1
দ্রষ্টব্য: আমি প্রতীকী লিঙ্কটি প্রস্তাব দিয়েছি যে একটি পরিষ্কার চেকআউটে "ভাঙ্গা" কারণ .generatedডিরেক্টরিটি প্রাথমিকভাবে উপস্থিত নেই। একবার আপনি আপনার বিল্ডিং করলে তা আর ভাঙা যাবে না।
nobar

2
আমি কিছু ক্ষেত্রে সম্মতি জানাই এটি একটি খুব ভাল ধারণা, তবে অন্যগুলিতে (যেমন এমন একটি প্রকল্প বিতরণ করা যেখানে আপনার ফোল্ডারগুলির যেমন অন্যথায় খালি কঙ্কাল রয়েছে যেমন মডেল / এবং মতামত /) আপনি ব্যবহারকারীর হাতে এই ডিরেক্টরিগুলি রাখতে চান ম্যানুয়ালি দস্তাবেজগুলি পড়ার চেয়ে, এবং রেপো ক্লোনিংয়ের পরে তাদের কোনও ধরণের ইনস্টলেশন স্ক্রিপ্ট চালানো আশা করা কিছুটা হতে পারে। আমি মনে করি @ জন-মেয়ের README উত্তরের সাথে মিলিয়ে এই উত্তরটি সমস্ত ক্ষেত্রে না থাকলে সবচেয়ে বেশি কভার করা উচিত।
Moopet

14

আমি খালি ডিরেক্টরিগুলি নিয়েও সমস্যার মুখোমুখি হয়েছি। স্থানধারক ফাইলগুলি ব্যবহার করে সমস্যা হ'ল আপনার এগুলি তৈরি করতে হবে এবং মুছে ফেলতে হবে, যদি সেগুলি আর প্রয়োজন না হয় (কারণ পরে সেখানে সাব-ডিরেক্টরি বা ফাইল যুক্ত হয়েছিল big বড় উত্স গাছের সাহায্যে এই স্থানধারক ফাইলগুলি পরিচালনা করা জটিল এবং ত্রুটি হতে পারে can প্রবণ।

এ কারণেই আমি কোনও ওপেন সোর্স সরঞ্জামটি লেখার সিদ্ধান্ত নিয়েছি যা এই ধরনের স্থানধারক ফাইলগুলি স্বয়ংক্রিয়ভাবে তৈরি / মুছতে পারে। এটি .NET প্ল্যাটফর্মের জন্য লেখা এবং মনো (লিনাক্সের জন্য .NET) এবং উইন্ডোজ এর অধীনে চলে।

কেবল একবার দেখুন: http://code.google.com/p/markemptydirs


14

আমি @ আর্টুর 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.

আশা করি এটি আপনার কাজে লাগবে।


13

আপনি পারবেন না এবং দুর্ভাগ্যক্রমে কখনই সক্ষম হবেন না। লিনাস টোরভাল্ড নিজেই এই সিদ্ধান্ত নিয়েছিলেন। তিনি জানেন যে আমাদের পক্ষে ভাল।

আমি কোথাও একবার পড়েছি সেখানে একটি রেন্ট আছে।

আমি আবার খুঁজে পেয়েছি : খালি ডিরেক্টরি .. , তবে অন্য একটিও থাকতে পারে।

দুর্ভাগ্যক্রমে আপনাকে কাজের সাথে বেঁচে থাকতে হবে ...


1
আমি জানি আপনি এটি একটি খারাপ যুক্তির উদাহরণ হিসাবে পোস্ট করেছেন, তবে আমি লিঙ্কটির প্রশংসা করছি কারণ এটি ট্র্যাকিং ডিরেক্টরিগুলির বিরুদ্ধে প্রকৃত পক্ষে যুক্তিযুক্ত যুক্তি। ;-)
ক্লেক

1
এই উত্তরটি অসঙ্গত বলে মনে হচ্ছে, যেহেতু রেফারেন্সড থ্রেডের পরবর্তী পোস্টে লিনাস টোরভাল্ড বলেছেন যে তিনি আশা করেন যে তাদের ডিরেক্টরি ট্র্যাকিং যুক্ত করতে হবে: চিহ্নমেল.আর.ইউ / মেসেজ / লিবিপ 4vpvvxhyqbl । প্রকৃতপক্ষে, তিনি বলেছেন তিনি "প্যাচগুলিকে স্বাগত জানান যা [খালি ডিরেক্টরিগুলি ট্র্যাক করার জন্য সমর্থন যোগ করে]"
প্যাট্রিক এম

প্যাট্রিক, তিনি সেখানে "বুদ্ধিমান" শব্দটি ব্যবহার করেন। আমি সন্দেহ করি যে তাঁর কথাটি এই থ্রেডে লোকদের আকর্ষণ করে এবং তাই আমি ধরে নিই যে তিনি নিজেই গিটকে "বোকা" কিছু প্রয়োগ করবেন না।
ব্যবহারকারী 2334883

10

আপনি যখন কোনও .gitignoreফাইল যুক্ত করেন, আপনি যদি এতে কোনও পরিমাণের সামগ্রী রেখে চলেছেন (যে আপনি গিটকে উপেক্ষা করতে চান) আপনি সম্ভবত একটি নক্ষত্রের সাথে একটি লাইন যুক্ত করতে চান যাতে *আপনি দুর্ঘটনাক্রমে উপেক্ষিত সামগ্রীটি যুক্ত না করেন তা নিশ্চিত করতে পারেন ।


9

ডিরেক্টরিগুলি ট্র্যাক করার জন্য গিট পাওয়ার কোনও উপায় নেই, সুতরাং আপনি যে ডিরেক্টরিটি গিটকে ট্র্যাক করতে চান সেই ডিরেক্টরিতে কোনও স্থানধারক ফাইল যুক্ত করা একমাত্র সমাধান।

ফাইলটির নামকরণ করা যেতে পারে এবং আপনি যে কোনও কিছু রাখতে পারেন, তবে বেশিরভাগ লোকেরা একটি খালি ফাইল নামেই ব্যবহার করেন .gitkeep(যদিও কিছু লোকেরা ভিসিএস-অগ্নোস্টিক পছন্দ করেন .keep)।

উপসৃত . এটি একটি লুকানো ফাইল হিসাবে চিহ্নিত করে।

আর একটি ধারণা READMEহ'ল ডিরেক্টরিটি কী ব্যবহৃত হবে তা ব্যাখ্যা করে একটি ফাইল যুক্ত করা হবে।


8

উল্লিখিত হিসাবে খালি ডিরেক্টরি যুক্ত করা সম্ভব নয়, তবে এখানে একটি লাইন রয়েছে যা সমস্ত ডিরেক্টরিতে খালি .gitignore ফাইল যুক্ত করে।

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

আমি সহজে অ্যাক্সেসের জন্য এটি একটি রেকফাইলে আটকে রেখেছি।


6
আমি বরং ব্যবহার করবfind . -type d -empty -print0 | xargs --null bash -c 'for a; do { echo "*"; echo "!.gitignore"; } >>"$a/.gitignore"; done' --
টিনো

8

জেমি ফ্লোরনয়ের সমাধানটি দুর্দান্ত কাজ করে। এখানে রাখার জন্য কিছুটা বর্ধিত সংস্করণ দেওয়া হয়েছে .htaccess:

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

এই সমাধান আপনি একটি খালি ফোল্ডার, উদাহরণস্বরূপ কমিট করতে পারবেন /log, /tmpঅথবা /cacheএবং ফোল্ডার খালি থাকতে হবে।


2
তিনি একটি ফাইল নয় একটি ফাঁকা ডিরেক্টরি রাখতে চান।
gvsrepins

2
এবং আমি উল্লেখ করেছি যে এটি .htaccessটিকেও রাখবে। উদাহরণ: যদি কোনও সফ্টওয়্যারের লগ-ফাইলগুলির জন্য ডিরেক্টরি থাকে (যেমন অক্সিড ইশপ) যা ওয়েবের মাধ্যমে অ্যাক্সেসযোগ্য না হয় তবে ডিরেক্টরিতে একটি .htaccess থাকে। আপনি যদি উপরে উল্লিখিত .gitignore ফোল্ডারে রাখেন তবে .htaccess কমিট হবে না এবং ফোল্ডারটি ওয়েবের মাধ্যমে অ্যাক্সেসযোগ্য হবে।
রোমান

যদি আপনার কাছে সংস্করণ নিয়ন্ত্রণাধীন একটি .htaccess ফাইল থাকে তবে আপনার ইতিমধ্যে সংস্করণ নিয়ন্ত্রণের অধীনে ডিরেক্টরি রয়েছে। সুতরাং, সমস্যাটি ইতিমধ্যে সমাধান হয়েছে - .gitignore ফাইলটি অপ্রাসঙ্গিক হয়ে যায়।
পোনকডুডল

1
@ ওয়ালাকোলু এই প্রশ্নটি সম্পর্কিত যেটি আপনি ঠিক বলেছেন, তবুও ফাইলটি দরকারী, আমি এটি আপলোড-ডিরেক্টরিতে ব্যবহার করব যেখানে ফাইলগুলি .htaccess দ্বারা সুরক্ষিত থাকবে। রোমানদের ব্যাখ্যার বিপরীতে .htaccess-file প্রতিশ্রুতিবদ্ধ হবে কারণ এটি উপেক্ষা-বিধি দ্বারা বাদ দেওয়া হয়েছে। [পুরানো থ্রেড, আমি জানি]
ডেভিড

7

আমি আমার কাঙ্ক্ষিত ফোল্ডার কাঠামোটি যাচাই করতে এবং প্রকল্পের মধ্যে আমার জন্য এটি তৈরি করতে সর্বদা একটি ফাংশন তৈরি করি। খালি ফোল্ডারগুলি প্রক্সি দ্বারা গিটে রাখা হওয়ায় এটি এই সমস্যাটি ঘটাবে।

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");
}

এটি পিএইচপি-তে রয়েছে তবে আমি নিশ্চিত যে বেশিরভাগ ভাষা একই কার্যকারিতা সমর্থন করে এবং যেহেতু অ্যাপলিকেশন দ্বারা ফোল্ডার তৈরির যত্ন নেওয়া হয়, ফোল্ডারগুলি সর্বদা সেখানে থাকবে।


2
ঠিক তাই আমরা সবাই একই পৃষ্ঠায় আছি, আমি এটি আর করি না। এটা সময় নষ্ট। .gitkeepকনভেনশন অনেক ভালো অভ্যাস।
হালকা Fuzz

এটি কীভাবে সময়ের অপচয় হতে পারে তা আমি দেখতে পাচ্ছি না। যখন আপনার টেম্প্লেটপথটি স্পষ্টতই গতিশীল তখন আপনি .গিটকিপ সমাধানটি ব্যবহার করতে পারবেন না। এমনকি কোনও ননডাইনামিক ফোল্ডার কাঠামোর সাথে আপনার ডিরেক্টরিগুলি পরীক্ষা করার খুব ভাল সমাধান অপসারণের পরিবর্তে আরও কিছু স্টাফ যুক্ত করা উচিত যেমন অনুমতিগুলির জন্য চেক করুন এবং ফাইলগুলি chmod করুন। গ্লোবাল .gitignore এর মধ্যে ডিরেক্টরি চিহ্নিত করার জন্য একটি উপায় যুক্ত করা আমার পক্ষে উপযুক্ত। # কিপ / পথ / থেকে / দির মতো কিছু
জোচেন

7

এখানে একটি হ্যাক, তবে এটি মজাদার যে এটি কাজ করে (গিট ২.২.১) @ টেকা যা পরামর্শ দিয়েছে তার অনুরূপ, তবে মনে রাখা সহজ:

  • যে কোনও ভাণ্ডারে সাব-মডিউল যুক্ত করুন (git submodule add path_to_repo )
  • এটি একটি ফোল্ডার এবং একটি ফাইল যুক্ত করবে .submodules । একটি পরিবর্তন প্রতিশ্রুতিবদ্ধ।
  • .submodulesফাইল মুছুন এবং পরিবর্তন প্রতিশ্রুতিবদ্ধ।

এখন, আপনার কাছে একটি ডিরেক্টরি রয়েছে যা প্রতিশ্রুতিবদ্ধতা পরীক্ষা করার পরে তৈরি হয়। তবে একটি আকর্ষণীয় বিষয় হ'ল আপনি যদি এই ফাইলটির ট্রি অবজেক্টের সামগ্রীটি দেখেন তবে আপনি পাবেন:

মারাত্মক: বৈধ অবজেক্টের নাম নয় b64338b90b4209263b50244d18278c0999867193

আমি এটি ব্যবহার করতে উত্সাহিত করব না যদিও এটি গিটের ভবিষ্যতের সংস্করণগুলিতে কাজ করা বন্ধ করে দিতে পারে। যা আপনার সংগ্রহস্থলটিকে দূষিত করে রাখতে পারে।


এটি আসলে কাজ করে তবে আমি মনে করি হিটকে ইন্টেলিজিজ থেকে বিভ্রান্ত করে ...: |
রজারডপ্যাক

: আমি এই উপর ভিত্তি করে একটি ভাল সমাধান এই অপূর্ণতা নেই যে তৈরি করেছি stackoverflow.com/a/58543445/277882
ntninja

7

ইতিমধ্যে অনেকেই এই প্রশ্নের উত্তর দিয়েছেন। এখানে কেবল একটি পাওয়ারশেল সংস্করণ যুক্ত করা হচ্ছে।

ডিরেক্টরিতে সমস্ত খালি ফোল্ডার সন্ধান করুন

সেখানে একটি খালি .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}

নিস.‌‌‌‌ ͡☉ ͜ʖ ͜ʖ ͡☉ ༽
ফায়ারিং স্কোয়াডউইনটিস

6

আপনি যদি এমন একটি ফোল্ডার যুক্ত করতে চান যা একাধিক শব্দার্থক ডিরেক্টরিতে প্রচুর ক্ষণস্থায়ী ডেটা রাখে, তবে একটি পদ্ধতির মধ্যে রয়েছে আপনার রুটে এই জাতীয় কিছু যুক্ত করা g gitignore ...

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

তারপরে আপনি *.mdডিরেক্টরিগুলি রেপোর অংশই রয়েছেন তা নিশ্চিত করার জন্য প্রতিটি ডিরেক্টরিতে বর্ণনামূলক README.md ফাইলগুলি (বা ফাঁকা ফাইলগুলি যতক্ষণ না আপনি এই ক্ষেত্রে এর মতো অনন্যভাবে টার্গেট করতে পারেন ) তাতে প্রতিশ্রুতি রাখতে পারেন but ফাইলগুলি (এক্সটেনশন সহ) উপেক্ষা করা হয়। সীমাবদ্ধতা: .ডিরেক্টরি নামগুলিতে অনুমোদিত নয়!

আপনি এই সমস্ত ডিরেক্টরি এক্সএমএল / চিত্র ফাইল বা যা কিছু দিয়ে পূরণ করতে পারেন এবং এর অধীনে আরও ডিরেক্টরি যুক্ত করতে পারেন /app/data/ আপনার অ্যাপ্লিকেশনটির স্টোরেজটির বিকাশ হওয়ার সাথে সাথে সময়ের সাথে সাথে করতে পারেন (প্রতিটি স্টোরেজ ডিরেক্টরিটি কী জন্য তার বিবরণে পোড়ানোর জন্য README.md ফাইলগুলির সাথে) ঠিক)।

প্রতিটি নতুন ডিরেক্টরিতে .gitignoreনতুন তৈরি করে আপনার বিকেন্দ্রীকরণ বা বিকেন্দ্রীকরণের প্রয়োজন নেই .gitignore। সম্ভবত বুদ্ধিমান সমাধান নয় তবে গিটিগনোর বুদ্ধিমান এবং সর্বদা আমার জন্য কাজ করে। সুন্দর এবং সহজ! ;)

এখানে চিত্র বর্ণনা লিখুন


6

এটি করার একটি সহজ উপায় আপনি .gitkeepযে ডিরেক্টরিটি (বর্তমানে) খালি রাখতে চান তাতে একটি ফাইল যুক্ত করা।

আরও তথ্যের জন্য এই সফটওয়্যারটির উত্তরটি দেখুন - এটিও ব্যাখ্যা করে যে কিছু লোক কেন একটি .gitignore ফাইল যুক্ত করার প্রতিযোগিতামূলক সম্মেলন খুঁজে পান (এখানে অনেক উত্তরে বলা আছে) বিভ্রান্তিকর।


4

লড়াইয়ে আরও একটি বিকল্প যুক্ত করা হচ্ছে।

ধরে নিই 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উদ্দেশ্য দেয় । অন্যথায়, লাইনের নীচে থাকা কেউ এটি সরিয়ে ফেলার চিন্তা করতে পারে। আপনি লাইনের উপরে কোনও মন্তব্য রাখলে এটি সাহায্য করতে পারে।


4

কখনও কখনও আপনাকে খারাপ লিখিত গ্রন্থাগার বা সফ্টওয়্যার নিয়ে কাজ করতে হয়, যার জন্য "সত্যিকারের" খালি এবং বিদ্যমান ডিরেক্টরি প্রয়োজন। একটি সরল রাখা .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খালি ডিরেক্টরিতে একটি ভাল লেখা সাধারণত একটি ভাল সমাধান। (এবং এটি উইন্ডোজ ফাইল সিস্টেমের সাথে কাজ করে কিনা আমি জানি না ...)


4

পড়া @ofavre 's এবং @ Stanislav-bashkyrtsev ভাঙ্গা এলেবেলে submodule রেফারেন্স ব্যবহার এলেবেলে ডিরেক্টরি তৈরি করতে এর উত্তর, আমি বিস্মিত যে কেউ কিছু ধারণা এখনো এই সহজ সংশোধনী সুপারিশ করেছে পুরো জিনিস বিবেকী ও নিরাপদ করতে:

বরং এলেবেলে মধ্যে একটি জাল submodule ফাটান , শুধু একটি খালি বাস্তব এক যোগ

প্রবেশ করুন: https://gitlab.com/empty-repo/empty.git

ঠিক একটি প্রতিশ্রুতিযুক্ত একটি জিআইটি সংগ্রহস্থল:

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

পুনরুত্পাদনযোগ্য জিআইটি কমিট তৈরি করা আশ্চর্যরকম কঠিন…


3

আপনি পারবেন না। এটি গিট রক্ষণকারীদের ইচ্ছাকৃতভাবে ডিজাইনের সিদ্ধান্ত। মূলত, গিটের মতো সোর্স কোড ম্যানেজমেন্ট সিস্টেমের উদ্দেশ্য হ'ল সোর্স কোড পরিচালনা করা এবং খালি ডিরেক্টরিগুলি সোর্স কোড নয়। গিটকে প্রায়শই একটি বিষয়বস্তু ট্র্যাকার হিসাবেও বর্ণনা করা হয় এবং আবার খালি ডিরেক্টরিগুলি সামগ্রীতে নয় (একেবারে বিপরীতে, আসলে) তাই সেগুলি ট্র্যাক করা হয় না।


60
আমি এই মতামত প্রতিযোগিতা। কাঠামোটি বিষয়বস্তু, এবং আপনার নামকরণ করা সমস্ত কিছুই সামগ্রীতে অবদান রাখে।
টমাসএইচ

20
একটি খালি ফাইল সোর্স কোড বা সামগ্রী নয়। এটি কেবল একটি নাম। তবুও গিট খুশিতে খালি ফাইলগুলি ট্র্যাক করবে। আমি মনে করি না যে গিট খালি ডিরেক্টরিগুলি ট্র্যাক করতে অস্বীকার করা ইচ্ছাকৃতভাবে নকশার সিদ্ধান্ত ছিল। আমি মনে করি খালি ডিরেক্টরিগুলি ট্র্যাক করা এমন একটি বৈশিষ্ট্য যা কেবলমাত্র 99% সময়ের প্রয়োজন হয় না, তাই তারা এটি সঠিকভাবে কাজ করার জন্য প্রয়োজনীয় অতিরিক্ত কাজ করার জন্য বিরক্ত করেনি। কেউ যদি বৈশিষ্ট্যটি খারাপভাবে প্রয়োগ করতে পারে তবে গিট এটি করতে পারে। আমি সন্দেহ করি গিট রক্ষণকারীরা যদি সঠিকভাবে করা হয় তবে এই জাতীয় প্যাচের বিরোধিতা করা হবে।
ড্যান মোল্ডিং

1
@ টবিএলেন এখানে আপডেট হওয়া প্রায়শই জিজ্ঞাসিত প্রশ্নাবলীর লিঙ্কটি রয়েছে শীর্ষ উত্তরটিও FAQ দ্বারা আরও সুনির্দিষ্ট নির্দেশাবলীর দ্বারা প্রস্তাবিত।
ড্যানিয়েল দা কুনহা

3
এটি একটি অনুপস্থিত বৈশিষ্ট্য (এবং নিম্ন অগ্রাধিকার) নয়, উদ্দেশ্যমূলক সীমাবদ্ধতা নয়। গিট এফএকিউ থেকে: বর্তমানে গিট ইনডেক্সের নকশা (স্টেজিং এরিয়া) কেবলমাত্র ফাইলগুলি তালিকাভুক্ত করার অনুমতি দেয় এবং খালি ডিরেক্টরিগুলিকে অনুমতি দেওয়ার জন্য পরিবর্তন করতে যথেষ্ট সক্ষম কেউই এ পরিস্থিতির প্রতিকারের জন্য যথেষ্ট যত্ন নেয়নি।
jbo5112

সত্যিই একমত না। আমি খালি ফোল্ডারটি কেন ট্র্যাক করতে চাই তার বিভিন্ন কারণ খুঁজে পেতে পারি। উদাহরণস্বরূপ, আমি আমার প্রকল্পগুলির জন্য খুব হালকা পিএইচপি এমভিসি কাঠামো বিকাশ করছি। মডেল, দর্শন ইত্যাদি রাখার জন্য আমার কাছে নির্দিষ্ট ফোল্ডার রয়েছে যখন আমি আমার কাঠামোর ভিত্তিতে কোনও নতুন সাইট তৈরি করি তখন ডিফল্টরূপে কোনও মডেল বা ভিউ না থাকায় এই ফোল্ডারগুলি খালি থাকে, তবে আমার ফোল্ডারটি উপস্থিত থাকতে হবে অন্যথায় আমার কাঠামোটি জিতেছে কাজ হবে না!
গ্ল্যাডেন

2

আপনি এই কোডটি 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.