গিট অগভীর ক্লোন (ক্লোন - ডেপথ) দূরবর্তী শাখাগুলি মিস করে


104

রিমোট রিপোজিটরি ক্লোন করার পরে এটি কোনও-র বিকল্প দ্বারা কোনও দূরবর্তী শাখা প্রদর্শন করে না। কি সমস্যা হতে পারে? কীভাবে এটি ডিবাগ করবেন? এই স্নিপেটে দূরবর্তী দুটি শাখা প্রদর্শিত হয় না:

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git --version
git version 1.8.3.1

অন্য মেশিনে একই কমান্ড চেষ্টা করে দেখুন, এটি ভালভাবে কাজ করে:

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/debian
  remotes/origin/master
  remotes/origin/python_codegen
$ git --version
git version 1.7.1

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

যে কোনও পরামর্শ বা ইঙ্গিতগুলি স্বাগত হওয়ার চেয়ে আরও বেশি কিছু হবে।

সম্পাদনা: উত্তরের সংক্ষিপ্তসার: গিট সংস্করণ 1.8.3.2 যেহেতু আগের মত একই আচরণ পেতে "--depth" এবং "--no-একক-শাখা" একসাথে ব্যবহার করা প্রয়োজন। এটি একটি বাগ ফিক্স হিসাবে গণ্য করা হয়।


4
masterআপনার স্থানীয় শাখা। remotes/origin/masterসংশ্লিষ্ট দূরবর্তী শাখা। প্রশ্নটি আসলে কী?
মিচাস

4
আপনি সম্ভবত ভার্চুয়ালতা ভুলে গেছেন? চেষ্টা করুনgit branch -avv
jthill

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

4
পরিচয় করিয়ে দেওয়ার জন্য ধন্যবাদ git clone --depth=1 --no-single-branch, বেশিরভাগ ক্ষেত্রে আমার এটি প্রয়োজন।
আলিরিজা মোহাদামি

উত্তর:


62

আচরণটি সঠিক, শেষ সংশোধনীর পরে মাস্টার-শাখাটি (যেহেতু এটি প্রাথমিক রিমোটের হেড) সংগ্রহস্থলের একমাত্র দূরবর্তী শাখা:

florianb$ git branch -a
        * master
          remotes/origin/HEAD -> origin/master
          remotes/origin/master

সম্পূর্ণ ক্লোনটি নতুন (সমস্ত) শাখা সরবরাহ করে:

florianb$ git branch -a
        * master
          remotes/origin/HEAD -> origin/master
          remotes/origin/debian
          remotes/origin/master
          remotes/origin/python_codegen

অগভীর ক্লোনস

প্রযুক্তিগত ডকুমেন্টেশনের অগভীর-বর্ণনার কারণে , একটি " git-clone --depth 20 repo[...] ফলাফল [এর] সর্বাধিক 20 দৈর্ঘ্যের শৃঙ্খলাবদ্ধ করে" " একটি অগভীর ক্লোনটিতে শাখার ডগা থেকে কমিটের অনুরোধ করা গভীরতা থাকতে হবে।

হিসাবে - ছাড়াও - ডকুমেন্টেশন git cloneজন্য --single-branch-option বর্ণনা

" --branchবিকল্পটি দ্বারা নির্দিষ্ট করা বা প্রাথমিক শাখার রিমোটের HEADপয়েন্টগুলিতে কেবল একটি একক শাখার শীর্ষে পৌঁছানোর জন্য কেবল ইতিহাসকে ক্লোন করুন the --depthঅপশনটি দিয়ে অগভীর ক্লোন তৈরি করার সময় , এটি ডিফল্ট, যদি না --no-single-branchকাছাকাছি ইতিহাস আনতে না দেওয়া হয় সমস্ত শাখার টিপস। "

অতএব অগভীর ক্লোন ( সঙ্গে গভীরতা -option) শুধুমাত্র নিয়ে আসে শুধুমাত্র একটি একক শাখা (আপনার অনুরোধ গভীরতায়)।


দুর্ভাগ্যক্রমে উভয় বিকল্প ( --depthএবং --single-branch) অতীতে ত্রুটিযুক্ত ছিল এবং অগভীর ক্লোনগুলির ব্যবহার অমীমাংসিত সমস্যার জড়িত (যেমন আপনি উপরে পোস্ট করা লিংকে পড়তে পারেন), যা প্রদত্ত ইতিহাস-পুনর্লিখনের কারণে ঘটে। এটি সামগ্রিকভাবে বিশেষ ক্ষেত্রে কিছুটা জটিল আচরণের দিকে পরিচালিত করে।


4
ফ্লোরিয়ানব: আপনার গিট সংস্করণটি কী? এটি চেষ্টা করার জন্য ধন্যবাদ. আমি ১.৩.১.২০১th এ ডিপথ 1 করেছি ঠিক এখন এটি সমস্ত দূরবর্তী শাখা দেখায়। এই সঙ্গে প্রশ্ন আপডেট। সমস্যা যাচাই করার জন্য +1।
মিঙ্গুয়া

4
@ মিংগুয়া: আমি ১.৮.৪ ব্যবহার করছি - যদি এই বিষয়ে কোনও প্যাচ থাকে তবে আমি একটু তদন্ত করব।
ফ্লোরিয়ান নিউমান

