আমি কেন এই খালি ভাণ্ডারে ঠেলাতে পারি না?


283

এই ওয়ার্কফ্লোতে কী ভুল তা আপনি ব্যাখ্যা করতে পারেন?

$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'

git pushআমি যে ক্লোনিকে ক্লোন করেছিলাম তা কি সর্বদা ধাক্কা দেয় না ?


আপনি ধাক্কা শাখা নির্দিষ্ট করা উচিত নয়?
রেইন

3
একটি ক্লোন পরে না !!! সমস্যাটি স্থির হওয়ার পরে, এটি দুর্দান্ত কাজ করে এবং শাখাটি নির্দিষ্ট করার দরকার নেই ... খালি সংগ্রহস্থলের এই প্রথম চেকআউটে এটি ঘটে যা খুব বিরক্তিকর ... তাদের এই সমস্যাটি সমাধান করা উচিত।
ডিন হিলার

আশা করি পোস্টটি কারো উপযোগী হতে হবে কখন করবেন above- চেষ্টা samranga.blogspot.com/2015/07/... এমনকি যখন ইতিমধ্যেই স্থানীয়ভাবে বিদ্যমান প্রোজেক্ট থেকে তৈরি করতে একটি Git BitBucket সংগ্রহস্থলের চেষ্টা প্রশ্নে ত্রুটি popped যাবে
Samitha চথুরাঙ্গ

উত্তর:


483

হ্যাঁ, সমস্যাটি হ'ল "বেয়ার" তে কোনও কমিট নেই। এটি কেবল প্রথম প্রতিশ্রুতিবদ্ধতা নিয়ে সমস্যা, যদি আপনি ক্রমে রেপো তৈরি করেন (খালি, এলিস)। করার চেষ্টা করুন:

git push --set-upstream origin master

এটি কেবল প্রথমবারের প্রয়োজন হবে। এর পরে এটি স্বাভাবিকভাবে কাজ করা উচিত।

ক্রিস জনসন যেমন উল্লেখ করেছেন, আপনার পুশ.ডিফল্টটি কাস্টমাইজ করা থাকলে আপনার এই সমস্যা হবে না। আমি প্রবাহিত / ট্র্যাকিং পছন্দ করি।


1
আমি করছি sudo apt-get upgrade git-coreএবং sudo apt-get upgrade gitএবং এটি মনে কোন আপডেট প্রয়োজন। git --versionফিরে আসে 1.7.3.1। কোন ধারণা কি অনুপস্থিত? আমি স্বীকার করি বর্তমানে apt-get updateআমার পক্ষে কাজ করে না তবে এটি খুব বেশিদিন আগে হয়নি।
ripper234

1
@ রিপার 234: গিটের বর্তমান সংস্করণটি 1.7.5.3 হয় আপনি অসুবিধার সাথে বেঁচে থাকতে পারেন, আলাদা ওয়ার্কফ্লো ব্যবহার করতে পারেন বা সর্বশেষতম গিটটি ম্যানুয়ালি w / o ডেবিয়ান / উবুন্টু প্যাকেজিং ইনস্টল করতে পারেন।
শেঠ রবার্টসন

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

9
"সাম্প্রতিক সংস্করণে এই সমস্যা নেই" সম্পর্কিত: সাম্প্রতিক সংস্করণগুলিতেও, পুশগুলির জন্য ডিফল্টটি বদলেছে বলে মনে হয় না matching; হতে পারে আপনি আপনার / / (অথবা ) এ push.defaultসেট করেছেন ? upstreamtrackingcurrent~/.gitconfig
ক্রিস জনসেন

4
git push origin master:masterএটি সুস্পষ্ট করার চেষ্টা করুন । যদি এটি কাজ না করে, আপনি কোন শাখায় আছেন তা পরীক্ষা করে দেখুন: git branchসম্ভবত আপনি প্রথম প্রতিশ্রুতিবদ্ধ করেন নি বা মাস্টার ব্যতীত অন্য কোনও শাখায় আপনি সেই প্রতিশ্রুতিবদ্ধ করেছেন।
শেঠ রবার্টসন

