গিট এবং কদর্য "ত্রুটি: বিদ্যমান তথ্য / রেফগুলি মারাত্মকভাবে লক করতে পারে না"


360

রিমোট গিট সংগ্রহস্থল থেকে ক্লোনিংয়ের পরে (বেটারকোডে) আমি কিছু পরিবর্তন করেছি, কমিট করেছি এবং চাপ দেওয়ার চেষ্টা করেছি:

git push origin master

এর সাথে ত্রুটিগুলি:

ত্রুটি: বিদ্যমান তথ্য / রেফগুলি
মারাত্মকভাবে লক করতে পারে না : গিট-http-পুশ ব্যর্থ

এই ক্ষেত্রে ইতিমধ্যে বিদ্যমান সংগ্রহস্থল সম্পর্কিত।

আমি আগে যা করেছি, তা হ'ল:

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. তথ্য পরিবর্তন করুন
  6. git commit

'বেটারকোডে' গিট লগে আমার অ্যাক্সেস নেই।

আমি উইন্ডোজ ব্যবহার করছি। বিস্তারিত ত্রুটিটি ছিল:

C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed

আমি আগে ক্লোন করেছি, তারপরে কোড পরিবর্তন করে প্রতিশ্রুতিবদ্ধ।


ভাগ্য নেই, আবার একই ত্রুটি।
এএনডি

দুটি সম্ভাব্য কারণ: ক) গিটের আরেকটি উদাহরণ চলছে (সমস্ত গিট প্রক্রিয়া বন্ধ করুন বা পুনরায় বুট করুন) খ) .গিট ফোল্ডারটি প্রশাসক হিসাবে তৈরি করা হয়েছিল (অপারেশনের জন্য প্রশাসক কমান্ড লাইনের চেষ্টা করুন)
ফ্র্যাক্টালস্পেস

আমার জন্য, আমি git fetchআগে কল করে ত্রুটিটি সমাধান করেছি git pull
লেভি ফুলার

1
যে ত্রুটি কদর্য
RobW

উত্তর:


682

আমার জন্য এটি কাজ করেছে:

git remote prune origin

যেহেতু এই উত্তরটি অনেক লোককে সহায়তা করে বলে মনে হচ্ছে, এখানে আসলে কী ঘটেছিল আমি তা সম্পর্কে একটু খনন করেছি। এটি কী করবে তা হ'ল ফোল্ডারের দূরবর্তী শাখাগুলির রেফারেন্সগুলি মুছে ফেলা .git/refs/remotes/origin। সুতরাং এটি আপনার স্থানীয় শাখাগুলিকে প্রভাবিত করবে না এবং এটি দূরবর্তী কিছু পরিবর্তন করবে না, তবে এটি আপনাকে স্থানীয় দূরবর্তী শাখাগুলিতে আপডেট করবে। কিছু ক্ষেত্রে মনে হচ্ছে এই উল্লেখগুলিতে ডেটা থাকতে পারে গিট সঠিকভাবে পরিচালনা করতে পারে না।


1
আমি কিছু ব্যাকগ্রাউন্ড তথ্য যুক্ত করেছি, তবে আমি অবশ্যই সত্যই বলতে পারি যে কেন এবং কীভাবে এটি কাজ করে ঠিক তা আমি জানি না :)
arno_v

1
গিট রিমোট ছাঁটাই উত্স আমার জন্য কাজ। তবে আমি .git / refs / remotes / উত্সে সমস্ত উল্লেখ মুছে ফেলেছি।
ইসুরু মাদুসানকা

2
এটি হ'ল যা করার gitপরামর্শ দেয় তবে আমি এটি করতে নারাজ কারণ আদেশটি দেখে মনে হচ্ছে এটি রিমোটকে কিছু করে does
ছুঁড়ে

4
আমি দৌড়ে এসেছিgit gc --prune=now
স্ট্যানলে মোহলা

9
এটি আমি কিছুক্ষণের মধ্যে চালিয়েছি AR (পিএস: এটি কাজ করেছিল)
শনি থিরু

456

আপনি চেষ্টা করে দেখতে চান:

git gc --prune=now

Https://www.kernel.org/pub/software/scm/git/docs/git-gc.html দেখুন


