গিটের সাথে ফাইলটিকে "আপত্তিজনক" হিসাবে চিহ্নিত করুন


41

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

গিটের সাথে কোনও ফাইলকে আপত্তিজনক হিসাবে চিহ্নিত করার কোনও উপায় আছে যাতে এটি গিটহাবে প্রদর্শিত না হয়?


1
স্পর্শিনী পরামর্শ: এই যেহেতু কিছু খুব কনফিগারেশন ফাইলের বিয়ে হয়, যে প্ল্যাটফর্মের উপর প্রযোজ্য নাও হতে পারে, কিন্তু আপনি পরিবেশে এই পরামিতি পালন 12factor পদ্ধতির নিম্নলিখিত বিবেচনা করতে পারে: 12factor.net/config । এটি হ'ল, অ্যাপ্লিকেশন কোডটি কোনও কনফিগারেশন ফাইলের উপস্থিতি কখনই অনুমান করবে না। (কোনও বেসরকারী প্রারম্ভিক স্ক্রিপ্টের বিপরীতে যা এগুলি সেট করে তবে আপনার স্থানীয় মেশিনটি কখনই
ছাড়বে না

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

3
মনে রাখবেন যে সমস্ত উত্তর সত্যই আপনার প্রশ্নের উত্তর দেয় না। তারা ফাইলটি আপত্তিজনকভাবে তৈরি করে না, তারা কেবল গিটটি কনফিগার করে যাতে এটি এটি ডিফল্টরূপে উপেক্ষা করে। তবে আপনি যদি ঘটনাক্রমে গিট কমান্ড লাইনে সেই ফাইলের নামটি সন্নিবেশ করান তবে আপনি এটির অভ্যর্থনা শেষ করতে পারেন যদিও এটি একটি প্যাটার্নের সাথে মেলে .gitignore। এএফআইএইকি gitসমস্ত ক্ষেত্রে একটি নির্দিষ্ট ফাইলের প্রত্যাশা এড়াতে বলার কোনও 100% পূর্ণ প্রমাণের উপায় নেই । যদিও এটি কোনও বৈশিষ্ট্য হিসাবে দেখা যেতে পারে ... জেনেরিক কনফিগারেশনগুলিকে ওভাররাইড করার জন্য সুস্পষ্ট কমান্ডের অনুমতি দেয়।
বাকুরিউ

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

3
@ কুরিয়াসডান্নি যা বলেছিলেন তা ছাড়াও, গিটহাবের একটি সম্পূর্ণ পৃষ্ঠা রয়েছে যাতে আপনি দুর্ঘটনাক্রমে সংবেদনশীল সংবেদনশীল ডেটা কীভাবে সরিয়ে ফেলবেন তা নিয়ে আলোচনা করা হয়েছে। অন্যান্য জিনিসগুলির মধ্যে, এই পৃষ্ঠাটি আপনাকে দুর্ঘটনাক্রমে প্রকাশিত কোনও পাসওয়ার্ড এবং কীগুলি পরিবর্তন করতে বলে help.github.com/articles/remove-sensitive-data
কেভিন

উত্তর:


67

গিটের সাথে কোনও ফাইলকে আপত্তিজনক হিসাবে চিহ্নিত করার কোনও উপায় আছে যাতে এটি গিটহাবে প্রদর্শিত না হয়?

প্রথমত, আপনার স্থানীয় গিট সংগ্রহস্থলে কিছু ফাইল এবং কমিটগুলি দৃশ্যমান হওয়ার কোনও উপায় নেই তবে গিটহাবে কোনওভাবে দেখা যায় না; আপনার যদি গিটে প্রতিশ্রুতিবদ্ধ কোনও ফাইল থাকে তবে এটি গিটহাবে প্রদর্শিত হবে।

দ্বিতীয়ত, কোনও পৃথক ফাইলকে নিজেকে "আপত্তিজনক" হিসাবে চিহ্নিত করার মতো সহজ এবং ব্যবহারিক উপায় নেই is তবে গিট রেপোতে একটি ফাইল অবশ্যই উপেক্ষা করার উপায় রয়েছে: ফাইল (গুলি) যুক্ত করে - তাদের আপেক্ষিক পথ অন্তর্ভুক্ত করে যদি একটি .gitignoreফাইলের প্রয়োজন :

একটি .gitignoreফাইল ইচ্ছাকৃত অপ্র্যাকড ফাইলগুলিকে নির্দিষ্ট করে যা গিটকে এড়ানো উচিত it ইতিমধ্যে গিট দ্বারা ট্র্যাক করা ফাইলগুলি প্রভাবিত হয় না; বিস্তারিত জানার জন্য নীচের নোট দেখুন।

