"ডাউন স্ট্রিম" এবং "উজান" এর সংজ্ঞা


901

আমি গিটের সাথে খেলতে শুরু করেছি এবং "উজান" এবং "ডাউন স্ট্রিম" শব্দটি পেয়েছি। আমি এগুলি আগে দেখেছি কিন্তু সেগুলি পুরোপুরি বুঝতে পারি নি। এসসিএম ( সফ্টওয়্যার কনফিগারেশন ম্যানেজমেন্ট সরঞ্জাম) এবং উত্স কোডের প্রসঙ্গে এই পদগুলির অর্থ কী ?


13
গিমে আপস্ট्रीम / ডাউনস্ট্রিমের জন্য দুটি পৃথক প্রসঙ্গ রয়েছে: রিমোটস এবং সময় / ইতিহাস। রিমোটগুলির সাথে সম্পর্কিত প্রবাহ / ডাউনস্ট্রিমটি হ'ল, প্রবাহিত রেপোগুলি প্রবাহিত রেপো থেকে টানবে (পরিবর্তনগুলি স্বাভাবিকভাবেই প্রবাহিত হবে)। সময় / ইতিহাসের সাথে সম্মতিযুক্ত প্রবাহ / ডাউনস্ট্রিম বিভ্রান্তিকর হতে পারে, কারণ সময়ের সাথে আপস্ট্রিম মানে ইতিহাসের নিচে প্রবাহ, এবং বিপরীতভাবে (বংশবৃত্তান্তের পরিভাষা এখানে আরও ভালভাবে কাজ করে - পিতাম / পূর্বপুরুষ / শিশু / বংশধর)।
Charlesreid1

6
সম্পর্কিত: 'উজান' অর্থ কী? ওএসে
কেনোরব

উত্তর:


703

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

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

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


115
"ডাউনলোড" এবং "আপলোড" ক্রিয়াপদ। "আপস্ট्रीम" এবং "ডাউন স্ট্রিম" একটি আপেক্ষিক অবস্থান বর্ণনা করে।
brian d foy

2
আমি মূল প্রজেক্টের বলতে হবে এবং নিম্নমুখী বিশেষণ হয়
ইয়েলো

8
এগুলি বিশেষণ হিসাবে ব্যবহৃত হয় যখন তারা সংশোধক হিসাবে ব্যবহৃত হয়, তবে এই পদগুলি প্রায়শই বিশেষ্য হিসাবে ব্যবহৃত হয়
brian d foy

2
@ মাইক্রোফডি শব্দগুলি বিশেষণ এবং বিশেষ্য হিসাবে ব্যবহার করা যেতে পারে প্রসঙ্গে
Reggaeguitar

1
এটি বেশিরভাগ প্রযুক্তিগত প্রয়োজনের চেয়ে একটি সামাজিক সমস্যা । তাহলে কেন সেখানে একটি বিকল্পের -uমত git push --set-upstream origin masterযদি এটি একটি নয় টেকনিকাল প্রয়োজন ? আমরা push -u originবা না push originপেরে পারি, সুতরাং এটি একটি প্রযুক্তি প্রয়োজন। তবে পার্থক্য কী?
সবুজ

249

আপনি git tagম্যান পৃষ্ঠাতে যখন পড়েন :

গিটের একটি গুরুত্বপূর্ণ বিষয় হ'ল এটি বিতরণ করা হয় এবং মূলত বিতরণ করার অর্থ সিস্টেমে কোনও অন্তর্নিহিত "আপস্ট्रीम" বা "ডাউনস্ট্রিম" নেই।

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