--প্রুন = এখন -প্রুন = সব কি? যদি তা হয় তবে ডকুমেন্টেশন হুঁশিয়ারি দেয় যে আপনি আনচোরড অবজেক্টগুলি হারাতে পারেন। যদি অরক্ষিত অবজেক্ট থাকে তবে আপনার সম্ভবত ছাঁটাই করার আগে তাদের সাথে পুনর্মিলন করার চেষ্টা করা উচিত।
আসফ ইস্রায়েল

3
জীবন রক্ষাকারী, আপনাকে ধন্যবাদ। git pullঅনুরূপ ত্রুটি বার্তা আটকে ছিল।
ফিল ব্রুবেকার

4
এটি "গিট ত্রুটির জন্য: রেফটিকে লক করতে পারে না" ব্যর্থতার জন্য সহায়তা করেছে। অনেক ধন্যবাদ!
আলেকজান্ডার

9
এটি আমার পক্ষে কাজ করেছে। তবে তখন আমি প্রতিবারই একই কমান্ডটি চালিয়ে যেতে হয়েছিলাম যখন আমি কোনও gitকমান্ড ব্যবহার করি যা দূরবর্তী সম্পর্কে ডিল করে। git remote prune originসমস্যাটি একবার এবং সকলের জন্য সমাধান করুন।
কিয়ূর গোলানী

আমার দিন বাঁচায়! অনেক অনেক ধন্যবাদ :)
অভিষেক গৌতম

188

আমার গিট রিমোট (বিটবুকিট.অর্গ) যখন তাদের আইপি ঠিকানা পরিবর্তন করেছে তখন আমার সাথে এটি ঘটেছিল। দ্রুত সমাধানটি হ'ল রিমোটটি সরিয়ে এবং পুনরায় যুক্ত করা, তারপরে সবকিছু প্রত্যাশা অনুযায়ী কাজ করেছিল। আপনি যদি গিটে একটি রিমোট অপসারণ এবং পুনরায় যুক্ত করার সাথে পরিচিত না হন তবে এই পদক্ষেপগুলি এখানে:

  1. আপনার বিদ্যমান রিমোটের এসএসএইচ গিট ইউআরএল অনুলিপি করুন। আপনি এই কমান্ডটি ব্যবহার করে এটি টার্মিনালে মুদ্রণ করতে পারেন:

    git remote -v

যা এরকম কিছু মুদ্রণ করবে:

 origin git@server-address.org:account-name/repo-name.git (fetch)
 origin git@server-address.org:account-name/repo-name.git (push)
  1. আপনার স্থানীয় গিট রেপো থেকে রিমোট সরান:

    git remote rm origin

  2. রিমোটটি আপনার স্থানীয় রেপোতে ফিরে যুক্ত করুন:

    git remote add origin git@server-address.org:account-name/repo-name.git


8
আমি আরও কিছু চেষ্টা করেছি, যেমন গিট জিসি, গিট প্রুন, আরএম 'লক ত্রুটিযুক্ত ফাইল', গিট আপডেট সার্ভারের তথ্য ইত্যাদি। কেবল এই উত্তরটি আমার পক্ষে কাজ করেছিল। কখনও কখনও এটি উইন্ডোজ পুনরায় বুট করার মতো, পুনরায় বুট হয় এবং এটি কাজ করবে। এখানে একই, কেবল পুনরায় সরান এবং পুনরায় যোগ করুন, এবং সবকিছু ঠিকঠাক হয়ে যায়;)
মারকুইনহো পেেলি

12
উপরের প্রক্রিয়াটির পরে, আমাকে আবার দূরবর্তী শাখাকে আবার ট্র্যাক git branch -u origin/master
করতেও গিটকে বলতে হবে

এটি আমার সমস্ত দূরবর্তী ট্র্যাকিং তথ্য .git / কনফিগারেশনে উড়িয়ে দিয়েছে এবং আসলে কাজ করে নি।
টমাসম্যাকলিউড

এটি আমার পক্ষেও কাজ করেছিল। অন্য সব কাজ করেনি।
dondrzzy

42

চলমান কমান্ড git update-ref -d refs/heads/origin/branchএটি স্থির করে।


4
এই কমান্ডটি আমার জন্যও কৌতুক করেছিল, যদিও আমার দূরবর্তী শাখার রেফ কিছুটা আলাদা ছিল:git update-ref -d refs/remotes/origin/my_branch
ndeslandes

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

24

আমি নিম্নলিখিতটি করে এটি ঠিক করেছি

