গিট রেপোতে ফাইল রাখুন, তবে পরিবর্তনগুলি ট্র্যাক করবেন না


305

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

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

// the production config files i want the files but they need to be updated to specific client needs
application/config/production/config.php
application/config/production/database.php
application/config/production/tank_auth.php
// index page, defines the environment (production|development)
/index.php
// all of the css/js cache (keep the folder but not the contents)
/assets/cache/*
// production user based styling (color, fonts etc) needs to be updated specific to client needs
/assets/frontend/css/user/frontend-user.css

বর্তমানে যদি আমি চালান

git clone git@github.com:user123/myRepo.git httpdocs

এবং তারপরে উপরের ফাইলগুলি সম্পাদনা করুন, সব দুর্দান্ত। যতক্ষণ না আমি একটি হটফিক্স বা প্যাচ ছেড়ে চলেছি git pull। আমার সমস্ত পরিবর্তনগুলি ওভাররাইট করা হয়।





আপনি কেবল ক্লায়েন্টের শংসাপত্র / কনফিগারেশন ফাইলগুলিকে উপেক্ষা করতে পারেন এবং প্রোগ্রামটি ডিফল্ট ফাইলগুলি তৈরি করতে সক্ষম হয় যদি তারা রেপো ইনস্টল করা অবস্থায় হারিয়ে যায়?
ম্যাথিউজি

উত্তর:


617

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

git update-index --assume-unchanged FILE_NAME

এবং যদি আপনি পরিবর্তনগুলি আবার ট্র্যাক করতে চান তবে এই কমান্ডটি ব্যবহার করুন:

git update-index --no-assume-unchanged FILE_NAME

গিট-আপডেট-সূচক ডকুমেন্টেশন


আপনি যা বলেছিলেন তা আমি করেছি তবে গিট স্ট্যাটাসটি ফাইলটি সংশোধিত হতে বলা হচ্ছে
rraallvv

7
হ্যাঁ, এটি "স্বীকৃত উত্তর" হওয়া উচিত। আমার জন্য কাজ করেছেন।
joshmcode

34
জুনিও হামানো (গিটের রক্ষণাবেক্ষণকারী) অনুসারে: "ধরে নিন কোনও অবহেলিত ব্যবস্থার জন্য-অপরিবর্তিতকে অপব্যবহার করা উচিত নয়। [...] গিতের দ্বারা প্রতিশ্রুতি দেওয়া হয় না যে গিট সর্বদা এই পথগুলিকে অপরিবর্তিত মনে করবে --- যদি গিত অতিরিক্ত পাথর (2) ব্যয় ব্যতীত অনুমান-অপরিবর্তিত হিসাবে চিহ্নিত এমন একটি পথ নির্ধারণ করতে পারে, পাথটি সংশোধন করা হয়েছে বলে রিপোর্ট করার অধিকার সংরক্ষণ করে (ফলস্বরূপ, "গিট কমিট-এ") প্রতিশ্রুতিবদ্ধ মুক্ত পরিবর্তন)." অন্য কথায়, অনুমান-অপরিবর্তিত কেবল স্থানীয় কর্মক্ষমতা সমস্যার জন্য। গিট যদি নির্ধারণ করতে পারে যে এই ফাইলগুলিকে হালকা উপায়ে পরিবর্তন করা হয়েছে, এটি হবে।
আলেজান্দ্রো গার্সিয়া ইগলেসিয়াস

41
এটির জন্য তথ্য পড়া, আমি মনে করি --skip-worktreeবিকল্প চেয়ে এই কাজ উপযুক্ত হয় --assume-unchanged
পিজেএসকোপল্যান্ড

26
--স্কিপ-ওয়ার্ক্রিট প্রকৃতপক্ষে সর্বোত্তম বিকল্প। আরও তথ্য: stackoverflow.com/questions/13630849/…
কাস্টমাইজার

80

অন্য উত্তরের মন্তব্যগুলির বাইরে একটি উত্তর টানতে:

$ git update-index --skip-worktree FILENAME

এর চেয়ে ভাল বিকল্প বলে মনে হচ্ছে --assume-unchanged

এখানে আরও পড়তে পারেন: গিট - 'অনুমান-অপরিবর্তিত' এবং 'স্কিপ-ওয়ার্কট্রি' এর মধ্যে পার্থক্য


3
ধন্যবাদ। এছাড়াও: medium.com/@igloude/git-skip-worktree-and-how-i-used-to-hate-config-files
aexl

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

নিবন্ধ @aexl দ্বারা সমর্থিত সরানো হয়েছে compiledsuccessfully.dev/git-skip-worktree
অ্যান্ড্রু Keeton

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

58

আমার কোড igniter প্রকল্পের জন্য, আমি রাখা database.php.example এবং config.php.example রেপো হবে।

তারপর আমি যোগ config.php ফাইলটি এবং অ্যাপ্লিকেশন / কনফিগ / database.php করার .gitignore ফাইল।

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


12
চমৎকার সমাধান, তবে আমি মনে করি নাসিরখান এর উত্তর সবচেয়ে ভাল।
শব্দসুখে

এটি একটি ভাল সমাধান নয়। আপনি যদি নিজের গিট সূচকটি ফ্লাশ করেন তবে আপনি যখন বোঝাতে চান না তখন পরিবর্তনগুলি ট্র্যাকিং শুরু করতে যাচ্ছেন। এটি করার সঠিক উপায়ের জন্য @ নাসিরখানস এর উত্তর দেখুন।
ব্রায়ান মেল্টন-গ্রেস - এমএসএফটি

3
আমি পূর্ববর্তী উভয় মন্তব্যের সাথে একমত নই। এইভাবে "ডিফল্ট" মানগুলি চেকআউট না করে আপডেট করা এবং আপনার স্থানীয় কনফিগারেশনটি অন্য কোনও জায়গায় অনুলিপি করে কেবল এটির পরে রাখার জন্য আরও সহজ। এছাড়াও, এটি সমস্ত ভান্ডারগুলিতে প্রযোজ্য যাতে আপনাকে কোনও পুনরাবৃত্তি রেপো-পরিবর্তন করতে হবে না।
OskarD90

1
যদি এটি গিটিংগোরে থাকে তবে কেন এটি আবার পরিবর্তনগুলি ট্র্যাকিং শুরু করবে
শাপিশেফটার

ওপির সমস্যা সমাধান করে তবে সত্যই প্রশ্নের উত্তর দেয় না।
ট্র্যাভিস উইলসন

1

আমি এগুলি আপনার .gitignoreফাইলে রেখে দেবো এবং প্রয়োজন অনুসারে এগুলি নিজেই অনুলিপি করব।

সুতরাং কঙ্কাল ফাইলের নামটি গিটে থাকবে, উপেক্ষা করা ফাইলের নামগুলি গিটে থাকবে না (তবে .gitignore এ থাকবে)। এইভাবে, যখন তাদের 'টেম্পলেট' থেকে 'প্রকৃত' অনুলিপি করার ম্যানুয়াল পদক্ষেপটি করা হয় (সম্ভবত কঙ্কালের চেয়ে ভাল নাম) তখন তা অবিলম্বে উপেক্ষা করা হবে।


1
প্রথমে এগুলিকে রেপোতে যুক্ত করার কোনও উপায় নেই এবং তারপরে .gitignore এ যুক্ত করুন? এটির জন্য যদি ফাইলগুলি অন্তর্ভুক্ত করার কোনও সমাধান হয় তবে নির্দিষ্ট প্রতিশ্রুতি বা কোনও কিছুর পরে কোনও পরিবর্তন হয় না great
gorelative

1
@ এমক্লাউবার আমি চালানো অবধি তাদের অনির্দিষ্টকাল ধরে রাখতে চাই git rm <file>। উদ্দেশ্যটি হ'ল: একটি কনফিগারেশন ফাইল। আমি কনফিগার ফাইলটি রাখতে চাইছি তবে ক্লায়েন্ট থেকে ক্লায়েন্টের ডাটাবেস শংসাপত্রগুলি আলাদা হওয়ায় আমি তা স্পষ্টভাবে দেখতে চাই না।
gorelative

1
হ্যাঁ, আমাদের রেলস ডাটাবেস.আইএমএল ফাইল নিয়ে আমার সমস্যা আছে। আমরা একটি কঙ্কাল রাখি এবং তারপরে এটি অনুলিপি এবং পরিবর্তন করি।
মাইকেল ডুরান্ট

যদি আমি এই "কঙ্কাল" কনফিগার ফাইলগুলি তৈরি করি, আপনি কি তাদের প্রাথমিক প্রতিশ্রুতিতে যুক্ত করবেন? এবং তারপরে ফাইলটি উপেক্ষা করার জন্য .gitignore সংশোধন করছেন? রেজোতে ফাইল রাখার ফল কিন্তু কঙ্কাল হিসাবে?
12

10
আপনার এই দুটি বিকল্প রয়েছে: ফাইলটি যুক্ত করুন git add file1এবং তারপরে আপনার .gitignoreফাইলটি সম্পাদনা করুন। প্রত্যাবর্তিত ফাইলটি সেখানে থাকবে এবং আপডেট হবে না। অথবা আপনি ফাইল যোগ করতে পারেন .gitignoreএবং তারপর সঙ্গে এটি যোগ git add --force file1ফাইল বলপূর্বক আপনি ফাইলটি প্রতিস্থাপন করতে হবে যখনই আপনি 2nd বিকল্প ব্যবহার করতে পারেন।
klaustopher

1

প্রদত্ত উত্তরগুলি সমস্যাটিকে কেবল আংশিকভাবে সমাধান করছে, তবে আরও বেশি সমস্যা প্রবর্তন করছে।

আমার "Web.Local.config" ফাইলটি সংরক্ষণ করা দরকার। আমার পক্ষে কাজ করা একমাত্র সমাধানটি ছিল:

1. প্রকল্পটি থেকে ফাইলটি বাদ দিন

২. Web.LocalTemplate.config হিসাবে ফাইলটির একটি পৃথক অনুলিপি তৈরি করুন

এখন যেহেতু "Web.LocalTemplate.config" গিট দ্বারা ট্র্যাক করা হয়েছে, সমস্ত বিকাশকারী এটিকে একটি প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করতে পারেন। তবে, "Web.Local.config", প্রকল্পের অংশ না হয়ে স্বয়ংক্রিয়ভাবে উপেক্ষা করা হবে।


কীভাবে git update-index --skip-worktree FILENAMEকেবল আপনার সমস্যাটিকে আংশিক সমাধান করা হচ্ছে, বা আরও সমস্যা যুক্ত করা হচ্ছে ?? আপনি যা করতে চাইছেন তা ঠিক এটি সমাধান করে। তুমি কি চেষ্টা করেছ?
আমির আশাইরাফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.