আমি কীভাবে গিটকে কোনও ফাইলে ভবিষ্যতের সংশোধনগুলি উপেক্ষা করতে পারি?


140

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

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

আমরা সাধারণত বেশ অলস এবং git add .প্রচুর ব্যবহার করি, তাই আমি নিশ্চিত যে আমি এই ফাইলটিকে উপেক্ষা করতে গিটকে বলতে না পারলে এর পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ এবং ধাক্কা খেয়ে শেষ হবে।

সংক্ষেপ,

  1. আমি একটি ফাইল তৈরি করতে চাই, এটি কল default_values.txt যা আমার গিট রিপোজিটরিতে যুক্ত হয়েছে এবং যখন কেউ সেই সংগ্রহস্থলটিকে ক্লোন করে ফেলে তখন তা অন্তর্ভুক্ত থাকে।
  2. git add .প্রতিশ্রুতি যুক্ত করা উচিত নয় default_values.txt
  3. এই আচরণটি সংগ্রহস্থলের কোনও ক্লোনকে দেওয়া উচিত।

1
প্রি-কমিট হুক রাখতে আপনি গিট হুক ব্যবহার করতে পারেন যা কোনও ফাইলকে পরিবর্তন করা যদি ডিফল্ট_ভ্যালিউস.টিএসটি (বলুন) হয় তবে একটি প্রতিশ্রুতি বাতিল করতে হবে?
সতীশ

1
গিট পিউরিস্টরা বলবেন অলস হবেন না এবং মঞ্চের জায়গাটি সঠিকভাবে ব্যবহার করবেন না, এটি তার জন্য।
Xint0

গিট পিউরিস্টরা বলতেন স্মাড / ক্লিন স্ক্রিপ্ট ব্যবহার করুন। এটি সবচেয়ে রক্ষণাবেক্ষণযোগ্য সমাধান।
অ্যাডাম ডাইমিট্রিক

1
Xint0: সত্য। তবে কীভাবে আপনি অন্য লোককে দুর্ঘটনাক্রমে চেক ইন করতে বাধা দেন?
অ্যালান

উত্তর:


115

অন্য অনেকে যেমন উল্লেখ করেছেন, একটি ভাল আধুনিক সমাধান হ'ল:

git update-index --skip-worktree default_values.txt

স্থানীয় এবং উজানের উভয় ক্ষেত্রেই সেই ফাইলটির পরিবর্তনগুলি অগ্রাহ্য করা হবে যতক্ষণ না আপনি তাদের সাথে আবার অনুমতি দেওয়ার সিদ্ধান্ত নেন:

git update-index --no-skip-worktree default_values.txt

আপনি যে ফাইলগুলি এড়িয়ে গেছেন তা চিহ্নিত করার জন্য একটি তালিকা পেতে পারেন:

git ls-files -v . | grep ^S

মনে রাখবেন যে এর বিপরীতে --skip-worktree, স্ট্রাস্টগুলি --assume-unchangedএকবার প্রবাহের পরিবর্তনটি টেনে আনার পরে হারিয়ে যাবে।


2
যদি অন্য কেউ রেপো টানেন এবং ফাইলটি সম্পাদনা করেন তবে তাদের ডিরেক্টরিতে পরিবর্তনগুলি কি এড়ানো হবে? আমি আশা করছি --no-skip-worktreeতাদের পরিবর্তনগুলি যুক্ত করতে তাদের টাইপ করতে হবে।
নিউউউজিক

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

3
মনে রাখবেন যে --skip-worktreeএকই শাখায় অন্য শাখায় ট্র্যাক করা থাকলে শাখাগুলি স্যুইচ করার আগে আপনাকে কোনও ফাইলের স্থিতি পূর্বাবস্থায় ফেলা হতে পারে ।
মুডবুম

3
হুম, এটি কাজ করে ... আমি ফাইলটিতে কিছু পরিবর্তন করার পরে এটি প্রদর্শিত হয় নি git status, তবে যখন আমি বিভিন্ন শাখায় চেকআউট করার চেষ্টা করেছি error: Your local changes to the following files would be overwritten by checkout: , তখনও পেয়েছি , এমনকিerror: Entry 'wix-stores-merchant-app/demo/credentials.js' not uptodate. Cannot merge.
ykravv

1
আমি এগুলি git ignoreএবং এর সাথে এলিয়াস দিয়েছি git unignore
মাইকেল

