গিট ব্যবহার করে, আমি কীভাবে একটি শাখায় একটি ফাইল উপেক্ষা করব তবে এটি অন্য শাখায় প্রতিশ্রুতিবদ্ধ?


157

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

আমি এটির জন্য সোর্স কোডটি গিটহাবের উপরে রাখতে চাই , তবে গিটহাবের বিনামূল্যে অ্যাকাউন্টে 300 এমবি সীমা রয়েছে। আমি একগুচ্ছ এমপি 3 ফাইলগুলিতে আমার সীমাটির 50 এমবি ব্যবহার করতে চাই না। স্পষ্টতই, আমি .gitignoreতাদের আমার রেপো থেকে দূরে রাখতে ফাইলগুলিতে যুক্ত করতে পারতাম।

যাইহোক, আমি হেরোকু ব্যবহার করে নিযুক্ত git push heroku। এমপি 3 ফাইলগুলিকে অবশ্যই আমি হেরোকুতে চাপছি সেই শাখায় উপস্থিত থাকতে হবে যাতে তারা মোতায়েন হয়ে যায়।

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

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

আমি যা করার চেষ্টা করছি তার একটি উদাহরণ এখানে ...

$ git init git-ignore-test
$ cd git-ignore-test
$ echo "*.ignored" >> .gitignore
$ git add .gitignore && git commit -m "Ignore .ignored files"
$ touch Foo.ignored

এই সময়ে, Foo.ignored আমার মাস্টার শাখায় উপেক্ষা করা হয়, কিন্তু এটি এখনও উপস্থিত, তাই আমার প্রকল্প এটি ব্যবহার করতে পারে।

$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"

এখন আমি যেমন চাই তেমন প্রতিশ্রুতিবদ্ধ ফাইলগুলির সাথে একটি শাখা পেয়েছি। যাইহোক, আমি যখন আমার মাস্টার শাখায় ফিরে যাই, Foo.ignored চলে যায়।

এটি সেট আপ করার জন্য আরও ভাল উপায়ের জন্য কেউ কোনও পরামর্শ পেয়েছেন?

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


কেন MP3 ফাইলগুলিকে না কি সংগ্রহস্থলের করতে প্রতিশ্রুতিবদ্ধ করা প্রয়োজন?
ড্যান লোয়েহের্জেড

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

মনে হচ্ছে আপনি পেনিগুলি বাঁচাতে ডলারের উপর দিয়ে ট্রিপ করছেন ...
র‌্যাকস্পেস ক্লাউডটি

3
আমি লক্ষ্য করেছি আপনি একটি উত্তরটিকে সঠিক হিসাবে চিহ্নিত করেছেন তবে যা পড়েছি তা থেকে সঠিক নাও হতে পারে। আপনি কি আসলেই উত্তরটি চেষ্টা করে দেখেছেন এবং এটি আপনার পক্ষে কার্যকর হয়েছে?
লুপ

2
অফ টপিক: আপনি কি অন্য ওপেন সোর্স সংগ্রহস্থল হোস্টটি ব্যবহারের কথা বিবেচনা করেছেন? ফ্রি অ্যাকাউন্টে থাকুক বা না থাকুক তা বিবেচনা না করেই বিটবকেটের তাদের গিট সংগ্রহস্থলগুলির কোনও আকারের সীমা নেই। (যদিও তারা আকারের কারণের মধ্যে রাখবেন বলে উল্লেখ করেছেন)। যতক্ষণ না আপনার রেপো নিয়ন্ত্রণের বাইরে চলে যাচ্ছে না, ততক্ষণ এটি বিকল্প হতে পারে। দ্রষ্টব্য: আমি বিটবকেটের সাথে যুক্ত নই, কেবল একজন সুখী গ্রাহক।
নাইটওয়েল 888

উত্তর:


84

এই সমাধানটি কেবল গিটের নির্দিষ্ট, প্যাচযুক্ত সংস্করণের জন্য কাজ করে work দেখুন সমাধান নীচে উপস্থিত করার জন্য একটি নতুন উত্তর ইশারা এবং অন্য উত্তর এবং পরবর্তী মন্তব্য ইঙ্গিতে যা সংস্করণ কাজ করতে পারে না।

