গিট দিয়ে একবারে একাধিক শাখায় কীভাবে টানবেন?


13

একটি রেপোতে আমার একাধিক শাখা রয়েছে যার মধ্যে "মাস্টার" এবং "বিকাশ" রয়েছে যা দূরবর্তী শাখাগুলি "উত্স / মাস্টার" এবং "উত্স / বিকাশ" ট্র্যাক করার জন্য স্থাপন করা হয়।

আমি কি উভয় মাস্টার এবং বিকাশ একবারে মার্জ (দ্রুত-ফরওয়ার্ড) করতে চাই তা নির্দিষ্ট করে বলা সম্ভব?

আমি git pullএখন যখন করি তখন আমি এরকম কিছু পাই:

remote: Counting objects: 92, done.
remote: Compressing objects: 100% (56/56), done.
remote: Total 70 (delta 29), reused 28 (delta 8)
Unpacking objects: 100% (70/70), done.
From scm.my-site.com:my-repo
   5386563..902fb45  develop    -> origin/develop
   d637d67..ba81fb2  master     -> origin/master
Updating 5386563..902fb45
Fast-forward

সমস্ত প্রত্যন্ত শাখাগুলি আনা হয়েছে, তবে কেবল বর্তমানে আমি যে শাখায় আছি তা তার সংশ্লিষ্ট দূরবর্তী শাখার সাথে মিশে গেছে।

তাই আমাকে করতে হবে git checkout master...

Switched to branch 'master'
Your branch is behind 'origin/master' by 106 commits, and can be fast-forwarded.

... এবং তারপরে git pullআবার, এবং তারপরে পুনরায় বিকাশ করতে, কাঙ্ক্ষিত ফলাফল পেতে।

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


আমি চেষ্টা করেছি git pull origin refs/heads/develop:refs/remotes/origin/develop refs/heads/master:refs/remotes/origin/masterকিন্তু এর ফলে রিমোট মাস্টারটি বিকাশে পরিণত হয়েছে ..
সুপারওল

1
কেন এটি ত্রুটি-প্রবণ বা অদক্ষ হবে? গিটটি এইভাবে কাস্টমাইজ করার উদ্দেশ্যে। BTW, এড়ানোর প্রতিটি শাখা খুঁজে বার করো করা জন্য, আপনাকে আপনার বিভক্ত করতে চান হতে পারে pullএকটি মধ্যে fetchএকটি দ্বারা অনুসরণ mergeপ্রতিটি শাখা মধ্যে।
jjlin

@jjlin ভাল যদি আমি প্রতিটি শাখা পরীক্ষা না করে এটি করতে পারি যা দক্ষতায় সহায়তা করতে পারে। এটি ত্রুটিযুক্ত প্রবণ কারণ এই জিনিসগুলির ম্যাট্রিক্স যা ভুল হতে পারে এবং এর স্ক্রিপ্টের বাকী অংশে এর প্রভাবগুলি কিছুটা জটিল। আমি এটি বলছি না যে এটি নিরাপদ করে তোলা অপরিহার্য, তবে এটি বাণিজ্য বন্ধ হবে। সুতরাং আমি যদি
বিল্টিন সলিউশনটি

উত্তর:


11

আপনি একটি git fetchউলাম সেটআপ করতে পারেন যা আপনার শাখাগুলিকে কেবল একটি কমান্ডের সাথে দ্রুত-ফরওয়ার্ড করার জন্য রেফস্পেসের সাহায্যে ব্যবহার করে। আপনার ব্যবহারকারী .gitconfigফাইলটিতে এটি একটি উপাধ হিসাবে সেট করুন:

[alias]
    sync = "!sh -c 'git checkout --quiet --detach HEAD && \
                    git fetch origin master:master develop:develop ; \
                    git checkout --quiet -'"

ব্যবহার: git sync

এটি কেন কাজ করে তা এখানে:

  1. git checkout --quiet HEADআপনাকে আপনার বিচ্ছিন্ন মাথাব্যবস্থায় রেখে সরাসরি আপনার বর্তমান প্রতিশ্রুতি পরীক্ষা করে দেখুন । এইভাবে, আপনি যদি চালু থাকেন masterবা থাকেন তবে আপনি developসেই শাখা পয়েন্টারগুলি থেকে আপনার কার্যকরী অনুলিপিটি সরিয়ে নেওয়ার অনুমতি দিয়ে বিচ্ছিন্ন করে দিন (গিট আপনাকে আপনার কার্যকরী অনুলিপিটি চেক আউট করার সময় শাখা রেফারেন্সগুলি স্থানান্তর করতে দেয় না)।

  2. git fetch origin master:master develop:developআপনার স্থানীয় রেপোতে এবং শাখাগুলি fetchদ্রুত-ফরওয়ার্ড করার জন্য রেফস্প্যাকগুলি ব্যবহার করে । সিনট্যাক্সটি মূলত গিটকে বলে "এখানে ফর্মের একটি রেসপেস্ক , নিয়ে যান এবং এটিকে একই পয়েন্টে দ্রুত-ফরোয়ার্ড করুন "। সুতরাং উপন্যাসের উত্সগুলি শাখাগুলি থেকে শুরু করে , গন্তব্যগুলি সেই শাখাগুলির স্থানীয় রেপো সংস্করণ।masterdevelop<source>:<destination><destination><source>origin

  3. git checkout --quiet -পূর্ববর্তী কমান্ডগুলির ক্ষেত্রে কোনও ব্যর্থতা ছিল কিনা তা বিবেচনা না করে অবশেষে, আপনি যে শাখায় শেষ ছিলেন সেগুলি পরীক্ষা করে দেখুন। সুতরাং আপনি masterযখন ছুটে এসেছিলেন git syncএবং যদি সবকিছু সফল হয় তবে আপনি বিচ্ছিন্ন প্রধানের অবস্থা ছেড়ে চলে যাবেন এবং সদ্য আপডেট হওয়া পরীক্ষা করে দেখুন master