48

আপনি যা অনুসন্ধান করছেন তা হ'ল git update-index --assume-unchanged default_values.txt

আরও তথ্যের জন্য ডকগুলি দেখুন: http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html


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

6
হ্যাঁ, আপনি এটি কেবল স্থানীয় রেপোর জন্য সেট করছেন। আপনি এই ধরণের তথ্য ঠেলাতে পারবেন না।
তমসাদ

8
@ ইন্দ্রাধানুশ - এই সমাধানটি 3 মাপদণ্ড পূরণ করে না - "আচরণটি কোনও ভাণ্ডারের ভান্ডারকে দেওয়া উচিত" - এ কারণেই আমি এটি গ্রহণ করি নি। এর অর্থ এই নয় যে এটি একটি ভাল উত্তর নয়।
মার্চ

আমি কখনও তৃতীয় মানদণ্ড লক্ষ্য করিনি noticed কারণ আমি এটি খুঁজছিলাম না। :)
ইন্দ্রধনুশ গুপ্ত

3
ব্যক্তিগত অ্যাপ্লিকেশন সেটিংস সহ স্থানীয় কনফিগারেশন ফাইলগুলির জন্য, আপনি সম্ভবত আরও তথ্যের skip-worktreeপরিবর্তে স্ট্যাকওভারফ্লোassume-unchanged
অ্যারন হফম্যান

22

আমি সাধারণত যে পদ্ধতিটি দেখেছি তা হ'ল আলাদা নাম দিয়ে একটি ফাইল তৈরি করা, যেমন: default_values_template.txt এবং আপনার .gitignore এ default_values.txt স্থাপন করুন। লোকদের তাদের স্থানীয় কর্মক্ষেত্রে default_values_template.txt কে default_values.txt অনুলিপি করতে এবং প্রয়োজনীয় পরিবর্তন করতে নির্দেশ দিন।


হুঁ ... সম্ভবত আমি ডিফল্ট_মূল্যগুলি উপস্থিত না থাকলে ডিফল্ট_মূল্যগুলিতে স্বয়ংক্রিয়ভাবে কপি করতে একটি হুক লিখতে পারি?
মার্চ

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

আমি মনে করি সমাধানটি হ'ল এটির মতোই কিছু করা ভাল, যখনই আপনি টানুন বা ক্লোন করবেন তখনই কার্যকরভাবে স্ক্রিপ্ট কার্যকর করা হবে। একটি ধারণাটি হ'ল কোনও নির্দিষ্ট এক্সটেনশনের (যাকে .basefile বলতে হবে) কোনও ফাইলই এক্সটেনশানটি হ্রাসের সাথে অনুলিপি হয়ে যায় এবং তারপরে সেই ডিরেক্টরিতে ফাইলটির নাম .gitignore এ যুক্ত হয়। সুতরাং আমি একটি ফাইল default_values.txt.basefile তৈরি করব এবং এটি প্রতিশ্রুতিবদ্ধ করব। এটি করার জন্য আমার কাছে গিট বা পার্ল চপ নেই, তবে আমি এমন এক বন্ধুকে জিজ্ঞাসা করব যিনি এটি করেন এবং আপনাকে কীভাবে এটি কার্যকর হয় তা আপনাকে জানান।
মার্ক

1
@ অ্যাডামডিমরট্রিক: হ্যাঁ, পরিষ্কার / ধুয়ে এই ক্ষেত্রে ব্যবহার করা যেতে পারে তবে এটি সবচেয়ে ভাল বিকল্প যে এটি পরিষ্কার নয়। উদাহরণস্বরূপ, এটি করতে হবে বরং এটা কঠিন মানুষ সত্যিই যদি চান ফাইল পরিবর্তন করতে, যেমন পরিচ্ছন্ন / ছাপ ভাবে পেতে হবে। আমি এখানে বর্ণিত পদ্ধতির পছন্দ করব।
স্ল্যাশ

1
আমি গিট থেকে নিজেই একটি .sampleসংকেত গ্রহণ করি (বিশেষত গিট হুকস) এবং প্রত্যয়টি ব্যবহার করি । সুতরাং আপনার ক্ষেত্রেdefault_values.txt.sample
tir38

5

