এই গিট সতর্কতা কিভাবে মোকাবেলা? "কীভাবে বিচ্ছিন্ন শাখাগুলির পুনর্মিলন করা যায় তা উল্লেখ না করেই হতাশ করা হয়"


114

একটির পরে git pull origin masterআমি নিম্নলিখিত বার্তাটি পাই:

warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:

  git config pull.rebase false  # merge (the default strategy)
  git config pull.rebase true   # rebase
  git config pull.ff only       # fast-forward only

You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or --ff-only on the command line to override the configured default per
invocation.

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 51.49 KiB | 850.00 KiB/s, done.

তারপরে টানটি সফলভাবে করা হয়েছে। তবে এখনও, আমার এই বার্তাটি সম্পর্কে সন্দেহ আছে।
এক্ষেত্রে সবচেয়ে ভাল কাজটি কী?


4
একটি বাগ রিপোর্ট ফাইল করুন যে সতর্কতাটি বিভ্রান্তিকর। একটি বিকল্প "প্রস্তাবিত" হওয়া উচিত এবং সতর্কতাটি কেবলমাত্র অনুরোধে দেখানো উচিত কেবলমাত্র কোনও সংস্করণ পরিবর্তন ঘটেছিল বলে নয়। প্রচুর স্বয়ংক্রিয় স্ক্রিপ্ট এখন এই অপ্রত্যাশিত আচরণের সাথে ভেঙে যেতে পারে।
ওল্ফগ্যাং ফাহল

4
@ ওল্ফগ্যাংফাহল, সতর্কতার কোনও স্ক্রিপ্টগুলিকে প্রভাবিত করা উচিত নয় কারণ এটি স্পষ্টভাবে পরিবর্তিত হওয়া অবধি ডিফল্ট আচরণ বজায় রাখে। এটির ফলে শূন্য-বহির্গমন প্রস্থান কোডটি ফিরে আসার কারণ হবে না (প্রদত্ত এটি একটি সতর্কতা, ত্রুটি নয়)। আমি বিভিন্ন সার্ভার জুড়ে কয়েকটি সিআই / সিডি স্ক্রিপ্টগুলি সাফল্যের হারকে প্রভাবিত না করে কাজ করতে থাকি।
Qumber

@ প্রশ্ন - মন্তব্যের জন্য ধন্যবাদ। ক্রোনটব এন্ট্রিগুলি উদাহরণস্বরূপ ইমেল প্রেরণ শুরু করবে যদি আউটপুট উপস্থিত না থাকে বা সাধারণ গ্রেপ দিয়ে ফিল্টার করা যায়। অপ্রত্যাশিত আউটপুটটিতে সমস্ত ধরণের পার্শ্ব প্রতিক্রিয়া থাকতে পারে।
ওল্ফগ্যাং ফাহল

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

উত্তর:


128

এর ডিফল্ট মোডে, গিট টান গিট আনার জন্য শর্টহ্যান্ড এবং তার পরে গিট মার্জ FETCH_HEAD হয়।

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

এটি এড়াতে আপনার প্রয়োজন

git pull --ff-only

(বা না? কোনটি আপনার প্রয়োজনের সাথে খাপ খায় তা দেখতে পড়ুন)

এর সাথে git pull --ff-only, গিট আপনার শাখাটি কেবলমাত্র নতুন কমিট তৈরি না করেই "দ্রুত অগ্রসর" হতে পারে যদি আপডেট করে update যদি এটি করা না যায় তবে git pull --ff-onlyকেবল একটি ত্রুটি বার্তা দিয়ে বাতিল করা।

আপনি সর্বদা --ff-onlyডিফল্টরূপে ব্যবহার করতে আপনার গিট ক্লায়েন্টকে কনফিগার করতে পারেন , তাই আপনি কমান্ড-লাইন পতাকাটি ভুলে গেলেও আপনি এই আচরণটি পান:

git config --global pull.ff only

দ্রষ্টব্য: --globalপতাকাটি আপনার মেশিনের সমস্ত সংগ্রহস্থলের পরিবর্তনের জন্য প্রয়োগ করে। আপনি যদি কেবল সেই ভাণ্ডারের জন্যই এই আচরণটি চান তবে পতাকাটি বাদ দিন।

এখান থেকে নেওয়া হয়েছে



এই সতর্কতাটি গিত ২.২27-এ যুক্ত করা হয়েছিল, যেমন জো তার উত্তরে উল্লেখ করেছিল।

সম্পূর্ণ সতর্কতাটি এটির মতো দেখাচ্ছে:

কীভাবে ডাইভারজেন্ট শাখাগুলির পুনর্মিলন করা যায় তা নির্দিষ্ট করে না টানলে নিরুৎসাহিত করা হয়। আপনি নিম্নলিখিত বার্তাটি আপনার পরবর্তী টানার কিছু আগে চালিয়ে এই স্প্ল্যাচ করতে পারেন:

