স্থানীয় শাখা, স্থানীয় ট্র্যাকিং শাখা, দূরবর্তী শাখা এবং দূরবর্তী ট্র্যাকিং শাখার মধ্যে পার্থক্য কী?


158

আমি সবেমাত্র গিট ব্যবহার শুরু করেছি এবং আমি বিভিন্ন শাখার মধ্যে সত্যই বিভ্রান্ত হয়ে পড়েছি। নিম্নলিখিত শাখার প্রকারগুলি কী কী তা বোঝার জন্য কেউ আমাকে সহায়তা করতে পারে?

  • স্থানীয় শাখা
  • স্থানীয় ট্র্যাকিং শাখা
  • দূরবর্তী শাখা
  • দূরবর্তী ট্র্যাকিং শাখা

তাদের মধ্যে পার্থক্য কী? এবং তারা একে অপরের সাথে কীভাবে কাজ করবে?

একটি দ্রুত ডেমো কোড আমার অনুমান করা সত্যই সহায়ক হবে।

উত্তর:


123

একটি স্থানীয় শাখা একটি শাখা যা কেবলমাত্র আপনি (স্থানীয় ব্যবহারকারী) দেখতে পাবেন। এটি কেবলমাত্র আপনার স্থানীয় মেশিনে বিদ্যমান।

git branch myNewBranch        # Create local branch named "myNewBranch"

একটি দূরবর্তী শাখা একটি দূরবর্তী অবস্থানের উপর একটি শাখা (বেশিরভাগ ক্ষেত্রেই হয় origin)। আপনি সদ্য নির্মিত স্থানীয় শাখায় চাপ দিতে myNewBranchপারেন origin। এখন অন্যান্য ব্যবহারকারীরা এটি ট্র্যাক করতে পারেন।

git push -u origin myNewBranch   # Pushes your newly created local branch "myNewBranch"
                                 # to the remote "origin".
                                 # So now a new branch named "myNewBranch" is
                                 # created on the remote machine named "origin"

একটি দূরবর্তী ট্র্যাকিং শাখা একটি দূরবর্তী শাখার একটি স্থানীয় কপি। উপরের কমান্ডটি ব্যবহার করার myNewBranchজন্য যখন ধাক্কা দেওয়া হয় তখন আপনার মেশিনে originনামের একটি দূরবর্তী ট্র্যাকিং শাখা origin/myNewBranchতৈরি করা হয়। এই দূরবর্তী ট্র্যাকিং শাখাটি রিমোট শাখাটি ট্র্যাক myNewBranchকরে origin। তুমি তোমার আপডেট করতে পারেন দূরবর্তী ট্র্যাকিং শাখা সাথে সুসংগত করা দূরবর্তী শাখা ব্যবহার git fetchবা git pull

git pull origin myNewBranch      # Pulls new commits from branch "myNewBranch" 
                                 # on remote "origin" into remote tracking
                                 # branch on your machine "origin/myNewBranch".
                                 # Here "origin/myNewBranch" is your copy of
                                 # "myNewBranch" on "origin"

একটি স্থানীয় ট্র্যাকিং শাখা একটি স্থানীয় শাখা যা অন্য একটি শাখা ট্র্যাক করে। এটি এমন হয় যাতে আপনি অন্য শাখায় / থেকে চাপ / টানতে পারবেন। স্থানীয় ট্র্যাকিং শাখা বেশিরভাগ ক্ষেত্রে একটি দূরবর্তী ট্র্যাকিং শাখা ট্র্যাক করে। যখন আপনি একটি বিকল্প (যেমন উপরে দেখানো হয়েছে) originব্যবহার করে স্থানীয় শাখাটিকে চাপ দিন , আপনি দূরবর্তী ট্র্যাকিং শাখা ট্র্যাক করার জন্য স্থানীয় শাখাটি সেট আপ করুন । এটিকে ধাক্কা দিতে বা এড়াতে কোনও প্রবাহকে নির্দিষ্ট না করে ব্যবহার করতে এবং প্রয়োজন ।git push command-umyNewBranchorigin/myNewBranchgit pushgit pull

git checkout myNewBranch      # Switch to myNewBranch
git pull                      # Updates remote tracking branch "origin/myNewBranch"
                              # to be in sync with the remote branch "myNewBranch"
                              # on "origin".
                              # Pulls these new commits from "origin/myNewBranch"
                              # to local branch "myNewBranch which you just switched to.

স্থানীয় ট্র্যাকিং শাখার সংজ্ঞা জন্য, এটি দূরবর্তী স্থানে চাপ দেওয়ার পরে স্থানীয় শাখার মতো নয় কি?
mskw