যদি "আপনাররেপো" "অন্যান্যরোপো" কে রিমোট হিসাবে ঘোষণা করেছে, তবে :

  • আপনি প্রবাহিত "অন্যান্যরেপো" থেকে টানছেন ("অন্যান্যরোপো" হ'ল " আপনার কাছ থেকে প্রবাহিত ", এবং আপনি "অন্যান্য রেপোর জন্য ডাউন স্ট্রিম")।
  • আপনি উজানের দিকে ধাক্কা দিচ্ছেন ("অন্যান্যরেপো" এখনও "আপস্ট্রিম", যেখানে তথ্য এখন ফিরে যায়)।

"থেকে" এবং "জন্য" নোট করুন: আপনি কেবল "ডাউনস্ট্রিম" নন, আপনি "ডাউন স্ট্রিম থেকে / ফর ", অতএব আপেক্ষিক দিকটি।


ডিভিসিএস (ডিস্ট্রিবিউটেড ভার্সন কন্ট্রোল সিস্টেম) টুইস্টটি হ'ল: আপনি যে রিমোট রেপো ঘোষনা করেছেন তার তুলনায় আপনার নিজের রেপোর পাশে ডাউনস্ট্রিম আসলে কী তা আপনার কোনও ধারণা নেই।

  • আপনি জানেন যে প্রবাহটি কী (আপনি যে রেপোগুলি থেকে টানছেন বা দিকে চাপছেন)
  • আপনি জানেন না যে ডাউন স্ট্রিমটি কী তৈরি (অন্য রেপোগুলি আপনার রেপো থেকে টানছে বা ঠেলাচ্ছে )।

মূলত:

" ডেটা প্রবাহ " এর শর্তে , আপনার রেপো প্রবাহের রেপোস ("থেকে টানুন") থেকে আগত প্রবাহের নীচে ("ডাউনস্ট্রিম") থাকে এবং (একই বা অন্যান্য) প্রবাহের রেপোতে ফিরে যায় ("টু" )।


আপনি "ম্যানেজমেন্ট রিবাউস থেকে পুনরুদ্ধার" অনুচ্ছেদ সহ git-rebaseম্যান পৃষ্ঠাতে একটি চিত্র দেখতে পারেন :

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

এটি খারাপ কারণ একটি "আপ স্ট্রিম " রেপোর জন্য, অনেকগুলি ডাউন স্ট্রিম রেপো থাকতে পারে (যেমন রেপসেট শাখা সহ উজানের একটি থেকে টানা রেপোস), তাদের সকলেরই সদৃশ কমিটগুলি মোকাবেলা করার সম্ভাবনা রয়েছে।

আবার, "ডেটা ফ্লো" উপমা দিয়ে, ডিভিসিএসে, একটি খারাপ কমান্ড "আপস্ট্রিম" ডাউন স্ট্রিমের "রিপল ইফেক্ট " থাকতে পারে


দ্রষ্টব্য: এটি ডেটা সীমাবদ্ধ নয়।
এটি প্যারামিটারগুলিতেও প্রযোজ্য , যেমন গিট কমান্ডগুলি ("পোরসিলাইন" এর মতো) প্রায়শই অভ্যন্তরীণভাবে অন্যান্য গিট কমান্ডকে ("নদীর গভীরতানির্ণয়") ডাকে। rev-parseম্যান পৃষ্ঠা দেখুন :

অনেক গিট চীনামাটির বাসিন্দা কমান্ড পতাকাগুলির মিশ্রণ গ্রহণ করে (অর্থাত্ ড্যাশ ' -' দিয়ে শুরু হওয়া প্যারামিটারগুলি) এবং অন্তর্নিহিত git rev-listকমান্ডের জন্য বোঝানো প্যারামিটারগুলি এবং অভ্যন্তরীণভাবে অভ্যন্তরীণভাবে ব্যবহৃত অন্যান্য কমান্ডগুলির জন্য পতাকা এবং পরামিতি ব্যবহার করেgit rev-list । এই আদেশটি তাদের মধ্যে পার্থক্য করার জন্য ব্যবহৃত হয়।


15
আপনি উজান থেকে টানুন , এবং আপনি প্রবাহে ধাক্কা । স্রোতে
চালিত

1
@ ক্নিটল: আপনি ঠিক বলেছেন। আপনার স্থানীয় (এবং "ডাউনস্ট্রিম") রেপোর সাথে সম্পর্কিত "আপস্ট্রিম" রেপোর ভূমিকাটি আরও ভালভাবে চিত্রিত করার জন্য আমি আমার উত্তরটি উচ্চারণ করেছি।
ভোনসি

85

প্রবাহ (সম্পর্কিত সম্পর্কিত) ট্র্যাকিং

শব্দটি মূল প্রজেক্টের এছাড়াও, যেমন এলেবেলে সরঞ্জামের স্যুট আসে কিছু দ্ব্যর্থহীন অর্থ বিশেষত আপেক্ষিক ট্র্যাকিং

উদাহরণ স্বরূপ :

   $git rev-list --count --left-right "@{upstream}"...HEAD
   >4   12

এই স্থানীয় শাখার জন্য বর্তমানে ট্র্যাকিং দূরবর্তী শাখার সাথে সম্পর্কিত (বর্তমান যদি থাকে ) আপনার বর্তমান কার্যকারী শাখার পিছনে (বাম) এবং সামনের (ডানে) কমিটের সংখ্যা (শেষ ক্যাশেড মান) মুদ্রণ করবে । এটি অন্যথায় একটি ত্রুটি বার্তা মুদ্রণ করবে:

    >error: No upstream branch found for ''
  • যেমনটি আগেই বলা হয়েছে, একটি স্থানীয় সংগ্রহস্থলের জন্য আপনার কাছে অনেকগুলি রিমোট থাকতে পারে, উদাহরণস্বরূপ, আপনি যদি গিথুব থেকে একটি সংগ্রহস্থলটি কাঁটাচামচ করেন, তবে 'টান অনুরোধ' জারি করুন, আপনার অবশ্যই কমপক্ষে দুটি আছে: origin(আপনার ফোরকড রেপো চালু আছে) গিথুব) এবং upstream(গিথুবটির রেপো যেটি আপনি থেকে শুরু করেছেন)। এগুলি কেবলমাত্র বিনিময়যোগ্য নাম, কেবল 'গিট @ ...' ইউআরএল তাদের সনাক্ত করে।