4
@ মুমুহুয়া: আমি "অগভীর ক্লোন" সম্পর্কে নতুন অনুসন্ধান প্রতিফলিত করার জন্য সম্পাদনা করেছি।
ফ্লোরিয়ান নিউমান

4
এটি কেবলমাত্র একটি জিনিস ব্যতীত প্রায় নিখুঁত: "রেপো-মালিক অন্য শাখাগুলি কেটে ফেলার সিদ্ধান্ত নিয়েছে" এর অর্থ কী? আমি মনে করি সেই শাখাগুলি এখনও আছে still
মিঙ্গুয়া

4
- কোনও-একক-শাখা সমস্ত ট্যাগ ক্লোন করে। আমরা একটি নতুন রেপো তৈরি করে, এ জাতীয় কনফিগারেশনটি সমস্ত রিমোটগুলি আনার জন্য, অর্থাৎ fetch = +refs/heads/*:refs/remotes/origin/*, এবং চালিয়ে git fetch --depth 1(ছাড়াই --tags) এড়াতে পারি । আমরা কনফিগার মতো ব্যবহার করে আনতে নির্দিষ্ট ট্যাগগুলি যুক্ত করতে পারি fetch = +refs/tags/v2.0.0:refs/tags/v2.0.0
স্যাম ওয়াটকিন্স

218

অগভীর ক্লোনটি করার পরে, দূরবর্তী থেকে অন্যান্য শাখাগুলি চেকআউট করতে সক্ষম হতে ,

  1. চালান (ধন্যবাদ @ জেঠিল):

    git remote set-branches origin '*'
    
  2. এর পরে, ক git fetch -v

  3. অবশেষে git checkout the-branch-i-ve-been-looking-for


পদক্ষেপ 1 সম্পাদনা করে ম্যানুয়ালিও করা যেতে পারে .git/config

উদাহরণস্বরূপ, থেকে ফলোলিং লাইনটি পরিবর্তন করুন:

fetch = +refs/heads/master:refs/remotes/origin/master

করার জন্য (প্রতিস্থাপন masterসঙ্গে *):

fetch = +refs/heads/*:refs/remotes/origin/*

59
আপনি git remote set-branches origin '*'সমস্ত শাখার জন্যও ব্যবহার করতে পারেন, এর জন্য *একটি শাখার নামটি প্রতিস্থাপন করুন ।
jthill

ধন্যবাদ! এটি আমার দিনকে বাঁচিয়েছিল।
স্টিভেন জু

এর -vvvঅর্থ কী git fetch -vvv? আমি এর মধ্যে সম্পর্কে কোনো তথ্য পাবেন coundn't ডক Git-আনা
গুও

@ গুও এটির verbosityবা debugলগিং স্তরের জন্য git। এটি fetchপদ্ধতি থেকে নয় ।
মার্লো

4
@ কাওইং-চিউউ এটি কার্যকর যদি আপনার অনেক শাখা থাকে এবং 'ইন্টারনেট সংযোগ' এর জন্য আকারটি আগে বড় হয়ে যায় এবং এখন সে সমস্ত শাখাগুলি অর্জন করতে পারে। :)
marlo

67

@ জেথিলের প্রতিক্রিয়া এবং মন্তব্য পড়া থেকে, আমার পক্ষে যে জিনিসটি সবচেয়ে ভাল কাজ করেছে তা হ'ল কমান্ডের set-branchesবিকল্পটি ব্যবহার করা git remote:

$ git clone --depth 1 https://github.com/dogescript/dogescript.git
$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name

এটি নামযুক্ত রিমোট দ্বারা ট্র্যাক করা শাখাগুলির তালিকাকে পরিবর্তন করে যাতে আমরা কেবল প্রয়োজনীয় শাখাটি পেতে এবং চেকআউট করতে পারি।


18
এটি ব্যবহার করা আরও ভাল হতে পারে git remote set-branches --add origin 'remote_branch_name'যাতে নতুন শাখাটি বিদ্যমান সংস্থাগুলির সাথে যুক্ত হয়, তাদের পরিবর্তে .git / কনফিগার ফাইলে আনার জন্য রিমোটের শাখাগুলির (বা শাখার প্যাটার্ন) তালিকার পরিবর্তে।
ডাম্বলডেড

4
ওএমজি, একক উক্তি 'গুরুত্বপূর্ণgit remote set-branches --add origin 'remote_branch_name'
উইকেন্ড

@ উইকএন্ড আমি একক উদ্ধৃতি না ছেড়ে দেওয়া পর্যন্ত এই কাজটি করতে পারছি না
পান্ডাউড

@ পান্ডাওড আপনি সম্ভবত উইন্ডোজে আছেন। উত্তরের "$" সাইনটি বাশকে বোঝায় (ইউনিক্স বা সাইগউইন / এমএসওয়াইএসে)।
ইয়ংওয়ে উ উ

দস্তাবেজগুলিতে একক উদ্ধৃতি প্রয়োজনীয় হওয়ার বিষয়ে আমি কিছুই দেখতে পাচ্ছি না এবং মনে হচ্ছে এটি ম্যাকোজে কমপক্ষে একটি ছাড়া ভাল কাজ করে work
নিকোলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.