আমি কীভাবে কার্যকরভাবে excludesfileবিভিন্ন শাখাগুলির জন্য পাবলিক গিথাবের জন্য এবং একটি হিরকু মোতায়েনের জন্য ব্যবহার করতে পারি সে সম্পর্কে একটি ব্লগ পোস্ট লিখেছিলাম ।

এখানে দ্রুত এবং নোংরা:

$ git branch public_viewing
$ cd .git/
$ touch info/exclude_from_public_viewing
$ echo "path/to/secret/file" > info/exclude_from_public_viewing 

তারপরে .git / কনফিগারেশন ফাইলে এই লাইনগুলি যুক্ত করুন:

[core]
excludesfile = +info/exclude


[branch "public_viewing"]
excludesfile = +info/exclude_from_public_viewing

এখন সমস্ত বৈশ্বিক উপেক্ষা স্টাফ info/excludeফাইলের মধ্যে রয়েছে এবং শাখা নির্দিষ্টটি এর মধ্যে রয়েছেinfo/exclude_from_public_viewing

আশা করি এইটি কাজ করবে!

http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches


1
এতক্ষণ নেওয়ার জন্য দুঃখিত .. তবে আপনি যদি .gitignore ফাইলগুলি মুছবেন না তবে এটি প্রথমে ডিফল্ট হবে।
জ্ঞান.মাইন্ড

4
প্রকল্পটি .gitignore ব্যবহার না করে এমনকি এটি আমার পক্ষে কাজ করে না। আপনি এটিকে স্ক্র্যাচ ( git init, ...) থেকে সেট করে কমান্ডের প্রতিলিপি এবং আপনি ব্যবহার করেছেন গিটের সংস্করণ সরবরাহ করার বিষয়ে কি আপত্তি আছে ?
ডিভোর কিউবারিক

34
এই সমাধান কাজ করে না। ব্লগে কিছু আলোচনা হয়েছিল এবং সেখানে কেউই এই কাজটি করতে সক্ষম হয়নি।
spuder


2
ভ্যানিলা গীতে, আমি নিশ্চিত যে এটি কাজ করে না এবং কখনও করেনি। আপনার মধ্যে যারা এটি পুনরুত্পাদন করতে পরিচালিত হয়েছে, আপনি কি আপনার পরিবেশ সম্পর্কে আপনার গিট সংস্করণ এবং অন্যান্য প্রাসঙ্গিক তথ্য ভাগ করতে পারেন? আপনার বিতরণের গিট প্যাকেজ রক্ষণাবেক্ষণকারীদের কাছ থেকে আপনার প্যাচ সংস্করণ থাকতে পারে version
পেলিক

20

গুরুত্বপূর্ণ ইঙ্গিত : জ্ঞান দ্বারা গৃহীত উত্তর। মন কাজ করে না (এখন, বেশ কয়েক বছর ধরে, অথবা সম্ভবত গিটের ভ্যানিলা সংস্করণের জন্য); মন্তব্য দেখুন। এখানে একটি বৈধ উত্তর এবং কার্যকারিতা পাওয়া যাবে:

https://stackoverflow.com/a/29583813/2157640

অন্য বিকল্প বিকল্প (আমার নির্দিষ্ট সমস্যার জন্য কাজ করা, কিন্তু ম্যানুয়াল স্ট্যাশ অপারেশন বা একটি হুক বাস্তবায়নের দাবি) হতে হবে git stash -u -a। পার্থক্য বড় হলে এটি ক্লান্তিকর।

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


14

এই এমপি 3 ফাইলগুলিকে এস 3-এ রাখার বিষয়ে আমি দৃ strongly়ভাবে পরামর্শ দেব। এগুলি আপনার হেরোকু পুশের অংশ হতে পারে (এবং এইভাবে আপনার হেরোকু স্লাগের অংশ) আপনার ডায়ানো প্রারম্ভকালীন সময়টিকে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কমিয়ে দেবে। যেহেতু হেরোকু ইসি 2 ব্যবহার করে, যদি ফাইলগুলি এস 3-এ থাকে এবং কেবলমাত্র আপনার অ্যাপ্লিকেশন দ্বারা অ্যাক্সেস করা হয় (যদি ব্যবহারকারীরা সরাসরি এস 3 এর সাথে লিঙ্ক না থাকে) আপনি কোনও ব্যান্ডউইথ চার্জও দিতে পারবেন না, কেবল 50MB সঞ্চয় করার জন্য চার্জ দিতে হবে।


