স্থানীয় পরিবর্তন রেখে গিট টান


132

উপরে প্রবাহের পরিবর্তনগুলি থাকা সত্ত্বেও আমি কীভাবে নিরাপদে একটি গিট প্রকল্প আপডেট করতে পারি (টানতে)?

myrepo / কনফিগ / config.php ফাইলটি

এর কোনও উপায় আছে কি, এমনকি যদি এই ফাইলটি রিমোটে পরিবর্তিত হচ্ছিল, যখন আমি গিট টানাম, তখন সমস্ত কিছু আপডেট হয় তবে এই ফাইলটি অপরিবর্তিত (এমনকি একীভূতও হয়নি)?

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

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

git assume-remote-unchanged file1
git assume-remote-unchanged file2

তারপর git pull


পরিবর্তনগুলি config.phpপ্রতিশ্রুতিবদ্ধ হয়?
লংগায়ারকে


এটা প্রতিশ্রুতিবদ্ধ না। আমি বরং করব না
জনি এভারসন

@ ঝননিএভারসন: এটি একই সামগ্রিক শ্রেণির সমস্যা (আপনার একটি কনফিগারেশন ফাইল রয়েছে এবং আপনি নির্দিষ্ট সেটিংস প্রতিশ্রুতি দিতে চান না, তবে কনফিগারেশন ফাইলের কাঠামোটি ট্র্যাক করা দরকার))
দেনিথ

উত্তর:


248

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

git stash
git pull
git stash pop

স্ট্যাশ পপগুলিতে বিবাদ হতে পারে। আপনি যে ক্ষেত্রে বর্ণনা করেছেন সেখানে আসলে দ্বন্দ্ব হতে পারে config.php। তবে, সংঘাত নিরসন করা সহজ কারণ আপনি জানেন যে আপনি স্ট্যাশকে যা রেখেছিলেন তা আপনি চান you সুতরাং এটি করুন:

git checkout --theirs -- config.php

5
এই গিট চেকআউট - তাদের কমান্ডটি খুব বিভ্রান্তিকর। এটি আমি যা চেয়েছিলাম তা করেছিল এবং অন্যবার সত্যিই খারাপ কিছু ঘটেছিল। এটিতে কোনও ভাল ডকুমেন্টেশন আছে?
মিলিমেট্রিক

3
হ্যাঁ, কখনও কখনও 'তাদের' এবং 'আমাদের' বিভ্রান্ত হতে পারে। একটি git merge'আমাদিগের কি পরিশ্রমী ডিরেক্টরির মধ্যে বর্তমানে হয়। তবে একটি git rebase(বা git rebase -onto) অর্থটি অদলবদল করতে পারে।
GoZoner

1
git stash , git pull , git stash apply আপনি এর সাথে স্ট্যাশ ফেলে দিতে পারেন: git stash dropএকবার আপনি পরিবর্তনগুলি সফলভাবে মার্জ করুন
বিয়িংসুমান

11
গিটের জিনিসটি হ'ল এটি আপনাকে কী করতে চলেছে তা বুঝতে হবে। গিটের সাথে অন্যটি জিনিস হ'ল স্মার্ট লোকদের জন্যও গিট কী করবে তা বোঝা প্রায়শই খুব কঠিন difficult
ব্র্যাড থমাস

1
সত্যিকারের স্ট্যাশ করার মতো কিছু আছে কিনা তা আপনার পরীক্ষা করা উচিত। অন্যথায় আপনি পূর্বের থেকে স্ট্যাশড পরিবর্তনগুলি পপ করবেন git stash
জার্ন রিমার্ডেস

15

আপনার রেপোতে যদি এমন কোনও ফাইল থাকে যা এটি বেশিরভাগ চালক দ্বারা কাস্টমাইজড বলে মনে করা হয়, তবে ফাইলটির নতুন কিছু নামকরণ config.php.templateকরুন config.phpএবং আপনার যুক্ত করুন .gitignore


5
এই উত্তরটিও পরীক্ষা করে দেখুন, আপনি .gitattributesমার্জ করার সময় আপনার পরিবর্তনগুলি সর্বদা রাখতে ব্যবহার করতে পারেন ।
কুর্জেডমেটাল

এটি আমার প্রয়োজনের মতোই। টেম্পলেট জিনিস হ'ল মার্জিত সমাধান তবে আমি ভয় করি যে আমি এটি ব্যবহার করতে পারছি না কারণ আমি কেবল স্ক্রিপ্টগুলি স্থাপন করি।
জনি এভারসন

