গিট - সংযুক্তির সময় ফাইলগুলি উপেক্ষা করুন


114

আমার একটি myrepoরিমোট beanstalkসার্ভারে কল হয়েছে।

আমি এটি আমার স্থানীয় মেশিনে ক্লোন করেছি। দুটি অতিরিক্ত শাখা তৈরি: stagingএবং dev। এই শাখাগুলি দূরবর্তী স্থানেও ঠেলাঠেলি করে।

এখন:

 local                   remote                   server
 --------------------------------------------------------  
 master  ==> Pushes to  `master`  ==> deployed to `prod`
 staging ==> Pushes to  `staging` ==> deployed to `staging`
 dev     ==> Pushes to  `dev`     ==> deployed to `dev`

আমার কাছে একটি ফাইল রয়েছে config.xmlযা প্রতিটি শাখায় আলাদা।

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

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

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

ধন্যবাদ!


এর ডিফল্ট মোডে, গিট টান গিট আনার জন্য শর্টহ্যান্ড এবং তারপরে গিট মার্জ FETCH_HEAD করা হবে। সুতরাং আপনি বিবৃতি একে অপরের সাথে মতবিরোধ।
zzk

ঠিক আছে, আমি বলব, এর চেকআউট। টান না। প্রশ্নটি পরিষ্কার হওয়ার জন্য আপডেট করব।
কেভিন রাভ


2
আপনি কি কখনো এই একটি সমাধান খুঁজে পেয়েছেন? গিট বৈশিষ্ট্যগুলি কেবলমাত্র সেই ক্ষেত্রে কার্যকর যেখানে ফাইলটি শাখাগুলির একত্রিত হওয়ার মধ্যে দ্বন্দ্ব রয়েছে তাই এটি সর্বদা পর্যাপ্ত নয়।
পভিনিস

আপনি কি প্রতীকী (গিট দ্বারা অনুসরণ করা হয় না) বা উদ্ধারের শক্ত লিঙ্কগুলিতে সন্ধান করেছেন?
ফ্র্যাঙ্ক নোক

উত্তর:


94

--no-commitঅপশনটির সাথে গিট মার্জ কমান্ডটি ব্যবহার করে আমি এই সমস্যাটি পেরেছি এবং তারপরে স্পষ্টভাবে স্টেজড ফাইলটি সরিয়েছি এবং ফাইলটির পরিবর্তনগুলি উপেক্ষা করছি। উদাহরণস্বরূপ: বলুন যে আমি myfile.txtনিম্নলিখিত হিসাবে এগিয়ে চলেছি কোনও পরিবর্তন উপেক্ষা করতে চাই:

git merge --no-ff --no-commit <merge-branch>
git reset HEAD myfile.txt
git checkout -- myfile.txt
git commit -m "merged <merge-branch>"

আপনি যদি এড়িয়ে যাওয়ার জন্য ফাইলগুলির একটি তালিকা রেখে থাকেন তবে লুপের জন্য একটি এবং স্টেটমেন্টগুলিতে 2 এবং 3 রাখতে পারেন।


2
দ্রুত-ফরওয়ার্ড কৌশলে মার্জ হওয়ার পরে যদি আপনি কোনও ফাইল ওভাররাইট না করে চান তবে আমি "--no-ff" যুক্ত করব।
ইলিয়া শাকিতকো

1
সুতরাং git reset HEAD myfile.txtঠিক কি করে ? কীভাবে এটি এখানে আমাদের লক্ষ্যে সহায়তা করে?
কিড_লিয়ার্নিং_সি

লুপটিতে আপনি 2 এবং 3 টি কীভাবে রাখবেন?
অ্যান্ড্রয়েডদেভ

52

আমি গিট সন্ধান শেষ attributes। চেষ্টা করে যাচ্ছি। এখন পর্যন্ত কাজ করা। সমস্ত পরিস্থিতিতে এখনও চেক করা হয়নি। তবে সমাধান হওয়া উচিত।

কৌশলগুলি মার্জ করুন - গিট বৈশিষ্ট্য


4
কিন্তু আমি এই পাওয়া git-scm.com/book/ch7-2.html#Merge-Strategies
Nate-

1
গিট অ্যাট্রিবিউট ডক্সের মার্জ কৌশলগুলি বিভাগের জন্য এখানে সঠিক লিঙ্কটি দেওয়া হয়েছে: git-scm.com/book/en/v2/…
অ্যাড্রিয়ান

3
পাওয়া যায় নি এই ভাল একটি প্রবন্ধে ব্যাখ্যা medium.com/@porteneuve/...
ShawnFeatherly

9
কোথাও কোন্দল না থাকলে সমস্যা বলে মনে হচ্ছে? ফাইলগুলি এখনও একীভূত হবে?
ব্রেট

18

.gitattributes - আপনার সংগ্রহস্থলের একটি মূল স্তরের ফাইল যা ফাইলের উপ-ডিরেক্টরি বা উপসেটের জন্য বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে।

আপনি গিটকে একটি নির্দিষ্ট ফাইলের জন্য আলাদা মার্জ কৌশল ব্যবহার করতে বলে বৈশিষ্ট্যটি নির্দিষ্ট করতে পারেন। এখানে, আমরা config.xmlআমাদের শাখার জন্য বিদ্যমান সংরক্ষণ করতে চাই । আমাদের ফাইলটি merge=oursটু config.xmlইন সেট করতে .gitattributesহবে।