13

ধরা যাক আমরা buildশাখা ব্যতীত অন্য সমস্ত শাখা থেকে ফোল্ডার উপেক্ষা করতে চাই production। যেমন আমরা buildউত্পাদন ফোল্ডার ধাক্কা করতে চান ।

1) build.gitignore এ অন্তর্ভুক্ত করবেন না। আপনি যদি এটি করেন তবে এটি সর্বদা সমস্ত শাখার জন্য উপেক্ষা করা হবে।

2) exclude_from_public_viewingভিতরে একটি ফাইল তৈরি করুন ./.git/info(এই ফোল্ডারটি ইতিমধ্যে বিদ্যমান) ফোল্ডারtouch ./.git/info/exclude_from_public_viewing

3) ভিতরে exclude_from_public_viewingএকটি লাইন লিখুন (আপনি buildসমস্ত শাখার জন্য উপেক্ষা করার চেষ্টা করছেন )। !build

4) একটি বিদ্যমান ফাইল আছে .git/info/exclude। আমাদের এটিতে নিম্নলিখিত লাইন যুক্ত করা দরকার।

 build

আমরা buildফোল্ডারটি উপেক্ষা করতে চাই তবে এটি .gitignore এ যুক্ত করি নি। তাহলে গিট কীভাবে জানবে কী উপেক্ষা করবেন? উত্তর হ'ল আমরা এটিকে excludeফাইলগুলিতে যুক্ত করছি এবং শর্তাধীনভাবে সেই ফাইলটি পাস করছিgit config

5) এখন আমাদের শাখার buildজন্য শর্তসাপেক্ষে ফোল্ডারটি সরল রাখতে হবে production। নিম্নলিখিত সম্পাদন করতে যে

6) একটি বিদ্যমান ফাইল রয়েছে যা ./.git/configআমাদের নিম্নলিখিত যুক্ত করতে হবে -

ক) excludesfile = +info/excludeনীচে[core]

[core]
     excludesfile = +info/exclude

খ) ./.git/configহিসাবে শেষের দিকে একটি নতুন বিভাগ তৈরি করুন

[branch "production"]
    excludesfile = +info/exclude_from_public_viewing

সমাধান 2

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

1) এটি আপনার gitignoreফাইলে যুক্ত করুন।

2) উত্পাদন শাখায়, কাজ করার সময় git add, buildফোল্ডার যুক্ত করুন:git add -f --all build/


এবং এই গ্রহণযোগ্য সমাধান থেকে পৃথক কিভাবে? গিটের কোন সংস্করণ দিয়ে আপনি এটি পরীক্ষা করেছেন? লিঙ্কযুক্ত উত্তর হিসাবে এটি ব্যর্থ হয়েছে কারণ কেবল branch.<name>.excludesfileগিটের জন্য কোনও সমর্থন নেই (আর?), কেবলমাত্র core.excludesfileএবং আমার নিজের পরীক্ষাগুলি এটিকে নিশ্চিত করেছে বলে মনে হয়েছিল।
মার্ফি

@ মুরফি এটির সাথে কাজ করে git version 2.7.4 (Apple Git-66)এবং আমি branch.<name>.excludesfile আমার সমাধানটি ব্যবহার করি নি ।
sapy

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

সমাধান 2 এমন কিছু ছিল যা আমি সন্ধান করছিলাম। ধন্যবাদ!
ব্য্যাচেস্লাভ কোত্রুটা

4

আপনি কি .Gitignore আপনার শাখায় আলাদা হওয়ার চেষ্টা করেছেন?

যতক্ষণ না সেই শাখায় ফাইলগুলি ট্র্যাক করা না থাকে ততক্ষণ আপনি যে শাখায় রয়েছেন তার ভিত্তিতে আপনি যা চান তা উপেক্ষা করতে সক্ষম হবেন।


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