6

আপডেট: এটি আক্ষরিক অর্থে জিজ্ঞাসিত প্রশ্নের উত্তর দেয়, তবে আমি মনে করি কুর্জেডমেটেলের উত্তরটি আপনি যা চান তা সত্যই।

ধরে নিচ্ছি যে:

  1. আপনি শাখায় আছেন master
  2. মূল প্রজেক্টের শাখা masterমধ্যেorigin
  3. আপনার কোনও আপত্তিজনক পরিবর্তন নেই

.... আপনি করতে পারেন:

# Do a pull as usual, but don't commit the result:
git pull --no-commit

# Overwrite config/config.php with the version that was there before the merge
# and also stage that version:
git checkout HEAD config/config.php

# Create the commit:
git commit -F .git/MERGE_MSG

আপনার যদি ঘন ঘন এটি করার প্রয়োজন হয় তবে আপনি এটির জন্য একটি উপনাম তৈরি করতে পারেন। মনে রাখবেন যে আপনার যদি বিনা অনুমতিতে পরিবর্তনগুলি করা থাকে তবে config/config.phpএটি তাদের ফেলে দেবে।



1

প্রশ্নের উত্তরের জন্য: আপনি যদি একটি চেকআউটের কয়েকটি ফাইল বাদ দিতে চান তবে স্পার্স-চেকআউট ব্যবহার করতে পারেন

1) মধ্যে .git/info/sparse-checkout, আপনি কি রাখতে চান তা নির্ধারণ করুন। এখানে, আমরা সমস্ত (*) চাই কিন্তু (বিস্মৃত চিহ্নটি নোট করুন) কনফিগারেশন: পিএফপি:

 /*
 !/config.php

2) গিটকে আপনি অ্যাকাউন্টে বিরল-চেকআউট নিতে চান তা বলুন

 git config core.sparseCheckout true

3) আপনি যদি ইতিমধ্যে স্থানীয়ভাবে এই ফাইলটি পেয়ে থাকেন, তবে একটি বিচ্ছিন্ন চেকআউটটিতে গিট কী করবে তা বলুন (এটিতে "স্কিপ-ওয়ার্ক্রিট্রি পতাকাটি সেট করে এই ফাইলটি বাদ দিতে হবে)"

git update-index --skip-worktree config.php

৪) একটি কনফিগারেশন উপভোগ করুন যেখানে আপনার কনফিগারেশন.এফপি ফাইলটি আপনার - रिपোরিটরিতে যে কোনও পরিবর্তন আসুক।


দয়া করে নোট করুন কনফিগারেশন মানগুলি উত্স নিয়ন্ত্রণে থাকা উচিত নয়:

  • এটি একটি সম্ভাব্য সুরক্ষা লঙ্ঘন
  • এটি মোতায়েনের জন্য এই জাতীয় সমস্যার সৃষ্টি করে

এর অর্থ এই যে আপনি এগুলি অবশ্যই বাদ দিন (প্রথমে প্রতিশ্রুতি দেওয়ার আগে তাদেরকে .gitignore এ রাখুন), এবং প্রতিটি অ্যাপ্লিকেশন যেখানে আপনি আপনার অ্যাপ্লিকেশনটি চেকআউট করেছেন সেখানে একটি উপযুক্ত ফাইল তৈরি করুন (একটি "টেমপ্লেট" ফাইল অনুলিপি করে এবং গ্রহণ করে)

মনে রাখবেন, একবার কোনও ফাইলকে গিট দ্বারা চার্জ দেওয়ার পরে .gitignore এর কোনও প্রভাব পড়বে না।

প্রদত্ত যে, একবার ফাইলটি উত্স নিয়ন্ত্রণে চলে গেলে আপনার কেবল দুটি পছন্দ () রয়েছে: - ফাইলটি সরিয়ে রাখতে আপনার সমস্ত ইতিহাস পুনরায় চালু করুন (সহ git filter-branch) - ফাইলটি সরিয়ে দেয় এমন একটি প্রতিশ্রুতি তৈরি করুন। এটি হেরে যাওয়া লড়াইয়ের মতো, তবে, ভাল, কখনও কখনও আপনাকে তার সাথে বেঁচে থাকতে হয়।


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