আমার গিট সংগ্রহস্থলটি ভুল রুট ডিরেক্টরিতে রয়েছে। আমি কি এটি স্থানান্তর করতে পারি? (../ পরিবর্তে ./)


118

git initএক মাস বা তার আগে আমি যখন আমার সর্বশেষ প্রকল্পটি সম্পাদনা করেছি তখন আমি আমার প্রকল্পের মূলের চেয়ে ডিরেক্টরিতে একটি ডিরেক্টরিতে কমান্ডটি চালিত করেছি।

সুতরাং আমার সংগ্রহস্থল ./projectডিরেক্টরিতে নয় ./project/my-new-projectডিরেক্টরিতে। আমি জানি না যে আমি কীভাবে এই সমস্যাটি আগে বুঝতে পারি নি, তবে আমি এখন পর্যন্ত .git ডিরেক্টরি অনুসন্ধান করে দেখিনি।

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

উত্তর:


19

সম্ভবত সবচেয়ে সহজ জিনিস, আপনি ইতিমধ্যে আপনি সংরক্ষণ করতে চান এমন কিছু ইতিহাস তৈরি না করে কেবল .gitসাব - ডিরেক্টরিকে মুছে ফেলা এবং সঠিক ডিরেক্টরিতে আরআইডি পুনরায় করা হবে।

সমস্যাটি সমাধানের জন্য যদি আপনি গিট ব্যবহার করেন তবে যে কোনও সমাধান অগত্যা প্রচুর "এই ফাইলটি এখানে সরানো" ইতিহাসের এন্ট্রিগুলিতে ফেলে রাখবে যা আসলে পরিবর্তন হয় না, তবে আপনি তৈরির সময় স্ক্রুআপ ঠিক করে ফেলছেন। এটি ঠিক তৈরি করা আরও ভাল।


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

8
এটি প্রচুর স্টাফ ভেঙে দেয়। stackoverflow.com/a/3247756/825364 এটি করার একটি আরও ভাল উপায়।
স্টিভ টাবার

2
ঠিক আছে, কিছু ইতিহাস সংরক্ষণ করা যা গিটের জন্য ব্যবহৃত হয়। সম্ভবত আমাদের কেবল আমাদের সিস্টেম থেকে .git উপ-ডিরেক্টরি মুছে ফেলা এবং গিটটি আনইনস্টল করা উচিত? ভিসিএসের পরিবর্তে কোনও এফটিপি-সার্ভার ব্যবহার করা সম্ভবত সর্বোপরি সহজ জিনিস!
ঘেরম্যান

2
নীচের উত্তরটি আরও অনেক ভাল পদ্ধতির যেহেতু এটি সমস্ত ইতিহাস ধরে রাখে
BigMikeW

2
সুতরাং আমার জন্য, আমি এটি করেছি এবং সাথে সাথে আমার ভুল বুঝতে পেরেছি। চিন্তার কোনও পরিবর্তন না করে, পরিষ্কার স্লেটে ফিরে আসার এটি সহজতম উপায়।
মাইক 15 ই

261

আমার বিপরীত সমস্যা ছিল - গিট রুটকে পিতামহিত ডিরেক্টরিতে রূপান্তর করতে হয়েছিল (প্রকল্প / এসসিআর থেকে প্রজেক্টে) আমার চূড়ান্ত অবাক করার জন্য, নিম্নলিখিতগুলি কাজ করেছিল !!

src$ mv .git ../ 
src$ cd ..
project$ git add src
project$ git commit -a

গিটটি চালাকি করে সনাক্ত করেছে যে সমস্ত নতুন ফাইল পুরানো ফাইলগুলির নাম পরিবর্তন করে দেওয়া হয়েছে এবং কোনও ইতিহাস হারিয়ে যায়নি

আপনি অনুরূপ কিছু চেষ্টা করতে পারেন ... .git ফোল্ডারটি সরান এবং প্রতিশ্রুতি দেওয়ার আগে ফাইলগুলি আবার যুক্ত করতে পারেন


8
এটি আমার জন্য পুরোপুরি কাজ করেন। আমি .gitigore
Relequestual

7
আমার প্রিয় স্যার, আপনি জীবন রক্ষাকারী। এই জিনিস সত্যিই কাজ করে। ধন্যবাদ.
রাদু মুর্জিয়া