1
তিনি ইতিমধ্যে বলেছিলেন যে সে কী করেছে। সম্ভবত এই উত্তরটি মুছে ফেলা সবচেয়ে ভাল হতে পারে :-) যার ফলে ব্যাঘাত ঘটে।
ব্লেম

3

1. সংক্ষিপ্তসার

  1. আমি মোতায়েনের জন্য ট্র্যাভিস সিআই ব্যবহার করি ( এটি হেরোকু মোতায়েন সমর্থন করে )
  2. আমি আমার যোগ .travis.yml:

    before_deploy:
    - mv misc/.gitignore .gitignore

    যেখানে misc- যে কোনও ফোল্ডারে অন্য একটি রয়েছে .gitignore

    mvইউনিক্স কমান্ড মুভ ফাইল; ওভাররাইট, যদি ফাইল ইতিমধ্যে বিদ্যমান থাকে।

ট্র্যাভিস সিআই যখন প্রকল্প স্থাপন করে, ট্র্যাভিস সিআই সরবরাহকারী ফাইল এবং ফোল্ডার স্থাপনের দিকে ধাক্কা দেবে না , যা এড়ানো হয় misc/.gitignore( .gitignoreউত্সগুলির মূল ক্ষেত্রে নয় )।


2. সীমাবদ্ধতা

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

3. প্রাসঙ্গিকতা

এই উত্তর এপ্রিল 2018 এর জন্য প্রাসঙ্গিক the ভবিষ্যতে এই উত্তরের ডেটা অপ্রচলিত হতে পারে।


৪. বিক্ষোভ

আমার বাস্তব প্রকল্পের

সফল স্থাপনার উদাহরণ

4.1। কার্য

আমি আমার প্রকল্পটি এসসিআর শাখা থেকে একই সংগ্রহস্থলের ডেস্ট শাখায় স্থাপন করি।

আমি চাই, ফাইলটি PaletteMira.suricate-profile:

  • স্থানীয় মেশিন - সমস্ত শাখার জন্য বিদ্যমান,
  • src রিমোট শাখা - বিদ্যমান নেই,
  • গন্তব্য দূরবর্তী শাখা - বিদ্যমান।

আমি যদি প্রশ্নের লেখককে সঠিকভাবে বুঝতে পারি তবে তারও একই কাজ রয়েছে।

4.2। src

উত্স শাখা - SashaYAML

এর অংশ .travis.yml:

before_deploy:
- mv misc/.gitignore .gitignore

deploy:
  provider: pages
  on:
    branch: SashaYAML
  keep-history: true
  skip-cleanup: true
  target-branch: SashaDevelop
  repo: Kristinita/PaletteMira
  github-token: $GITHUB_TOKEN
  committer-from-gh: true
  project-name: PaletteMira
verbose: true

এর অংশ .gitignore:

*.sublime-snippet
*.suricate-profile

অংশ বিশেষ misc/.gitignore

*.sublime-snippet

*.suricate-profileনা misc/.gitignore

PaletteMira.suricate-profile দূরবর্তী অবস্থান থেকে এই শাখায় বিদ্যমান নেই, তবে স্থানীয়ভাবে বিদ্যমান।

4.3। DEST

গন্তব্য শাখা - সাশাডেভলভ

এর অংশ .gitignore:

*.sublime-snippet

*.suricate-profileনা misc/.gitignore

PaletteMira.suricate-profileএই শাখার জন্য দূরবর্তী ও স্থানীয়ভাবে বিদ্যমান ।

4.4। ধাপ পুনর্গঠন কর

আমি ট্র্যাভিস সিআই-এর জন্য প্যালেটমিরা গিটহাবের সংগ্রহস্থল সক্ষম করি environment আমি পরিবেশের$GITHUB_TOKEN সাথে মানের সাথে ভেরিয়েবল সেট করি- আমার গিটহাব টোকেন myআমি আমার এসআরসি শাখায় যে কোনও প্রতিশ্রুতিবদ্ধ।

কোনও ত্রুটি না হলে, আমার অবশ্যই প্রত্যাশিত আচরণ পেতে হবে


0

আপনি কি হিরোকু থেকে প্রতিশ্রুতিবদ্ধ এবং ধাক্কা দিতে পারেন?

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


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