43

আপনি যদি:

 git push origin master

এটি খালি রেপোতে ধাক্কা দেবে।

দেখে মনে হচ্ছে আপনার এলিস রেপো সঠিকভাবে অনুসরণ করছে না।

cat .git/config

এটি ডিফল্ট দূরবর্তী এবং শাখা প্রদর্শন করবে।

আপনি যদি

 git push -u origin master

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


30

এই সম্পর্কিত প্রশ্নের উত্তরটি আমার জন্য সমাধানটি সরবরাহ করেছিল ... এটি কেবল বোবা ভুল ছিল:

প্রথম প্রতিশ্রুতিবদ্ধ মনে রাখবেন!

https://stackoverflow.com/a/7572252

আপনি যদি এখনও আপনার স্থানীয় রেপোতে প্রতিশ্রুতিবদ্ধ না হন তবে ধাক্কা দেওয়ার মতো কিছুই নেই, তবে আপনি যে গিট ত্রুটি বার্তাটি পেয়েছেন তা আপনাকে খুব বেশি সহায়তা করে না।


17
git push --all

সবকিছুকে একটি নতুন খালি সংগ্রহস্থলের দিকে ঠেলে দেওয়ার আধ্যাত্মিক উপায়।

একই জিনিসটি করার আরেকটি উপায় হ'ল আপনার নতুন, নন-বেয়ার সংগ্রহশালা তৈরি করা এবং তারপরে একটি খালি ক্লোন তৈরি করা

git clone --bare

তারপরে ব্যবহার করুন

git remote add origin <new-remote-repo>

মূল (নন-বেয়ার) ভাণ্ডারে।


... তাহলে আপনি উত্তরটি হ্রাস করেছেন? এটা তোলে হয় আদর্শ উপায় একটি নতুন, খালি সংগ্রহস্থলের সবকিছু ধাক্কা। যদি এটি আপনার পক্ষে কাজ না করে, তবে অন্য কিছু সমস্যা রয়েছে।
ebneter

আপনি ঠিক বলেছেন, আমার সম্ভবত থাকা উচিত ছিল না, আমি জানি আপনি কেবল সাহায্য করার চেষ্টা করছেন। আপনি যদি এটি সম্পাদনা করেন তবে আমি আমার ডাউনভোটটি পূর্বাবস্থায় ফিরিয়ে আনব।
রিপার 234

ধন্যবাদ, একই কাজটি সম্পাদন করার জন্য এটি অন্যভাবে সম্পাদনা করা।
ebneter

আপনার উত্তর আমাকে ধন্যবাদ জানায়;) তবে কমান্ডের শেষে, পথটি অবশ্যই এখানে উপস্থিত থাকতে হবে: git push --all ../test_repoকমান্ডের শেষে রেপোর ইউআরএল;)
মেটাফ্যানিয়েল

@ মেটাফানিয়েল এটি কীভাবে সেট আপ করবেন তার উপর নির্ভর করে। যদি আপনার স্থানীয় রেপোতে ইতিমধ্যে রিমোটটি সঠিকভাবে কনফিগার করা থাকে তবে "গিট পুশ - সমস্ত" ঠিক তেমন কাজ করা উচিত।
ebneter

7

এটি আপনার aliceসংগ্রহশালায় চেষ্টা করুন (চাপ দেওয়ার আগে):

git config push.default tracking

অথবা, এটি আপনার ব্যবহারকারীর সাথে ডিফল্ট হিসাবে কনফিগার করুন git config --global …


git pushডিপোজিটরিতে ডিফল্ট হয় origin(যা সাধারণভাবে সেই সংগ্রহস্থান যা আপনি বর্তমান সংগ্রহশালাটিকে ক্লোন করেছেন) তবে এটি বর্তমান শাখাকে ধাক্কা দেওয়ার ক্ষেত্রে পূর্বনির্ধারিত নয় — এটি উত্স সংগ্রহস্থল এবং গন্তব্য সংগ্রহস্থল উভয়ের মধ্যে থাকা কেবলমাত্র শাখাগুলি পুশ করার ক্ষেত্রে এটি ডিফল্ট হয়।