git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull

এটি ধরে নেওয়া হচ্ছে যে আপনার স্থানীয় এবং দূরবর্তী শাখাগুলি সারিবদ্ধ করা হয়েছে এবং আপনি কেবল মারাত্মক অবিশ্বাস্য হিসাবে রেফগুলি ত্রুটি পাচ্ছেন।


12

আমার এই সমস্যাটি ছিল কারণ আমি একটি শাখায় ছিলাম যার একটি উজানের শাখার অনুরূপ নাম ছিল। অর্থাৎ উজানের শাখাটি ডাকা হয়েছিল example-branchএবং আমার স্থানীয় শাখা ডাকা হয়েছিল example-branch/backend। সমাধানটি আমার স্থানীয় শাখার নামটি এভাবে পরিবর্তন করছিল:

git branch -m <new name goes here>

11

এটি সম্ভবত এতক্ষণে সমাধান হয়ে গেছে। তবে আমার জন্য যা কাজ করেছে তা এখানে।

  1. অবস্থান:

    • যদি লক করা সংগ্রহস্থলটি সার্ভার-সাইডে থাকে:

      1. সার্ভারে আপনার গিট সংগ্রহস্থলে এসএসএস করুন।
      2. ব্যবহারকারীরূপে লগইন করুন যা আপনার সার্ভারের সংগ্রহস্থলটি সংশোধন করার এবং রেপোজিটরিতে নেভিগেট করার অনুমতি পেয়েছে।
    • লক করা সংগ্রহস্থল যদি কেবল স্থানীয় হয়:

      1. গিট কনসোলটি খুলুন এবং সংগ্রহস্থল ডিরেক্টরিতে নেভিগেট করুন।
      2. এই আদেশটি চালান:

        git update-server-info
        
  2. আপনার (রিমোট বা / এবং স্থানীয়) সংগ্রহস্থলের অনুমতিগুলি ঠিক করুন Fix আমার ক্ষেত্রে আমাকে যেতে chmodহয়েছিল 777এবং chownকরতে হয়েছিলapache:apache

  3. স্থানীয় সংগ্রহশালা থেকে আবার চাপ দেওয়ার চেষ্টা করুন:

    git push
    

10

আমার জন্য যা কাজ করেছিল তা হ'ল:

  1. অপসারণ .git/logs/refs/remotes/origin/branch
  2. অপসারণ .git/refs/remotes/origin/branch
  3. চালান git gc --prune=now

1
কবজির মতো কাজ করেছেন। যদি কেউ ফাইল / ফোল্ডার নাম শাখায় সমস্যার মুখোমুখি হয় তবে এটি প্রকৃতপক্ষে সমস্ত শাখার নাম ফাইল / ফোল্ডারগুলিকে উল্লেখ করছে। আশা করি এটা কাজে লাগবে!
অঙ্কিত কেশরওয়ানি

7

এটি আমার পক্ষে এভাবে কাজ করে।

  1. আপনার সার্ভারে অ্যাপাচি ডিএভি লক ফাইলটি দেখুন (উদাঃ / ভার / লক / অ্যাপাচি 2 / ডিএলক)
  2. মুছে ফেল
  3. ওয়েব সার্ভারের জন্য লেখার অনুমতি নিয়ে এটি পুনরায় তৈরি করুন
  4. ওয়েব সার্ভারটি পুনরায় চালু করুন

এমনকি দ্রুত বিকল্প:

  1. আপনার সার্ভারে অ্যাপাচি ডিএভি লক ফাইলটি দেখুন (উদাঃ / ভার / লক / অ্যাপাচি 2 / ডিএলক)
  2. ফাইলটি খালি করুন: cat /dev/null > /var/lock/apache2/DAVlock
  3. ওয়েব সার্ভারটি পুনরায় চালু করুন

এটা আমার সমস্যা ছিল। পোস্টের জন্য ধন্যবাদ. আমি সমস্ত শট মুছে ফেলা এবং অনুমতিগুলি চালিয়েছি। #> rm DAVLock; touch DAVLock; chown www-data.www-data DAVLock; chmod 755 DAVLock; service apache2 restart
djneely

6

এটি কোনও অনুমতি ইস্যুর মতো শোনাচ্ছে - পৃথক অধিকার দিয়ে মৃত্যুদন্ড কার্যকর করা কি আপনার দুটি উইন্ডো খোলা সম্ভব? সম্ভবত .git ফোল্ডারটির মালিকানা পরীক্ষা করুন।