একটি বেসিক তৈরি .gitignoreকরা মোটামুটি সহজ কারণ এটি কেবল একটি সরল পাঠ্য ফাইল। সুতরাং example উদাহরণস্বরূপ I config.phpআপনার মূলে যদি আমার কাছে একটি ফাইল থাকে তবে আপনি এটি করতে পারেন; ধরে নিচ্ছি আপনি পিএইচপি ব্যবহার করছেন তবে ধারণাটি কোনও সেটআপের জন্য প্রযোজ্য। এছাড়াও আমি এই উদাহরণে ন্যানোকে আমার পাঠ্য সম্পাদক হিসাবে ব্যবহার করছি তবে আপনি সাধারণত এটির জন্য যে পাঠ্য সম্পাদকটি ব্যবহার করেন তা নির্দ্বিধায় বোধ করবেন:

nano .gitignore

এবং কেবলমাত্র সেই ফাইলটিতে সেই ফাইলের নাম যুক্ত করুন:

config.php

এটি সংরক্ষণ করুন এবং এখন গিট কেবল সেই ফাইলটিকে উপেক্ষা করবে।

এটি বলেছিল যে, আমি এই জাতীয় সেটআপগুলির জন্য যা করতে চাই তা হল নমুনা / উদাহরণ কনফিগারেশনটি সংবেদনশীল স্পেসিফিকেশনগুলিকে নিবিড় করে সংগ্রহস্থলগুলিতে রাখা যাতে কনফিগার ফাইলের ফর্ম্যাটটি এই জাতীয় নামের কোনও ফাইল যা সম্পর্কে আমার কিছু উল্লেখ রয়েছে:

config.SAMPLE.php

এইভাবে আপনি কীভাবে config.phpফাইলটি সেটআপ করবেন তা সঠিকভাবে জানেন config.SAMPLE.phpএবং আপনি নিশ্চিত করতে পারেন যে config.phpআসলটি কখনই গিটকে স্পর্শ করবে না।

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


11
সঠিক উত্তরের জন্য +1 এবং একটি নমুনা কনফিগারেশন ফাইলের পরামর্শ দেওয়া হচ্ছে। রুবির জন্য ফিগারোর মতো কিছু গ্রন্থাগার রয়েছে যা আপনাকে এই দিকটিতে ঠেলে দেয়। আপনার সত্যিকারের মূল্যবোধের সাথে সমান মানগুলির সাথে প্রতিশ্রুতিবদ্ধ একটি নমুনা ফাইল থাকা উচিত যাতে আপনার কোডটিতে যে ব্যক্তি দেখায় সে পরিবেশের চেহারাটি কেমন হওয়া উচিত তা জানে। কিছু প্ল্যাটফর্ম, হেরোকুর মতো, পরিবেশের ভেরিয়েবলগুলি ব্যবহার করে, যাতে আপনি আপনার কনফিগারেশনটিকে এমন database_url = Environment.DATABASE_URLকোনও কিছুতে সেট করতে পারেন এবং উপরের মত একটি মন্তব্য রেখে যেতে পারেন # postgres://username:password@localhost/dbname
ক্রিস সাইরাফাইস 26:55

@ ক্রিসক্রাইফাইস ধন্যবাদ! আমাকে সর্বদা বিস্মিত করে যে নতুন "সরঞ্জাম" চারপাশে আসে যা আপনাকে অবশ্যই স্পষ্টরূপে মনে করিয়ে দিতে পারে: যদি এই কোডটি অন্য মানুষ দ্বারা পড়তে চলেছে, তবে কোনও কনফিগার কীভাবে কাজ করে তা ঠিক কী করে তা ব্যাখ্যা করে না? আবার ধন্যবাদ.
জ্যাকগল্ড

27

স্যানিটি চেকগুলি প্রয়োগ করতে আপনি প্রাক-কমিট হুকও যুক্ত করতে পারেন। .git/hooksপ্রতিটি গিট সংগ্রহস্থলের ডিরেক্টরিতে কিছু নমুনা স্ক্রিপ্ট থাকে।

ডেকে আনা স্ক্রিপ্টটি pre-commitকার্যকর করা হয় যদি এটি প্রতিটি প্রতিশ্রুতি দেওয়ার আগে উপস্থিত থাকে এবং একটি শূন্য-শূন্য ফেরতের মান কমিটকে বাতিল করে দেয়।