স্মাড / ক্লিন স্ক্রিপ্টিং একবার দেখুন। এইভাবে আপনি ফাইলটি সংস্করণ করতে পারবেন তবে এটি পরীক্ষা করার পরে আপনি ফাইলটিতে জেনেরিক / প্লেস-হোল্ডার ডেটা প্রতিস্থাপনের মাধ্যমে "ধাক্কা" দেবেন।

আপনি যখন এটি প্রতিশ্রুতিবদ্ধ করবেন, আপনি জেনেরিক বা স্থানধারক তথ্যের সাথে মেশিনের নির্দিষ্ট তথ্য প্রতিস্থাপন করে এটি "পরিষ্কার" করবেন।

স্ম্যাজ / ক্লিন স্ক্রিপ্টগুলি অবশ্যই একাধিকবার প্রয়োগ করার ক্ষেত্রে নির্ধারিত হতে হবে, বিভিন্ন ক্রমে কেবল ক্রমের শেষটি চালানোর সমতুল্য হবে।

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


ক্লিন এবং স্মাড স্ক্রিপ্টগুলি স্থানীয় বা রেপোর কিছু অংশ?
অ্যালান

হ্যাঁ. :) ... অর্থাৎ, আপনি রেপোর মাধ্যমে ধুয়ে পরিষ্কারটি ভাগ করতে পারেন তবে যখন তারা উত্পাদন পাসওয়ার্ডের মতো সংবেদনশীল ডেটা রাখে তখন এটি ভাল ধারণা নয়। যদি এটি উদ্বেগের বিষয় না হয় তবে গিটের জন্য আপনাকে স্পষ্টভাবে স্ক্রিপ্ট সক্ষম করতে হবে। অন্যথায়, লোকেরা গিথুব এবং অন্যান্য ব্যবহারকারীর কাছে ভাগ করা রেপোর মাধ্যমে দূষিত কাজ করতে পারে।
অ্যাডাম ডিমিটরুক

এই সম্পর্কে আমার আরও কিছু পড়া দরকার। মূলত আমি এমন একটি প্রকল্প সেটআপ করতে চাই যেটির একটি ডিফল্ট থাকে user.jsonযা প্রতিটি বিকাশকারীদের ক্রেডিট দিয়ে ওভাররাইট করা প্রয়োজন, তবে আমি দেব না যে দুর্ঘটনাক্রমে তাদের ক্রেডিটগুলি চেক করা উচিত।
অ্যালান

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

3

আমি সূচকটিতে কেবলমাত্র ফাইলের বিষয়বস্তুগুলি বিড়াল করতে "পরিষ্কার" ফিল্টারটি সংজ্ঞায়িত করে সমাধান করেছি।

git show :path/to/myfile নির্দিষ্ট ফাইলের জন্য সূচির বিষয়বস্তুগুলি কেবল মুদ্রণ করা উচিত, তাই আমরা কোনও স্ক্রিপ্টে এটি ব্যবহারের অনুলিপিটিকে সূচীতে অপছন্দ অনুলিপিটির সাথে প্রতিস্থাপন করতে পারি:

#! /bin/sh

git show :$1

সম্পর্কিত ফাইলটির জন্য এটি "পরিষ্কার" ফিল্টার হিসাবে সেট করুন (ধরে নিবেন যে আপনি এটি "ফেলে দিন_চঞ্চল" এ রেখেছেন):

$ git config filter.ignore_myfile.clean "discard_changes path/to/myfile"
$ echo "path/to/myfile filter=ignore_myfile" >> .gitattributes

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


1

আমি এমন একটি সমাধান পেয়েছি যা আমার দলের পক্ষে কাজ করে। আমরা আমাদের গিথুকগুলি সিমলিংকের মাধ্যমে শেয়ার করি এবং গিটে একটি টেম্পলেট ফাইল যুক্ত করার পরে আমি একটি প্রাক-কমিট হুক যুক্ত করেছি যা পরীক্ষা করে যে টেমপ্লেট ফাইলটি পরিবর্তন করা হয়েছে কিনা এবং যদি আমি তাই git reset -- templatefile.txt। এটি যদি কেবলমাত্র পরিবর্তিত ফাইল হয় তবে আমিও প্রতিশ্রুতি বাতিল করি।


-1

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


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

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

@Marc one more thing that I find really handy about it is that I can set up as many accounts as I want, so if I am writing a project for a client who wants to own the source control I can create an account, use it to plan, design and execute the project and when I am finished I can pass ownership of the account to the client.
Aran Mulholland
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.