push.defaultকনফিগারেশন পরিবর্তনশীল (দেখুন Git-কনফিগ (1) ) নিয়ন্ত্রণ git pushধাক্কা হবে এটি না কোনো "refspec" আর্গুমেন্ট (অর্থাত কিছু সংগ্রহস্থলের নাম পরে) দেওয়া হয়। ডিফল্ট মান উপরে বর্ণিত আচরণ দেয়।

এখানে সম্ভাব্য মান রয়েছে push.default:

  • nothing
    এটি আপনাকে একটি "রেফস্পেক" সরবরাহ করতে বাধ্য করে।

  • matching(ডিফল্ট)
    এটি উত্স সংগ্রহস্থল এবং গন্তব্য সংগ্রহস্থল উভয়তেই উপস্থিত সমস্ত শাখা পুশ করে।
    এটি বর্তমানে যা পরীক্ষা করা হয়েছে তার থেকে সম্পূর্ণ স্বাধীন।

  • upstreamবা tracking
    (উভয় মান একই জিনিস বোঝায় The পরে "রিমোট ট্র্যাকিং" শাখাগুলি নিয়ে বিভ্রান্তি এড়াতে অবহিত করা হয়েছিল former পূর্ববর্তীটি 1.7.4.2 এ প্রবর্তিত হয়েছিল, তাই আপনি যদি গিট 1.7.3.1 ব্যবহার করছেন তবে আপনাকে পরবর্তীটি ব্যবহার করতে হবে। )
    এগুলি বর্তমান শাখাকে তার "আপস্ট্রিম" কনফিগারেশন দ্বারা নির্দিষ্ট শাখায় চাপ দেয়।

  • current
    এটি গন্তব্য ভান্ডারগুলিতে একই নামের শাখায় বর্তমান শাখাটি পুশ করে।

    এই শেষ দুটি সাধারণ ক্ষেত্রে একই হয় (যেমন স্থানীয় মাস্টার যা উত্স / মাস্টারকে এর প্রবাহ হিসাবে ব্যবহার করে ) এর জন্য কাজ করে, তবে স্থানীয় শাখার যখন তার "উজানের" শাখা থেকে আলাদা নাম থাকে: তারা আলাদা হয়:

    git checkout master
    # hack, commit, hack, commit
    
    # bug report comes in, we want a fix on master without the above commits
    
    git checkout -b quickfix origin/master  # "upstream" is master on origin
    # fix, commit
    git push
    

    সঙ্গে push.defaultসমান upstream(অথবা tracking), ধাক্কা যেতে হবে origin'র মাস্টার শাখা। যখন এটি সমান currentধাক্কা যেতাম origin'র quickfix শাখা।

matchingসেটিং আপডেট হবে bareএর মাস্টার আপনার দৃশ্যকল্প মধ্যে একবার এটি স্থাপন করা হয়েছে। এটি স্থাপন করতে, আপনি git push origin masterএকবার ব্যবহার করতে পারেন ।

তবে upstreamসেটিংসটি (বা সম্ভবত current) মনে হচ্ছে এটি আপনার প্রত্যাশার জন্য আরও ভাল মিল হতে পারে, তাই আপনি এটি চেষ্টা করতে চাইতে পারেন:

# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push

# configure it for only this repository
git config push.default upstream

# configure it for all repositories that do not override it themselves
git config --global push.default upstream

(আবার, আপনি যদি এখনও 1.7.4.2 এর আগে একটি গিট ব্যবহার করেন তবে এর trackingপরিবর্তে আপনার প্রয়োজন হবে upstream)।


1

আমি সোর্সট্রি গিট ক্লায়েন্ট ব্যবহার করি এবং আমি দেখতে পাচ্ছি যে তাদের প্রাথমিক কমিট / পুশ কমান্ডটি হ'ল:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.