উদাহরণস্বরূপ, আপনার কাছে এটির মতো একটি সাধারণ স্ক্রিপ্ট থাকতে পারে:

#! /bin/sh -e
git ls-files --cached | grep -qx 'filename' && { echo "Excluded file included in the commit" >&2; exit 1; }
exit 0

এবং যদি এটি filenameমেলে, প্রতিশ্রুতি ব্যর্থ হয়।


1
+1 এটি সঠিক উত্তর যা প্রকৃতপক্ষে ফাইলটি যুক্ত করা এবং প্রতিশ্রুতিবদ্ধ হওয়া থেকে বিরত থাকে।
আর ..

প্রকৃতপক্ষে, প্রস্তাবিত অনুশীলনটি এই প্রতিরোধের জায়গায় থাকার উপর নির্ভর না করা (অর্থাত্ পরিবর্তে `.gitignore ব্যবহার করুন)।
ডেভিড জেড

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

2
আমি এটি এমন পরিস্থিতিতে দেখতে পেলাম যেখানে আপনি 100% বিশ্বাস নাও করতে পারেন। Gitignore (আপনি ঘটনাক্রমে গিটকে কমিট করার জন্য ফাইল যুক্ত করার দাবি করতে বোকামি কিছু করতে পারেন)। অথবা অন্য কেউ .gitignore ফাইলটি সম্পাদনা করতে পারে (এটি সর্বোপরি সংস্করণ নিয়ন্ত্রণে রয়েছে)। আপনার যদি সত্যিই একটি পরীক্ষণযোগ্য প্রক্রিয়া প্রয়োজন হয় তবে এটি এমন একটি জিনিস যা আপনি এই জাতীয় প্রক্রিয়াতে কাজ করতে পারেন।
আম্মন কর্ট

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

12

@ জ্যাকগল্ড কী বলেছে। কিছু ক্ষেত্রে আপনি বিশেষ ফাইল বিটগুলির মতো ব্যবহার করতে পারেন skip-worktreeবা assume-unchangedএটি নিম্নলিখিত উপায়ে সেট করা যেতে পারে; উভয়ের মধ্যে পার্থক্যের জন্য, এই স্ট্যাক ওভারফ্লো উত্তরটি দেখুন :

git update-index --assume-unchanged <file>

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


8

.gitignore@ জ্যাকগল্ড বলে মত একটি ব্যবহার করুন । এছাড়াও, কিছু সম্পর্কিত তথ্য:

  • .gitignoreফাইলগুলি ট্র্যাক করা থেকে রক্ষা করে; যদি সেগুলি ইতিমধ্যে ট্র্যাক করা হয় তবে সেগুলি git rm --cachedসরাতে ব্যবহার করুন
  • ফাইল / প্যাটার্নগুলিকেও $GIT_DIR/info/excludeউপেক্ষা করা হবে
  • ফাইলের ফাইলগুলি / প্যাটার্নগুলি ফাইল দ্বারা নির্দিষ্ট করা হয়েছে কারণ ব্যবহারকারীদের মধ্যে ফাইলটি ফাইলগুলি ~/.gitconfigউপেক্ষা করা হয়।

দেখুন কর্মকর্তা গীত ডকুমেন্টেশন আরো বিস্তারিত জানার জন্য।


2

জ্যাক এবং 46 এর উত্তরগুলিতে প্রসারিত করার জন্য: একটি খুব ভাল অনুশীলন হ'ল আপনি ব্যক্তিগত তথ্য অন্তর্ভুক্ত করা ফাইলগুলির জন্য একটি ধ্রুবক বর্ধন করা এবং .gitignoreসর্বদা বিশ্বব্যাপী সেই এক্সটেনশান সহ ফাইলগুলি বাদ দিতে ব্যবহার করুন ( .gitconfigফাইলটি সর্বদা উপেক্ষা করার জন্য অন্যত্র উল্লিখিত হিসাবে ব্যবহার করা) আপনার ব্যবহারকারীর জন্য)।

এইভাবে, আপনি উদাহরণস্বরূপ থাকতে পারেন:

/projectname/mypasswords.exc 

এবং যদি আপনি *.excবিশ্বব্যাপী বাদ পড়ে থাকেন তবে আপনি জানেন যে এটি প্রতিশ্রুতিবদ্ধ হবে না, এমনকি যদি আপনি পৃথকভাবে সেই নির্দিষ্ট ফাইলটি বাদ দিতে ভুলে যান।

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