আপনার .git/configপড়া:

   [remote "origin"]
       fetch = +refs/heads/*:refs/remotes/origin/*
       url = git@github.com:myusername/reponame.git
   [remote "upstream"]
       fetch = +refs/heads/*:refs/remotes/upstream/*
       url = git@github.com:authorname/reponame.git
  • অন্যদিকে, জিআইটির জন্য @ {উজানের s এর অর্থটি অনন্য:

এটি ' রিমোট' তে ' শাখা' (যদি থাকে) , যা আপনার 'স্থানীয় ভাণ্ডার' তে 'বর্তমান শাখা' ট্র্যাক করে ।

আপনি যখনই কোনও বিতর্ক ছাড়াই git fetch/ কোনও সরল / ইস্যু করেন তখন এটি আপনি যে শাখাটি নিয়েছেন / টানবেন সেটাই git pullএটি।

আসুন বলি যে আপনি যে স্থানীয় মাস্টার শাখাটি যাচাই করেছেন তা দূরবর্তী শাখার উত্স / মাস্টারকে ট্র্যাকিং শাখা হিসাবে সেট করতে চান। কেবল ইস্যু করুন:

   $ git branch --set-upstream  master origin/master
   > Branch master set up to track remote branch master from origin.

এটি এতে 2 টি পরামিতি যুক্ত করে .git/config:

   [branch "master"]
       remote = origin
       merge = refs/heads/master

এখন চেষ্টা করুন (সরবরাহিত 'আপস্ট्रीम' রিমোটটির একটি 'দেব' শাখা রয়েছে)

   $ git branch --set-upstream  master upstream/dev
   > Branch master set up to track remote branch dev from upstream.

.git/config এখন পড়ে:

   [branch "master"]
       remote = upstream
       merge = refs/heads/dev

git-push(1)ম্যানুয়াল পৃষ্ঠা :

   -u
   --set-upstream

আপ টু ডেট বা সফলভাবে ঠেলে দেওয়া প্রতিটি শাখার জন্য আপগ্রেম (ট্র্যাকিং) রেফারেন্স যুক্ত করুন, যুক্তি-কম গিট-পুল (1) এবং অন্যান্য কমান্ড দ্বারা ব্যবহৃত। আরও তথ্যের জন্য, branch.<name>.mergeগিট কনফিগারেশন (1) এ দেখুন।

git-config(1)ম্যানুয়াল পৃষ্ঠা :

   branch.<name>.merge

সংজ্ঞায়িত, একসঙ্গে সঙ্গে branch.<name>.remote, মূল প্রজেক্টের দেওয়া শাখা জন্য শাখা। এটি গিট ফেচ / গিট পুল / গিট রিবেসকে জানায় যে কোন শাখাটি মার্জ করা হবে এবং গিট পুশকেও প্রভাবিত করতে পারে (পুশ.ডিফল্ট দেখুন)। \ (...)

   branch.<name>.remote

যখন শাখা <নাম> এ থাকে, এটি গিট আনতে এবং গিট পুশকে বলে যে কোনটি দূরবর্তী থেকে / পুশতে আনতে হবে। কোনও রিমোট কনফিগার করা না থাকলে এটি উত্সকে ডিফল্ট করে। আপনি যদি কোনও শাখায় না থাকেন তবে উত্সও ব্যবহৃত হয়।

প্রবাহ এবং পুশ (গটচা)

ম্যানুয়াল পৃষ্ঠাটি একবার দেখুনgit-config(1)

   git config --global push.default upstream
   git config --global push.default tracking  (deprecated)

এটি এমন শাখাগুলিতে দুর্ঘটনাজনিত ধাক্কা ঠেকাতে যা আপনি এখনও চাপতে প্রস্তুত নন।


4
উদ্ধৃতাংশ এর git branch --help2018 এর হিসাবে:As this option had confusing syntax, it is no longer supported. Please use --track or --set-upstream-to instead.
zezollo

59

এটি কিছুটা অনানুষ্ঠানিক পরিভাষা।

যতদূর গিট সম্পর্কিত, অন্য প্রতিটি সংগ্রহস্থল কেবল একটি রিমোট।

সাধারণভাবে বলতে গেলে, উজানের অংশটি যেখানে আপনি (আদি) থেকে ক্লোন করেছেন। ডাউনস্ট্রিম এমন কোনও প্রকল্প যা আপনার কাজকে অন্যান্য কাজের সাথে সংহত করে।

পদগুলি গিট সংগ্রহস্থলের মধ্যে সীমাবদ্ধ নয়।

উদাহরণস্বরূপ, উবুন্টু একটি ডেবিয়ান ডেরিভেটিভ, সুতরাং ডেবিয়ান উবুন্টুর পক্ষে প্রবাহিত।


51

প্রবাহকে ক্ষতিকারক বলা হয়

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

উদাহরণস্বরূপ, তিনি একীভূত হওয়ার বিষয়ে বলেছিলেন যে দ্রুতগতির ফলে এটি ঘটে because

আপনি যে শাখায় একীভূত হয়েছিলেন তার নির্দেশিত প্রতিশ্রুতিটি আপনি যে প্রতিশ্রুতিতে এসেছেন সেটির সরাসরি প্রবাহ ছিল

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

প্রকৃতপক্ষে, চকন নিজেই পরে "ডাউনস্ট্রিম" ব্যবহার করে একই জিনিসটি বোঝাতে হাজির হন, যখন তিনি মুছে ফেলা সমস্ত প্রতিশ্রুতিতে সমস্ত শিশুর প্রতিশ্রুতি পুনর্লিখনের কথা বলেন:

আপনার গিট ইতিহাস থেকে এই ফাইলটিকে পুরোপুরি অপসারণ করতে আপনাকে অবশ্যই 6df76 থেকে সমস্ত সমঝোতা পুনর্লিখন করতে হবে

মূলত সময়ের সাথে কমিটস এর ইতিহাস উল্লেখ করার সময় "আপস্ট्रीम" এবং "ডাউন স্ট্রিম" বলতে কী বোঝায় সে সম্পর্কে তার পরিষ্কার ধারণা নেই বলে মনে হয়। এই ব্যবহারটি তখন অনানুষ্ঠানিক, এবং উত্সাহিত হওয়ার জন্য নয়, কারণ এটি কেবল বিভ্রান্তিকর।

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

[অতিরিক্ত দ্রষ্টব্য: আমি উপরের প্রথম চকন বাক্যটি উদ্ধৃত করেছি এবং git-mergeম্যান পৃষ্ঠার মধ্যে সম্পর্ক সম্পর্কে ভাবছিলাম , এবং এটি আমার কাছে ঘটে যে পূর্ববর্তীটি পরবর্তীকালের একটি ভুল বোঝাবুঝির ভিত্তিতে হতে পারে। ম্যান পেজ এমন পরিস্থিতির বর্ণনা দেয় যেখানে "আপস্ট্রিম" ব্যবহার বৈধ হয়: দ্রুত-ফরওয়ার্ডিং প্রায়শই ঘটে যখন "আপনি একটি প্রবাহের সংগ্রহস্থলটি সন্ধান করছেন, আপনি কোনও স্থানীয় পরিবর্তন করেন নি, এবং এখন আপনি নতুনটিতে আপডেট করতে চান আপস্ট্রিম রিভিশন। " সুতরাং সম্ভবত চকন "উজান" ব্যবহার করেছেন কারণ তিনি এটি ম্যান পৃষ্ঠাতে দেখেছিলেন। তবে ম্যান পেজে একটি রিমোট রিপোজিটরি রয়েছে; চকন-এর দ্রুত-ফরওয়ার্ডিংয়ের উদ্ধৃত উদাহরণে কোনও দূরবর্তী সংগ্রহস্থল নেই, কেবল স্থানীয়ভাবে তৈরি কয়েকটি শাখা।]


14
গিট-রিবেস ম্যান পৃষ্ঠাটিও এই ওভারলোডিংয়ের ফলে ভোগ করে: রিভিজিংয়ের আগে যে প্রতিশ্রুতি পরীক্ষা করা হয় তাকে "উজান" বলা হয়। এটিও চকনের ব্যবহারকে প্রভাবিত করতে পারে।
outis

@ আশ্চর্যরূপে - গিট এইচটিএমএল ডকুমেন্টেশনে, শাখাটি রিবেসিংয়ের আগে উল্লেখ করা হয় <branch>
জেস্পার ম্যাথিজেন

ভাল যুক্তি. সাধারণ "গিট-টার্মিনোলজি" কোথাও জড়ো করতে এক ধরণের সহায়ক হবে। বিশেষত newbies (বা পিপিএল গিট অবদান) জন্য। গিট ম্যান পৃষ্ঠাগুলির শব্দের অভ্যাসে আমার ভাল সময় বাঁচাতে পারত
সেবনাগ

@ সেবনাগ এই জাতীয় কিছু? linuxacademy.com/blog/linux/git-terms-exPLined
রেগেইগুইটার

1
এখানে git-rebaseডক্স থেকে এসেছিল কারণ আমি সম্পূর্ণ বিভ্রান্ত ছিলাম যে কোনও প্রতিশ্রুতিবদ্ধ রেফাকে কেন সেখানে "উজান" বলা হবে (আসলে, আমি নিজেকে আগে সন্দেহ করেছিলাম কারণ আমি এই পরিভাষাটি আগে দেখিনি)। জিনিসগুলি সাফ করার জন্য @ আউটস এবং @ ম্যাটকে ধন্যবাদ!
বোরেক বার্নার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.