গিট কনফিগার পুল। রিবেস মিথ্যা # মার্জ (ডিফল্ট কৌশল)
গিট কনফিগার পুল.রেবাস সত্য #
রিবাজে গিট কনফিগার পুল.এফ কেবল # ফাস্ট-ফরোয়ার্ড

সমস্ত সংগ্রহস্থলের জন্য ডিফল্ট পছন্দ নির্ধারণ করতে আপনি "গিট কনফিগারেশন" "গিট কনফিগারেশন - গ্লোবাল" দিয়ে প্রতিস্থাপন করতে পারেন। আপনি অনুরোধ অনুযায়ী কনফিগার করা ডিফল্টকে ওভাররাইড করতে --rebase, --no-rebase, বা --ff- কেবল কমান্ড লাইনেই পাস করতে পারেন।

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

git config pull.rebase false     # merge (the default strategy)

এটি ডিফল্ট আচরণ রাখে এবং সতর্কতা দমন করে।

git config pull.rebase true      # rebase

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

git config pull.ff only          # fast-forward only

স্থানীয় শাখাটি দ্রুত অগ্রসর করা সম্ভব হলে এটি কেবল টানটি সম্পাদন করে। যদি তা না হয় তবে এটি কেবল একটি ত্রুটি বার্তা (এবং কোনও কমিট তৈরি করে না) দিয়ে বাতিল করে।


হালনাগাদ:

আপনি যদি Git 2.29অথবা উপরে, আপনি এখন সেট করতে পারেন pull.ffথেকে false, trueবা onlyসতর্কবার্তা পরিত্রাণ পেতে।

git config pull.ff

true- এটি ডিফল্ট আচরণ. সম্ভব হলে টানুন দ্রুত-ফরওয়ার্ড করা হয়, অন্যথায় এটি মার্জ হয়ে যায়।

git config pull.ff false

false - টান কখনও দ্রুত অগ্রসর হয় না, এবং একটি মার্জ সর্বদা তৈরি করা হয়।

git config pull.ff only

only - সম্ভব হলে টানুন দ্রুত ফরোয়ার্ড করা হয়, অন্যথায় ত্রুটি বার্তা দিয়ে অপারেশন বাতিল করা হয়।


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

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

4
আমি বলতে, বার্তা তিনটি অপশন হয়নি আছে না কাজ আমাকে বার্তা supress জন্য। তবে উত্তর এখানে ( git config --global pull.ff only) করেছে
ডিস্ক জাঙ্কি

4
আহা! ধন্যবাদ @ কম্বার আমি ইতিমধ্যে চেষ্টা করেছি pull.rebase false, তবে এটি বর্ণিত হিসাবে কাজ করছে না। এটি সর্বদা মার্জ কমিট তৈরি করে এবং কখনও দ্রুত অগ্রসর হয় না । মূল কারণটি আমার ছিল merge.ff falseসেটিংস। সেটিংটি সাফ করার পরে, এটি যখন হওয়া উচিত তখন দ্রুত এগিয়ে যায়। এখানে ডক্স ( গিট টান ডক্সের প্রায় সমান )
stwr667

4
আপনি নীচে উল্লিখিত গিট ২.২৯ অপশনটি অন্তর্ভুক্ত করেছেন, ভাল পয়েন্ট। উত্সাহিত।
ভোনসি

56

এটি একটি নতুন সতর্কবাণী যোগ মধ্যে গীত 2.27 :

 * "git pull" issues a warning message until the pull.rebase
   configuration variable is explicitly given, which some existing
   users may find annoying---those who prefer not to rebase need to
   set the variable to false to squelch the warning.

সাবধানবাণী মুছে ফেলার জন্য, আপনার পছন্দের ডিফল্ট আচরণ প্রস্তাব মান এক সেট git pullআপনি কমান্ড লাইন সময় আচরণটি নির্দিষ্ট না (ব্যবহার --ff, --no-ff, --ff-only, --rebase)। সব ক্ষেত্রে, সম্ভব হলে দ্রুত-ফরওয়ার্ডgit ( গিট ফাস্ট-ফরওয়ার্ডিং কী? ) একত্রিত করার চেষ্টা করবেন ? আপনার শাখায় পরিবর্তনগুলি উপস্থিত থাকলেও দূরবর্তী শাখায় উপস্থিত না থাকলে সেটিংস নিয়ন্ত্রণ করে ।

  git config pull.rebase false  # merge (the default strategy)

এটি বিদ্যমান ডিফল্ট আচরণ; কোনও সতর্কতা এবং আচরণে কোনও পরিবর্তন আনার জন্য এটি সেট করুন; gitরিমোট শাখাটি আপনার স্থানীয় শাখায় একীভূত করবে।

  git config pull.rebase true   # rebase