1
অতিরিক্তভাবে, আমি git rm'dফাইলগুলিকে তাদের পুরানো অবস্থান থেকে, তাই git status(সঠিকভাবে) বেশ কয়েকটি নাম পরিবর্তন ক্রিয়াকলাপটি শেষ করেছিলাম । আমি গিট নিয়ে যত বেশি কাজ করি, ততই আমার পছন্দ হয়।
এসএসসি

7
@ মাইক এটি গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করা উচিত। এটি পুনরায় প্রবেশের জন্য একটি পছন্দসই সমাধান কারণ আপনি ইতিহাস হারান না। আপনি যদি আমাকে বিশ্বাস না করেন, আপভোট গণনা নিজেই কথা বলে।
জোসেফ স্পেনস

3
ধন্যবাদ! এটা আমার জন্য কাজ, কিন্তু আমি একটি দম্পতি আরো কিছু করার ছিল: সংগঠনের, আমি আপডেট করার আগে 1. .gitignoreএবং দৌড়ে git add -Aরুট ফোল্ডারে; এর পরে, গিট সমস্ত ফাইলের renamedচেয়ে সঠিকভাবে প্রদর্শন করেছে deleted। ২. যেহেতু আমি সাবমডিউলগুলি ব্যবহার করি, তাই আমাকে .gitmodulesনতুন রুটে চলে যেতে হয়েছিল, এবং বিভিন্ন গিট কনফিগারেশন ফাইলগুলিতে সাবমডিউল পাথ আপডেট করতে হয়েছিল। কোন ফাইলগুলি সংশোধন করতে হবে তা সন্ধান করতে আমি ছুটে এসেছিgrep -nrI --color 'old/path/to/submodule' .
Guido Walter Pettinari

43

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

ফোল্ডারটি সরান:

mv .git thecorrectfolder/

গিট রেপো পুনরায় আরম্ভ করুন:

cd thecorrectfolder/
git init

সমস্ত ফাইল পুনরায় যুক্ত করুন, প্রতিশ্রুতিবদ্ধ করুন এবং চাপ দিন:

git add .
git commit -am 'fixing things'
git push origin master

সম্পন্ন! নিজেকে বিয়ার দিন Get

আপনি যখন পুনরায় আরম্ভ করার পরে গিট রেপো প্রতিশ্রুতিবদ্ধ করেন, আপনি এমন একগুচ্ছ আউটপুট পাবেন যা দেখতে এই জাতীয় দেখায়:

rename {ethanode/coffee => coffee}/app.coffee (100%)

অন্য কথায়, আপনার সমস্ত তথ্যসূত্র ফোল্ডার থেকে এবং সঠিক ফোল্ডারটি ব্যবহার করার জন্য নতুন নামকরণ করা হচ্ছে।


ধন্যবাদ! এই পদ্ধতিটি আমার প্রয়োজন মতো ছিল!
জিল বার্কার্স

এটি আমার পক্ষে কাজ করেছিল তবে এটি কিছুটা কুৎসিত ছিল। যতদূর গিট সম্পর্কিত, আমি কিছুই 'সরানো' হইনি, আমি কেবল কয়েকশো ফাইল মুছে ফেলেছি এবং তার পরে আরও কয়েক'শ অন্যান্য অভিন্ন ফাইল যুক্ত করেছি।
বিজেএমসি

6
গিট থ্রির প্রয়োজন নেই এবং বাকী অংশটি আমার উত্তর হিসাবে একই যা আপনার কয়েক বছর আগে জমা দেওয়া হয়েছিল: stackoverflow.com/a/3247756/391753
অভিষেক আনন্দ

35

git filter-branchআপনাকে সেইভাবে ইতিহাস পুনর্লিখন করতে দেয়। git filter-branchMan পৃষ্ঠা এমনকি আপনার কেস আছে একটি উদাহরণ হিসাবে :

ভান্ডার / এর প্রকল্পের মূল হয়ে গেছে যেন দেখতে এই সংগ্রহস্থলটি পুনরায় লেখার জন্য এবং অন্যান্য সমস্ত ইতিহাস বাতিল করে দিন:

git filter-branch --subdirectory-filter foodir -- --all

আপনি সম্ভবত রান git cloneআগে (বা পরে?) একটি নতুন উপ ডিরেক্টরিতে রেপো করতে চান git filter-branch। (ফিল্টার-ব্রাঞ্চের আগে ক্লোনিং করা এবং নতুন ক্লোনটিতে ফিল্টার-শাখা চালানো .git/যদি কিছু ভুল হয়ে যায় তবে ব্যাকআপ হিসাবে আসল দিরকে জায়গায় রেখে দেওয়ার সুবিধা হবে ))