2
@ এমএসকিউ নং, একটি স্থানীয় ট্র্যাকিং শাখা এবং একটি স্থানীয় (নন ট্র্যাকিং) শাখার সাথে মিল রয়েছে। একটি স্থানীয় শাখা কোনও শাখার সাথে সম্পর্কিত নয়। এটি কেবল বিচ্ছিন্নভাবে আপনার স্থানীয় মেশিনে বিদ্যমান একটি শাখা। একটি স্থানীয় ট্র্যাকিং শাখা দূরবর্তী ট্র্যাকিং শাখার সাথে সম্পর্কিত। সুতরাং আপনি একে অপরের কাছে / থেকে চাপ / টানতে পারেন।
এসএনএস

196

এখানে দীর্ঘ উত্তর।

remotes:

আপনি যদি গিটকে সহযোগিতামূলকভাবে ব্যবহার করছেন, আপনার সম্ভবত অন্যান্য মেশিন বা অবস্থানের সাথে আপনার কমিটগুলি সিঙ্ক করতে হবে। প্রতিটি মেশিন বা অবস্থানকে বলা হয় কগিটের পরিভাষায় রিমোট এবং প্রত্যেকের একটি বা একাধিক শাখা থাকতে পারে। প্রায়শই, আপনি কেবল একটি নাম রাখবেন origin। সমস্ত রিমোটের তালিকা করতে, চালান git remote:

$ git remote
bitbucket
origin

এই দূরবর্তী নামগুলি কোন জায়গাগুলির জন্য শর্টকাট রয়েছে তা চালিয়ে আপনি দেখতে পারবেন git remote -v:

$ git remote -v
bitbucket git@bitbucket.org:flimm/example.git (fetch)
bitbucket git@bitbucket.org:flimm/example.git (push)
origin git@github.com:Flimm/example.git (fetch)
origin git@github.com:Flimm/example.git (push)

প্রতিটি রিমোটের নীচে একটি ডিরেক্টরি থাকে git/refs/remotes/:

$ ls -F .git/refs/remotes/
bitbucket/ origin/

আপনার মেশিনে শাখা:

টিএলডিআর: আপনার স্থানীয় মেশিনে, আপনি তিন ধরণের শাখা পেয়েছেন: স্থানীয় অ-ট্র্যাকিং শাখা, স্থানীয় ট্র্যাকিং শাখা এবং দূরবর্তী ট্র্যাকিং শাখা। একটি রিমোট মেশিনে, আপনি কেবল এক ধরণের শাখা পেয়েছেন।

1. স্থানীয় শাখা

আপনি চালিয়ে আপনার মেশিনে সমস্ত স্থানীয় শাখার একটি তালিকা দেখতে পারেন git branch:

$ git branch
master
new-feature

প্রতিটি স্থানীয় শাখায় একটি ফাইল রয়েছে .git/refs/heads/:

$ ls -F .git/refs/heads/
master new-feature

আপনার মেশিনে দুই প্রকারের স্থানীয় শাখা রয়েছে: স্থানীয় শাখাগুলি অ-ট্র্যাক করা এবং স্থানীয় শাখাগুলি ট্র্যাক করা।

১.১ অ-ট্র্যাকিং স্থানীয় শাখা

অ-ট্র্যাকিং স্থানীয় শাখাগুলি অন্য কোনও শাখার সাথে সম্পর্কিত নয়। আপনি চালিয়ে একটি তৈরি করুন git branch <branchname>

1.2। স্থানীয় শাখা ট্র্যাকিং

স্থানীয় শাখাগুলি ট্র্যাকিং অন্য একটি শাখার সাথে সম্পর্কিত, সাধারণত একটি দূরবর্তী ট্র্যাকিং শাখা। আপনি চালিয়ে একটি তৈরি করুন git branch --track <branchname> [<start-point>]

আপনার স্থানীয় কোন শাখাটি ব্যবহার করে শাখাগুলি ট্র্যাক করছে তা আপনি দেখতে পারেন git branch -vv:

$ git branch -vv
master      b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message

এই কমান্ডের আউটপুট থেকে আপনি দেখতে পাচ্ছেন যে স্থানীয় শাখা masterদূরবর্তী ট্র্যাকিং শাখা ট্র্যাক করছে origin/masterএবং স্থানীয় শাখা new-featureকোনও কিছুই ট্র্যাক করছে না।

কোন শাখাগুলি শাখাগুলি ট্র্যাক করছে তা দেখার আরেকটি উপায় হ'ল এক নজরে .git/config

স্থানীয় শাখা ট্র্যাকিং দরকারী useful কোন প্রবাহ শাখাটি ব্যবহার করবেন তা নির্দিষ্ট করে না দিয়ে তারা আপনাকে চালানোর অনুমতি দেয় git pullএবং git push। অন্য শাখাটি ট্র্যাক করার জন্য যদি শাখাটি সেট আপ না করা হয় তবে আপনি এর মতো একটি ত্রুটি পাবেন:

$ git checkout new-feature
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream new-feature <remote>/<branch>

2. রিমোট-ট্র্যাকিং শাখা (এখনও আপনার মেশিনে)

আপনি চালিয়ে আপনার মেশিনে সমস্ত রিমোট-ট্র্যাকিং শাখার একটি তালিকা দেখতে পারেন git branch -r:

$ git branch -r
bitbucket/master
origin/master
origin/new-branch

প্রতিটি দূরবর্তী ট্র্যাকিং শাখার অধীনে একটি ফাইল রয়েছে .git/refs/<remote>/:

$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│   └── master
└── origin/
    ├── master
    └── new-branch

রিমোট মেশিনে কী রয়েছে তার জন্য আপনার স্থানীয় ক্যাশে হিসাবে আপনার দূরবর্তী ট্র্যাকিং শাখাগুলি ভাবেন। আপনি git fetchযা ব্যবহার করে আপনার দূরবর্তী ট্র্যাকিং শাখাগুলি আপডেট করতে পারেনgit pull পর্দার আড়ালে ব্যবহার করে।

রিমোট-ট্র্যাকিং শাখার সমস্ত ডেটা স্থানীয়ভাবে আপনার মেশিনে (ক্যাশের মতো) সঞ্চিত থাকলেও এটিকে কখনও স্থানীয় শাখা বলা হয় না। (কমপক্ষে, আমি এটিকে ডাকব না!) এটিকে কেবল একটি দূরবর্তী ট্র্যাকিং শাখা বলা হয়।

রিমোট মেশিনে শাখা:

আপনি চালিয়ে সমস্ত দূরবর্তী শাখা (যা দূরবর্তী যন্ত্রের শাখাগুলি) দেখতে পারেন git remote show <remote>:

$ git remote show origin
* remote origin
  Fetch URL: git@github.com:Flimm/example.git
  Push  URL: git@github.com:Flimm/example.git
  HEAD branch: master
  Remote branches:
    io-socket-ip            new (next fetch will store in remotes/origin)
    master                  tracked
    new-branch              tracked
  Local ref configured for 'git pull':
    master     merges with remote master
    new-branch merges with remote new-branch
  Local ref configured for 'git push':
    master     pushes to master     (up to date)
    new-branch pushes to new-branch (fast-forwardable)

এই git remoteকমান্ডটি নেটওয়ার্কের দূরবর্তী মেশিনটিকে এর শাখা সম্পর্কে জিজ্ঞাসা করে। এটি আপনার স্থানীয় মেশিনে রিমোট-ট্র্যাকিং শাখাগুলি আপডেট করে না, ব্যবহার করুন git fetchবা তার git pullজন্য।

আউটপুট থেকে, আপনি রিমোট মেশিনে থাকা সমস্ত শাখা দেখতে পারবেন "রিমোট শাখা" শিরোনামের অধীনে ("বাসি" হিসাবে চিহ্নিত লাইনগুলি উপেক্ষা করুন)।

আপনি যদি রিমোট মেশিনে লগইন করতে পারেন এবং ফাইল সিস্টেমে সংগ্রহস্থলটি খুঁজে পেতে পারেন তবে এর নীচে সমস্ত শাখা দেখতে পারেন refs/heads/

ঠকানো শীট:

  • স্থানীয় শাখা মুছে ফেলার জন্য, ট্র্যাকিং বা অ-ট্র্যাকিং নিরাপদে, নিরাপদে:

    git branch -d <branchname>
    
  • স্থানীয় শাখা মুছে ফেলতে, ট্র্যাকিং হোক বা অ-ট্র্যাকিং, জোর করে:

    git branch -D <branchname>
    
  • একটি দূরবর্তী ট্র্যাকিং শাখা মুছতে:

    git branch -rd <remote>/<branchname>
    
  • একটি নতুন স্থানীয় অ-ট্র্যাকিং শাখা তৈরি করতে:

    git branch <branchname> [<start-point>]
    
  • একটি নতুন স্থানীয় ট্র্যাকিং শাখা তৈরি করতে: (মনে রাখবেন যে যদি <start-point>নির্দিষ্ট করা হয় এবং এটি যেমন রিমোট-ট্র্যাকিং শাখা origin/foobar, তবে --trackপতাকাটি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত থাকে)

    git branch --track <branchname> [<start-point]
    

    উদাহরণ:

    git branch --track hello-kitty origin/hello-kitty
    
  • রিমোট মেশিনে একটি শাখা মুছতে:

    git push --delete <remote> <branchname>
    
  • বাসি সমস্ত দূরবর্তী ট্র্যাকিং শাখাগুলি মুছে ফেলার জন্য, যেখানে দূরবর্তী মেশিনে সম্পর্কিত শাখাগুলি আর বিদ্যমান নেই:

    git remote prune <remote>
    