সম্ভবত কোনও অসামান্য ফাইল লক খোলা আছে কিনা তা পরীক্ষা করে দেখুন, সম্ভবত চেক করতে lsof ব্যবহার করুন বা আপনার ওএসের সমতুল্য।


3

আমার ক্ষেত্রে একটি শাখা একটি উপ-ডিরেক্টরিতে স্থানান্তরিত হয়েছিল এবং ডিরেক্টরিটিকে শাখা হিসাবে ডাকা হত। গিট তা শুনে বিভ্রান্ত হয়েছিল। আমি যখন স্থানীয় শাখাটি মুছে ফেললাম (সোর্সট্রি তে ডান ক্লিক মুছার সাথে) সবকিছু যথারীতি কাজ করেছিল।


3

এই বার্তাটি পাওয়ার পরে আমার ক্ষেত্রে আমি চেকআউট কমান্ডটি করেছি এবং এই বার্তাটি দেওয়া হয়েছিল:

Your branch is based on 'origin/myBranch', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

এই কমান্ডটি চালানোর পরে আমি স্বাভাবিক অবস্থায় ফিরে এসেছি।


2

হালনাগাদ:

আপনার নিজের। / .Netrc ফাইলটি সম্পাদনা করতে হতে পারে:

https://bugs.launchpad.net/ubuntu/+source/git-core/+bug/293553

আসল উত্তর:

কেন আপনি এসএসএল অক্ষম করলেন? আমি মনে করি https- এর মাধ্যমে আপনাকে চাপ দিতে না পারার সাথে এটি করতে পারে। আমি এটিকে পিছনে রেখে আবার চেষ্টা করার চেষ্টা করব:

git config –global http.sslVerify true

1

আপনার (গিট প্রক্রিয়াটি আসলে) ফাইলে অ্যাক্সেস রয়েছে .git/info/refsএবং এই ফাইলটি অন্য কোনও প্রক্রিয়া দ্বারা লক করা হয়নি তা পরীক্ষা করুন।


2
আপনি কিভাবে এটি চেক করবেন?
Iulian Onofrei

1

আমার এই সমস্যাটি হয়েছিল, যখন আমি একটি নতুন বৈশিষ্ট্য শাখা তৈরি করার চেষ্টা করছিলাম যেখানে পুরাতন শাখার নাম রয়েছে, যেমন উত্স - শাখা 1 এবং আমি শাখা 1-বৈশিষ্ট্য তৈরি করতে চেয়েছিলাম। এটি সম্ভাব্য ছিল না, তবে শাখা 1 / বৈশিষ্ট্যটি ইতিমধ্যে ছিল।


1

আমার ক্ষেত্রে আমাকে পুরানো ট্যাগগুলি ম্যানুয়ালি মুছে ফেলতে হয়েছিল যা দূরবর্তী স্থানে সরানো হয়েছিল।


1

আমার ক্ষেত্রে, এটি আমি ইতিমধ্যে তৈরি করেছি এমন শাখার নামের সাথে সংযুক্ত ছিল।

সমস্যাটি সমাধানের জন্য আমি নামের সাথে একটি শাখা তৈরি করেছি যা নির্দিষ্টভাবে উপস্থিত থাকতে হবে না, যেমন:

git checkout -b some_unknown_branch

তারপরে আমি আমার অন্যান্য সমস্ত শাখা পরিষ্কার করেছি (সক্রিয় নয়) কারণ সেগুলি কেবল অপ্রয়োজনীয় আবর্জনা ছিল।

git branch | grep -v \* | grep -v master | xargs git branch -D

এবং তারপরে আমার বর্তমান শাখার নামটি দিয়েছি যে নামটি আমি পছন্দ করেছি, যেমন:

git checkout -m my_desired_branch_name

0

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


0

git filter-branchঅনেকগুলি সাব-ডাইরেক্টরিগুলিকে নতুন, পৃথক ভাণ্ডার ( এই উত্তর হিসাবে ) আলাদা করার চেষ্টা করার সময় আমি এই ত্রুটিটি দেখেছি ।

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

git remote remove origin
git tag | xargs git tag -d
git gc --prune=now
git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- apps/AAA/ libs/xxx' --prune-empty -- --all
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.