আরও দেখুন Git আমার উত্তর: এটি চেক করার ছাড়া একটি স্থানীয় শাখা আপডেট?


আমি এখানে বিচ্ছিন্ন-যাদুটি পুরোপুরি বুঝতে পারি না, যখন বিকাশ চেক আউট করা হয় তবে কেন মাস্টারের পয়েন্টারটি সরানো যায় না? ... যাইহোক আমি এটি চেষ্টা করে দেখেছি এবং এটি এখনই ব্যতীত কাজ করা বলে মনে হচ্ছে "আপনার শাখাটি 1 টি প্রতিশ্রুতি দিয়ে 'উত্স / বিকাশ' এর আগে is"
সুপোল

... যা পরের বার আমি
টানানোর

@ সুপেরোল আপনি কোন উপনাম ব্যবহার করবেন তখন কোন শাখা এগিয়ে আছে origin/develop? এটি যদি আপনার স্থানীয় developশাখা হয় তবে এটির কোনও অর্থ হবে না । এছাড়াও, পয়েন্টারটি master সরানো যেতে পারে যদি এটি developচেক আউট হয় তবে পয়েন্টটি হ'ল যদি এটি যদি masterচেক আউট হয় তবে আপনি দ্রুত-অগ্রসর করতে পারবেন না masterকারণ এটি আপনার কার্যকরী অনুলিকে প্রভাবিত করে, সুতরাং সেই কারণেই আপনি কার্যকরী অনুলিপিটি বিচ্ছিন্ন করেন you প্রথমে এটি ব্যবহার করে git checkout head। আমি আর একটি উত্তর দেখেছি যা এটিকে "একটি পাথরের উপর দাঁড়িয়ে" হিসাবে বর্ণনা করেছে, আপনি শিলাটি সরিয়ে নেওয়ার আগে আপনাকে পাথর থেকে নামতে হবে।
40XUserNotFound

এটা আমার স্থানীয় বিকাশ ছিল। এবং কারণটি হ'ল এই আনতে ট্র্যাকিং শাখাগুলি আপডেট হয় না। আমি যেমন এটি বুঝতে পারি; একটি টান উত্স / বিকাশে আনতে হবে এবং তারপরে এটিকে বিকাশে মিশ্রিত করবে।
সুপারল

এটি অত্যন্ত গুরুত্বপূর্ণ যে এই উত্তরটি সৃষ্টি করে fatal: bad config line xx in file xxx। যা সেমিকোলন দ্বারা সৃষ্ট। এই সমস্যাটি এড়াতে আপনাকে পুরো কমান্ডটি ডাবল উদ্ধৃতিতে আবদ্ধ করতে হবে।
উইলিয়াম লেউং

1

গিট-আপ ইনস্টল করুন । এটি আপনাকে কমান্ড দেয় git-upযা আপনার ভান্ডারে সমস্ত স্থানীয় শাখা টানবে।


মিষ্টি! আমি এটি পরীক্ষা করে নেব
সুপারল

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

ভাল লাগছে একটি পদ্ধতি আছে এ সব ... ধরণ sucky, যদিও যে প্রতি একক পদ্ধতি প্রয়োজন কিছু তৃতীয় পক্ষের টুল। যেমন এটির এবং কিছু শেল কমান্ড "রেসিপি" বা একটি নির্দিষ্ট (প্ল্যাটফর্ম-নির্দিষ্ট) শেল ব্যবহার করে একটি উপাধি রয়েছে।
0xC0000022L

0

দেখে মনে হচ্ছে একাধিক শাখায় গিট টানতে কোনও বিল্টিন বিকল্প নেই। কমপক্ষে সংস্করণ 1.8.0 এ নেই। যদিও @ কাপককের উত্তরটি এর নিকটে রয়েছে।

তবে @ জাজলিনের মন্তব্য আমাকে বুঝতে পেরেছিল যে কমপক্ষে আমার দু'বার টানা দরকার নেই।

সুতরাং কিছুটা আরও দক্ষ ক্রম হবে:

git pull
git checkout master
git merge origin/master
git checkout -

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

[alias]
ffwd = "!_() { git checkout $1 && git merge --ff-only origin/$1 && git checkout -; }; _"

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

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