কীভাবে আমার গৃহকর্ম `গিট টান?


53

আমি প্রিন্সিপালের অফিসে ছাগলের মতো অনুভব করছি যে কুকুরটি ঠিক হওয়ার আগের রাতে আমার বাড়ির কাজটি খেয়েছিল, তবে আমি মুখে ক্রেজি ডেটা হ্রাসের বাগটি দেখছি এবং কীভাবে ঘটেছিল তা আমি বুঝতে পারি না। আমি জানতে চাই যে গিটটি কীভাবে আমার সংগ্রহস্থলটি পুরোটা খেতে পারে! আমি বেশ কয়েকবার রিংয়ের মাধ্যমে গিট দিয়েছি এবং এটি কখনই জ্বলজ্বল করে না। আমি এটি 20 গিগ সাবভার্সন রেপোকে 27 গিট রেপোগুলিতে বিভক্ত করার জন্য ব্যবহার করেছি এবং এই জগাখিচুড়ি কাটাতে তাদের ফুটিকে ফিল্টার-ব্রাঞ্চ করে দিয়েছি এবং আমার পক্ষে এটি কোনও বাইট হারিয়ে যায় না। রিফ্লোগ সবসময় সেখানে ফিরে আসে। এবার কার্পেট চলে গেল!

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

এই ঘটনায় আমার টার্মিনালের স্ক্রিনশট এখানে দেওয়া হয়েছে:

ঘটনা স্ক্রিন শট

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

  » caleb » jaguar » ~/p/w/incil.info » ◼  zend ★ »
❯❯❯ git co master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

সেখানে আপনি দেখতে পাবেন যে আমি 'জেন্ড' শাখায় ছিলাম এবং মাস্টার পরীক্ষা করে দেখলাম। এ পর্যন্ত সব ঠিকই. আপনি আমার পরবর্তী কমান্ডের আগে প্রম্পটে দেখতে পাবেন যে এটি সফলভাবে শাখা পরিবর্তন করেছে:

  » caleb » jaguar » ~/p/w/incil.info » ◼  master ★ »
❯❯❯ git pull
remote: Counting objects: 37, done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 37 (delta 25), reused 0 (delta 0)
Unpacking objects: 100% (37/37), done.
From gitlab.alerque.com:ipk/incil.info
 + 7412a21...eca4d26 master     -> origin/master  (forced update)
   f03fa5d..c8ea00b  devel      -> origin/devel
 + 2af282c...009b8ec verse-spinner -> origin/verse-spinner  (forced update)
First, rewinding head to replay your work on top of it...
>>> elapsed time 11s

এবং ঠিক যেমন চলে গেছে। 10 সেকেন্ডের বেশি সময় অতিবাহিত হলে পরবর্তী প্রম্পটের আগে বিলম্বিত সময় চিহ্নিতকারী আউটপুটগুলি। গিট নোটিশের বাইরে কোনও আউটপুট দেয়নি যে এটি রিপ্লেতে রিওয়াইন্ড হয়েছে। এটি শেষ হয়েছে এমন কোনও ইঙ্গিত নেই।

পরবর্তী প্রম্পটে আমরা কোন শাখায় আছি বা গিটের অবস্থা রয়েছে সে সম্পর্কে কোনও তথ্য অন্তর্ভুক্ত নেই।

এটি ব্যর্থ হয়েছে তা লক্ষ্য করে আমি অজ্ঞতাবশত অন্য গিট কমান্ডটি চালানোর চেষ্টা করেছি কেবল তখনই জানানো হবে যে আমি গিট রেপোতে ছিলাম না। দ্রষ্টব্য PWD পরিবর্তন হয়নি:

  » caleb » jaguar » ~/p/w/incil.info »
❯❯❯ git fetch --all
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

এর পরে চারপাশে এক নজরে দেখা গেল যে আমি সম্পূর্ণ ফাঁকা ডিরেক্টরিতে ছিলাম। কিছুই নেই। কোনও '.git' ডিরেক্টরি নেই, কিছুই নয়। খালি।

আমার স্থানীয় গিটটি ২.০.২ সংস্করণে রয়েছে। আমার গিট কনফিগারেশন থেকে এখানে কয়েকটি দম্পতি রয়েছে যা ঘটেছে তা তৈরি করার ক্ষেত্রে প্রাসঙ্গিক হতে পারে:

[branch]
        autosetuprebase = always
        rebase = preserve
[pull]
        rebase = true
[rebase]
        autosquash = true
        autostash = true
[alias]
        co = checkout

উদাহরণস্বরূপ আমি git pullমার্জ করার পরিবর্তে সর্বদা একটি রিবেস করতে সেট করেছি , যাতে উপরের আউটপুটটির অংশটি স্বাভাবিক থাকে।

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

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

  • Dmesg বা সিস্টেমযুক্ত জার্নালে বার্তা। দূরবর্তী থেকে প্রাসঙ্গিক কিছুই।
  • ড্রাইভ বা ফাইল সিস্টেমের ব্যর্থতার কোনও ইঙ্গিত নেই (LVM + LUKS + EXT4 সব দেখতে সাধারণ দেখায়)। হারিয়ে যাওয়া + তেমন কিছুই পাওয়া যায় নি।
  • আমি আর কিছু চালাইনি। ইতিহাসে এমন কিছুই নেই যা আমি উপরে দেখছি না এবং এই সময়টিতে অন্য কোনও টার্মিনাল ব্যবহার করা হয়নি। rmআশেপাশে এমন কোনও কমান্ড নেই যেগুলি ভুল সিডাব্লুডি ইত্যাদিতে কার্যকর করা হতে পারে etc.
  • অন্য ডিরেক্টরিতে অন্য গিট রেপোতে কব্জি করা কোনও আপাত অস্বাভাবিকতা প্রকাশ করে না git pull

আমি এখানে আর কি খুঁজছি হবে?


4
@ পেট্রিক যেমন আমি ইতিমধ্যে প্রশ্নে ব্যাখ্যা করেছি, কারও .gitঅস্তিত্ব নেই। কিছুই হয় না g গিট রুট ডিরেক্টরিতে যা ব্যবহৃত হত তার কিছুই নেই।
কালেব

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

3
@ ক্যালব আপনার শেল প্রম্পটে গিট শাখা সূচক অন্তর্ভুক্ত রয়েছে, যার অর্থ পিএস 1 গঠনের অর্থ আপনার লগতে প্রকাশিত না হওয়া গিট কমান্ড অন্তর্ভুক্ত রয়েছে। তারা মূলত ছবিটি পরিবর্তন করতে পারে এবং ইস্যু উত্স হতে পারে। আপনার শেল প্রম্পটটি কীভাবে গঠিত হয়, একটি বর্তমান শাখা পাওয়ার জন্য কোন আদেশগুলি চালিত হয় এবং কীভাবে তারা আপনার রেপো নষ্ট করতে পারে তা পুনর্বিবেচনা করে আপনার প্রশ্নটি আপডেট করতে হবে।
নেট

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

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

উত্তর:


6

হ্যাঁ, gitআমার বাড়ির কাজ খেয়েছি। এটার সবগুলো.

আমি ddঘটনার পরে এই ডিস্কটির একটি চিত্র তৈরি করেছি এবং এটির সাথে পরে গণ্ডগোল করেছি। সিস্টেম লগগুলি থেকে ইভেন্টের সিরিজটি পুনর্গঠন করে, আমি অনুমান করি যা ঘটেছিল তা এরকম কিছু ছিল:

  1. pacman -Syuএই ঘটনার কয়েক দিন আগে একটি সিস্টেম আপডেট কমান্ড ( ) জারি করা হয়েছিল।
  2. বর্ধিত নেটওয়ার্ক আউটেজের অর্থ হ'ল এটি প্যাকেজগুলি ডাউনলোড করার জন্য পুনরায় চেষ্টা করা ছেড়ে গেছে। ইন্টারনেটের অভাবে হতাশ হয়ে আমি সিস্টেমটি ঘুমিয়ে রেখে বিছানায় গিয়েছিলাম।
  3. কয়েক দিন পরে সিস্টেমটি জেগে উঠল এবং এটি আবার প্যাকেজগুলি সন্ধান এবং ডাউনলোড শুরু করে।
  4. এই সংগ্রহস্থলটি নিয়ে আমি ঘোলাফেরা করার কিছু আগে প্যাকেজ ডাউনলোড শেষ হয়েছিল।
  5. সিস্টেম গ্লিবিক ইনস্টলেশনটি এর git checkoutআগে এবং তার আগে আপডেট হয়েছিল git pull
  6. gitবাইনারি পর প্রতিস্থাপন করেছি git pullশুরু হওয়ার আগেই শেষ হয়েছে।
  7. এবং সপ্তম দিনে, gitতার সমস্ত শ্রম থেকে বিশ্রাম নিয়েছিল। এবং পৃথিবী মুছে ফেলেছে তাই প্রত্যেককেও বিশ্রাম নিতে হয়েছিল।

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


1
গিট ব্যর্থ হতে পারে কারণ গিটটি একক বাইনারি পরিবর্তে ডিফারেন্ট কমান্ড ব্যবহার করে। একটি সাধারণ গিট টান কার্যকর করে git-fetch, git-rebaseবা git-mergeএবংgit gc
ফেরিবিগ

2

মুছে ফেলার জন্য ফাইলের পথ নির্ধারণে ব্যর্থ হয়ে সম্ভবত।

আপনার কেসটি আমাকে একটি সুন্দর দিন মনে করিয়ে দিয়েছে যে যখন আমার remove(path)বাড়ির তৈরি পদ্ধতিটি রুট ফোল্ডারটি সরিয়ে দেওয়ার চেষ্টা করেছিল কারণ প্রদত্ত প্যারামিটারটি খালি স্ট্রিং ছিল যা ওএসটি রুট ফোল্ডার হিসাবে সংশোধন করেছিল!

এটি একটি অনুরূপ গিট বাগ হতে পারে। যেমন যে:

  1. রিবেস কমান্ড একটি ফাইল remove(project_folder + file_path)(সিউডো কোড) মুছতে চেয়েছিল
  2. file_pathএ সময় কোনওভাবে শূন্য ছিল।
  3. কমান্ড যেমন কিছু জিনিস হিসাবে মূল্যায়ন remove(project_folder)

1

ভাগ্যের সাথে, আপনি নিম্নলিখিত কমান্ড দিয়ে এটি ঠিক করতে পারেন:

git reset --hard ORIG_HEAD  

যখন সম্ভাব্য বিপজ্জনক পরিবর্তনগুলি শুরু হয়, গিটটি আপনার বর্তমান অবস্থাকে ORIG_HEAD এ স্ট্যাশ করে। এটির সাহায্যে আপনি কোনও সংযুক্তি বা পুনর্বাসনাটি পূর্বাবস্থায় ফিরিয়ে আনতে পারেন।

গিট ম্যানুয়াল: একটি মার্জ পূর্বাবস্থায় ফেলা হচ্ছে


4
আমি মনে করি না আপনি পুরো প্রশ্নটি পড়েছেন। গিট মেটা-ডেটা নেই বলে এই ধরণের সমাধানটি পুরোপুরি প্রশ্নের বাইরে । এটি পুনরায় সেট করার জন্য একটি বিদ্যমান .git ডিরেক্টরি এবং এটিতে কিছু বস্তু থেকে কাজ করতে হবে। আমার কিছু নাই. এটি কেবল একটি গণ্ডগোলিত ওয়ার্কিং ডিরেক্টরি নয়, এটি আর কোনও ধরণের সংগ্রহস্থল নয়।
কালেব

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

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

আমিও খুব কৌতূহলী। আমার রেপোসের সাথে এরকম কিছু ঘটতে পারে।
রুথিনেটর

-1

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


1
জোর করে ধাক্কা সামান্য কয়েকটা কমিটকে প্রত্যাবর্তন করেছিল। এটি আমি নীচে টেনে নিইনি (ওয়ার্কিং ডিরেক্টরিটি এখন আর একটি কার্যনির্বাহী ডিরেক্টরি নয়!) এবং এটি পুনরায় ক্লোনিং করা থাকলেও কোনও লাভ হবে না।
কালেব

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