এখানে, gitদূরবর্তী শাখার উপরে আপনার পরিবর্তনগুলি পুনর্বাসনের চেষ্টা করবে। দেখুন কখন আমাকে গিট টান --rebase ব্যবহার করা উচিত? কেন আপনি এটি চান হতে পারে তার আরও বিশদের জন্য।

  git config pull.ff only       # fast-forward only

যদি দ্রুত-ফরোয়ার্ড একত্রিত করা সম্ভব না gitহয় তবে এগিয়ে যেতে অস্বীকার করবে। গিট টান --rebase এবং গিট টান - কেবলমাত্র উদ্ধৃতিগুলির মধ্যে পার্থক্য হিসাবে :

একমাত্র শূন্য-স্থিতি অবধি একীভূত হতে এবং প্রস্থান করতে অস্বীকার করুন যদি না বর্তমানের হেড ইতিমধ্যে আপ টু ডেট থাকে বা একত্রীকরণটিকে দ্রুত-ফরোয়ার্ড হিসাবে সমাধান করা না যায়


18
এটি আসলে সবচেয়ে সঠিক উত্তর, কারণ এটি ব্যাখ্যা করে যে প্রায় এক দশক পরে গিট ব্যবহার করার পরে লোকেরা (আমার মতো) কেন হঠাৎ এই সতর্কতাটি দেখছে। তবে, প্রস্তাবিত বিকল্পগুলির বিষয়ে কিছু গাইডেন্স দেওয়া থাকলে এটি কার্যকর হবে। উদাহরণস্বরূপ, "কেবল" এ পুল.এফ সেট করা আপনাকে এটিকে ওভাররাইড করতে "পুল --রেবাস" করতে বাধা দেয় না।
kdopen

মধ্যে পার্থক্য কি pull.rebase = trueএবং branch.autoSetupRebase = always?
টেকুমার

4
@tekumara দেখতে stackoverflow.com/a/15935584/733345
জো

4
"যখন আপনার শাখায় পরিবর্তন হয় তবে দূরবর্তী শাখায় উপস্থিত না হয়।" তারপরে আমার কাছে মনে হয় গিটটি কেবল এই সতর্কতাটি ছুঁড়ে ফেলতে হবে যদি এটি হয়। আমি যদি আমার মেইনলাইনটি টানছি (এবং মূললাইনটি সঠিকভাবে ব্যবহৃত হয়) তবে আমার এটি নিয়ে চিন্তা করার দরকার নেই।
কিথ টাইলার 21

4
@Joe আমি তোমার উত্তরের মতো এবং মনে এটা অধিকার উত্তর, কিন্তু আপনার এই কিনা Git আসলে হয়েছে নির্বিশেষে দেখতে সম্পন্ন কিছু। আমি মনে করি সঠিক সময় এই সতর্কবার্তা জারি করার যদি Git হয়েছে যে কি করতে কিছু, তারপর এই বার্তা থেকে ব্যর্থ করা উচিত নয়। এই বার্তাটি কেবল স্প্যাম ব্যবহারকারীদের সামনে নয়। তবুও অন্য একটি জিনিস যা গিটের সাথে আমার প্রেম / ঘৃণার সম্পর্কের অবদান রাখে।
জন ভি

5

ইমহো git config pull.ff onlyসেরা। আমার উত্তরের কারণ হ'ল একটি রিবেস ইতিহাসটি ওভাররাইট করতে পারে এবং অন্য বিকাশকারী একই শাখায় কাজ করা থাকলে কিছু ফাইল হারিয়ে যাওয়ার কারণও হতে পারে।

তবে এগুলি সবই বৈধ।


3

দ্রষ্টব্য: এর আগে আমরা " git pull" ( ম্যান ) কে সতর্ক করতে শিখিয়েছিলাম যখন ব্যবহারকারী না বলে যখন ইতিহাসগুলি একত্রীকরণ করা, পুনরায় সেট করা বা কেবল দ্রুত-ফরওয়ার্ডিং গ্রহণ করা দরকার তবে pull.ffকনফিগারেশন ভেরিয়েবল সেট করে যারা এই সতর্কতাটি ট্রিগার করেছিল ।

গিট 2.29 (Q4 2020) এর সাথে এটি আর নেই (অর্থাত: আর কোনও সতর্কতা নেই )।

দেখুন কমিট 54200ce (24 সেপ্টেম্বর 2020) দ্বারা অ্যালেক্স Henrie ( alexhenrie)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 299deea , 29 সেপ্টেম্বর 2020)

pull: pull.ffসেট করা হয়েছে কিনা সতর্ক করবেন না

সাইন-অফ-বাই: অ্যালেক্স হেনরি

যে ব্যবহারকারী সেট করতে যথেষ্ট বোঝেন pull.ffতাদের অতিরিক্ত নির্দেশাবলীর প্রয়োজন নেই।

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