1
এটি "অন্যান্য সমস্ত ইতিহাস বাতিল করে দেয় না" ( .gitউপ-ডিরেক্টরিগুলি "রুট হিসাবে চিন্তিত" হয়ে ওঠার সময় রেপো শীর্ষ স্তরে থেকে থাকে) - এটি আক্ষরিকভাবে রেপোতে থাকা সমস্ত অন্যান্য ফাইলকে বাতিল করে দেবে এবং সমস্ত subdirectory/*ফাইলকে মূল ফোল্ডারে নিয়ে যাবে This ।
লুই ম্যাডডক্স

দুর্দান্ত উত্তর, তবে মনে রাখবেন যে যদি একটি .gitignore ফাইল থাকে (যদি ট্র্যাক করা থাকে), তবে এই ক্রিয়াকলাপটি এটি হারিয়ে যাবে। এছাড়াও, এর git push --forceপরে প্রবাহের সংগ্রহগুলি আপডেট করার জন্য আপনাকে একটি করতে হবে।
ওয়াল্ডরিয়াস

12

গিট তাদের হ্যাশগুলির সাথে ফাইলগুলি মনে রাখতে পারে,

কেবল আপনার .gitরুট ডিরেক্টরিতে সরান এবং বিকল্পের gitসাথে সমস্ত ফাইলের পরিবর্তনগুলি মনে রাখার জন্য বলুন --all

$ mv .git ../
$ cd ..
$ git add . --all 
$ git status // => you can see all the files recognized as renamed 100%
$ git commit -m "Moves repo to root directory."

3

git-mvআপনার ফাইলগুলিকে "উপরে" যথাযথ স্থানে সরানোর জন্য ব্যবহার করুন , তারপরে git-rm"আমার নতুন প্রকল্প" ডিরেক্টরিটি।


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

2

আমি আমার সংগ্রহস্থলটি যে কোনও জায়গায় সরিয়ে নেওয়ার একটি উপায় খুঁজতে এখানে এসেছি ।

সেক্ষেত্রে আমি একমাত্র ছিলাম না, শেষ পর্যন্ত আমি যা করেছি তা এখানে:

https://git.wiki.kernel.org/index.php/GitFaq# How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F আমার রেপোর অনুলিপি অনুলিপি এবং তারপরে এটি আর বেয়ার না হওয়ার কথা বলেছে, তাই ফাইলগুলি দেখানো হয়েছে যে নতুন ফোল্ডারে। (তারপরে ফাইল এবং লগ উপস্থিত ছিল কিনা তা যাচাই করা হয়েছে)) পুরানো রেপোটি কিছু সময়ের জন্য রেখেছিল, কেবলমাত্র ক্ষেত্রে ...

এইভাবে আমি ইতিহাস না হারিয়ে আমার রেপো সরাতে সক্ষম হয়েছি।

শুভেচ্ছা, দিনঃ


আমি ভুল হলে আমাকে সংশোধন করুন, তবে এটি প্রদর্শিত হয় যে আপনি কেবল খালি ফাইল-সিস্টেম সরঞ্জামগুলি ছাড়া কিছু ব্যবহার করে সংগ্রহস্থল ডিরেক্টরিটিকে তার নির্ধারিত অবস্থানে নিয়ে যেতে পারতেন mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo
কিউডি

2

এই একই সমস্যাটি সবেমাত্র আমার শেষ সমাধানটি হ'ল:

  1. .Git ফোল্ডারটি যেখানে হওয়া দরকার সেখানে নিয়ে যান।
  2. আমি সবেমাত্র .git এ সরিয়ে ফোল্ডারে ডিরেক্টরি পরিবর্তন করুন
  3. গিটটি মনে করে যে এটি হওয়া উচিত বলে ফোল্ডারের সামগ্রীগুলি পুনরায় সেট করুন: git reset --hard HEAD
  4. কেডিফ 3 বা অন্য কোনও তুলনা সরঞ্জামের সাথে সামগ্রীগুলি কী হওয়া উচিত তা পরীক্ষা করুন match
  5. পুরানো জায়গায় এখন সংস্করণযুক্ত ফাইলগুলি মুছুন।

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


-3

এখানে দুটি উপায় রয়েছে:

  1. সিডি TheWrongDirectory rm -rf .git

  2. কেবল .git ফোল্ডারটি মুছে দিন এবং সিডি থেকে সঠিক ডিরেক্টরিতে।

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