আপনি লক্ষ্য করেছেন যে কিছু কমান্ডে, আপনি <remote>/<branch>এবং অন্যান্য কমান্ডগুলিতে, ব্যবহার করেন <remote> <branch>। উদাহরণ: git branch origin/hello-kittyএবং git push --delete origin hello-kitty

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


আমি শাখা তৈরি করতে এবং একটি সেন্টিমিটার হিসাবে শাখায় যেতে ব্যবহার করব: গিট চেকআউট-বি মাইনেউব্র্যাঞ্চ
জেটা

আমি স্থান এবং স্ল্যাশের মধ্যে পার্থক্যটির শেষ পয়েন্টটি পছন্দ করতাম!
অ্যাডারচক্স

12

স্থানীয় শাখা:

আপনার মেশিনে একটি শাখা যাতে আপনি কাজ করতে এবং এতে কমিট যোগ করতে পারেন। আপনি এই শাখা তালিকাভুক্ত করতে পারেন git branch

স্থানীয় শাখা (ট্র্যাকিং সহ):

একটি সাধারণ স্থানীয় শাখা একটি দূরবর্তী শাখার সাথে সঙ্গতিপূর্ণ কনফিগার করা। এই ক্ষমতা মত benfits হয়েছে git pullএবং git pushসংগ্রহস্থল এবং শাখার নাম উল্লেখ না করেও। ট্র্যাকিংয়ের ফলেও git statusযখন আপনার শাখাটি রিমোটের সামনে বা পিছনে থাকে তখন আপনাকে অবহিত করে।

রিমোট শাখা:

কেবল একটি দূরবর্তী সংগ্রহস্থলের একটি শাখা - সাধারণত সার্ভারে যেমন গিটহাব ইত্যাদি on

রিমোট ট্র্যাকিং শাখা:

প্রত্যন্ত শাখার স্থানীয় কপি। এই শাখাটি কখনই সম্পাদনা করা উচিত নয়। এর উদ্দেশ্য একটি প্রত্যন্ত শাখার বর্তমান অবস্থা সম্পর্কে নজর রাখা। রিমোট ট্র্যাকিং শাখাগুলি দেখতে পারা যায় git branch -rএবং সাধারণত দেখতে পাওয়া যায় origin/master(শাখার নাম অনুসারে স্ল্যাশের পরে রেপো নাম)। চলমান git fetchসম্পর্কিত দূরবর্তী শাখাগুলির অবস্থা প্রতিফলিত করতে দূরবর্তী ট্র্যাকিং শাখাগুলি আপডেট করবে।

git branch -avvআমার মেশিনে কোন শাখাগুলি রয়েছে, কোন শাখাগুলি দূরবর্তী অঞ্চলে রয়েছে এবং প্রতিটিটিতে সর্বশেষ প্রতিশ্রুতিবদ্ধ তাড়াতাড়ি সংক্ষিপ্ত বিবরণ প্রদর্শনের জন্য আমার ব্যক্তিগত প্রিয়। -aঅংশ নির্দিষ্ট করে সব শাখা প্রদর্শন করা উচিত (দূরবর্তী এবং স্থানীয়)। v'বাগাড়ম্বরপূর্ণ জন্য শেষ স্ট্যান্ড উপর গুলি (গত দেখায় হ্যাশ এবং বার্তা কমিট)। কোন ফ্লাঙ্ক vকোন রিমোটটি ট্র্যাক করছে সে সম্পর্কে দ্বিতীয়টি তথ্য যোগ করে তা নির্দেশ করার জন্য @ ফ্লিমকে ধন্যবাদ জানাই ।


1
আমি স্থানীয় ট্র্যাকিং এবং দূরবর্তী ট্র্যাকিং শাখার মধ্যে পার্থক্য বুঝতে পারি না - পূর্ববর্তীটি উত্সের সাথে সামঞ্জস্য করে এবং পরবর্তীটি দূরবর্তী মেশিনের সাথে সম্পর্কিত। কিন্তু একই জিনিস না? সাধারণত গিথুবে থাকা সেই রেপোই কি না?
একান্টওয়ার্ড

1
@akantoword আমি উত্তরটি আপডেট করেছি কিছুটা স্পষ্ট করার চেষ্টা করার জন্য। মূলত রিমোট ট্র্যাকিং শাখা কেবল রিমোট শাখার স্থানীয় কপি যা কাজ করার উদ্দেশ্যে নয় isn't ট্র্যাকিং সহ একটি স্থানীয় শাখা কাজ করার জন্য
এরিক ম্যাথিসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.