merge=ours গিটকে আমাদের (বর্তমান শাখা) ফাইলটি ব্যবহার করতে বলুন, যদি মার্জ সংঘাত দেখা দেয়।

  1. .gitattributesসংগ্রহস্থলের মূল স্তরে একটি ফাইল যুক্ত করুন

  2. আপনি .gitattributesফাইলটিতে confix.xml এর জন্য একটি বৈশিষ্ট্য সেট আপ করতে পারেন

    config.xml merge=ours
    
  3. এবং তারপরে একটি ডামি আমাদের মার্জ কৌশলটি এর সাথে সংজ্ঞা দিন:

    $ git config --global merge.ours.driver true
    

যদি আপনি stagফর্ম devশাখাটি মার্জ করে থাকেন তবে কনফিগ.এক্সএমএল ফাইলের সাথে একত্রীকরণের দ্বন্দ্বের পরিবর্তে, স্টাগ ব্রাঞ্চের কনফিগারেশন.এক্সএমএল আপনার যা সংস্করণ ছিল তা সংরক্ষণ করুন।


15
তবে বিরোধ না থাকলে কী হবে? মার্জ করার সময় একটি নির্দিষ্ট ফাইল কীভাবে সর্বদা রাখবেন?
ইগর ইয়ালভয়

2
@IgorYalovoy: যদি কোন দ্বন্দ্ব নেই ... ভাল, এই একটি সামান্য চতুর যেমন আসলে হ্যাশ ID থেকে শুরু করে, কিন্তু যদি config.xmlহয় সম্পূর্ণরূপে অপরিবর্তিত পারেন শাখা ডগা সংস্করণে একত্রীকরণ বেস থেকে, গীত এইমাত্র পরিবর্তন সংস্করণ লাগে, ছাড়া merge.ours.driverসেটিং এ খুঁজছেন । সুতরাং আপনি উদ্বিগ্ন হতে সঠিক।
টোরিক

1
গিট ডক্স থেকে অনুলিপি করুন: কৌশলগুলি মার্জ করুন - গিট বৈশিষ্ট্য। লিঙ্ক
kyb

এই পদ্ধতির ফলে প্রতিবার FYI "মার্জ কমিট" হয়।
আরএসমেট

2
"আমাদের" নতুন কৌশল চালু হওয়ার জন্য একটি স্বেচ্ছাসেবী নাম হিসাবে উপস্থিত বলে মনে হচ্ছে। আমি এটি বিভ্রান্তিকর পেয়েছি, কারণ theirsএটি একটি অন্তর্নির্মিত মার্জ কৌশল। কিন্তু মনে হচ্ছে যে এক লিখতে পারেন <pattern> merge=foo, তাহলে git config --global merge.foo.driver true, এবং এটি একই ভাবে কাজ করবে।
কাইল স্ট্র্যান্ড

8

আপনি ব্যবহার করে শুরু করতে পারেন git merge --no-commit, এবং তারপরে আপনি নিজের পছন্দ মতো মার্জটি সম্পাদনা করতে পারবেন অর্থাৎ আনস্টেজিং config.xmlবা অন্য কোনও ফাইলের মাধ্যমে, তারপর প্রতিশ্রুতিবদ্ধ। আমার সন্দেহ হয় আপনি হুক ব্যবহারের পরে এটি আরও স্বয়ংক্রিয় করতে চান তবে আমি মনে করি এটি কমপক্ষে একবার ম্যানুয়ালি দিয়ে যাওয়া ভাল worth


2
না git attributesকোন সোজা সমাধান প্রস্তাব? আমি এটি বুঝতে সক্ষম নই। git-scm.com/book/en/…
কেভিন

4

আপনি সংগ্রহস্থল .gitignoreথেকে দূরে রাখতে ব্যবহার করতে পারেন config.xmlএবং তারপরে সার্ভারে উপযুক্ত ফাইল আপলোড করতে একটি পোস্ট কমিট হুক ব্যবহার করুন config.xml


1
আমি জানি যে হ্যাক ধরনের। আমি একটি পরিষ্কার সমাধান খুঁজতে চেষ্টা করছি। গিট সম্পর্কে কি attributes? কোনও ধারণা কীভাবে এটি কাজ করে? আমি এটি বুঝতে সক্ষম নই। git-scm.com/book/en/…
কেভিন

1
আমি এগুলির বিষয়ে শুনিনি, আমি মার্জ = আমাদের বৈশিষ্ট্যটি প্রয়োগ করার চেষ্টা করছি, আশাব্যঞ্জক দেখাচ্ছে।
tlehman

1
গিট বৈশিষ্ট্য দুর্দান্ত! এমনকি নন-পাঠ্য ফাইলগুলিকে কীভাবে আলাদা করতে হয় তাও আপনি গিটকে বলতে পারেন, যাতে আপনি পিডিএফ 2 টেক্সট পিডিএফ পার্থক্য করতে ব্যবহার করতে পারেন!
tlehman

2

উদাহরণ:

  1. আপনি দুটি শাখা আছে: master,develop
  2. আপনি developশাখায় ফাইল তৈরি করেছেন এবং মার্জ করার সময় এটিকে অগ্রাহ্য করতে চান

কোড:

git config --global merge.ours.driver true
git checkout master
echo "path/file_to_ignore merge=ours" >> .gitattributes
git merge develop

আপনি একই এক্সটেনশান সহ ফাইলগুলিও উপেক্ষা করতে পারেন

উদাহরণস্বরূপ, .txtএক্সটেনশন সহ সমস্ত ফাইল :

echo "*.txt merge=ours" >> .gitattributes

1

এখানে গিট-আপডেট-ইনডেক্স - কার্যকারী গাছের মধ্যে সূচীতে ফাইলের বিষয়বস্তু নিবন্ধ করুন।

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

উদাহরণ: -

git update-index --assume-unchanged somelocation/pom.xml


ঠেলাঠেলি করার সময় এটি দুর্দান্ত তবে তবুও অভিযোগ করলে ফাইলটি ওভাররাইট করতে পারে।
রল্ফ

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