গিট সংগ্রহস্থলটিকে অন্য ডিরেক্টরিতে কীভাবে স্থানান্তরিত করবেন এবং সেই ডিরেক্টরিটিকে গিট সংগ্রহস্থল করবেন?


102

আমার একটি ডিরেক্টরি গিটারপো 1 আছে । এই ডিরেক্টরিটি একটি গিট সংগ্রহস্থল।

  • আমি এই গিটারপো 1 অন্য ডিরেক্টরি নিউরেপোতে স্থানান্তর করতে চাই ।

  • ডিরেক্টরি newrepo গিট ইতিহাসের ক্ষতি না করে নতুন গিট সংগ্রহস্থল হওয়া উচিত এবং ডিরেক্টরি gitrepo1 থাকা উচিত ।

  • ডিরেক্টরি গিটারপো 1 এখন কেবল একটি ডিরেক্টরি হওয়া উচিত ( নিউরেপোর অভ্যন্তরে ) কোনও .gitসূচক ছাড়াই , অর্থাত্ এটি আর একটি স্বতন্ত্র গিট সংগ্রহস্থল বা উপ - মডেল হওয়া উচিত নয়।

কিভাবে আমি এটি করতে পারব?


9
mv girepo1 newrepo??
ডিডিসন

উত্তর:


111

এটা খুবই সাধারণ. গিট তার ডিরেক্টরিটির নাম কী তা নিয়ে চিন্তা করে না। এটি কেবল ভিতরে কী আছে তা যত্নশীল করে। সুতরাং আপনি সহজভাবে করতে পারেন:

# copy the directory into newrepo dir that exists already (else create it)
$ cp -r gitrepo1 newrepo

# remove .git from old repo to delete all history and anything git from it
$ rm -rf gitrepo1/.git

নোট করুন যে অনুলিপি বড় এবং দীর্ঘ ইতিহাস সহ অনুলিপিটি অনুলিপি হয়। আপনি এটি খুব সহজে এড়াতে পারেন:

# move the directory instead
$ mv gitrepo1 newrepo

# make a copy of the latest version
# Either:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/  # doesn't copy .gitignore (and other hidden files)

# Or:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git

# Or (look further here: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

একবার আপনি তৈরি করার পরে newrepo, স্থাপনের গন্তব্যটি আপনি চাইলেও gitrepo1ভিতরে যে কোনও জায়গায় থাকতে পারে newrepoif এটি প্রক্রিয়াটি পরিবর্তন করে না, আপনি যে পথে gitrepo1ফিরে লিখছেন path


6
+1 এটা সম্ভবত কহতব্য এর এই gotcha হয় একটি Git রেপো সরালে অব্যবহারযোগ্য তোলে (যদিও হিসাবে উল্লিখিত এটিকে সহজে সংশোধন করা হয়েছে) যা অর্থ করতে পারেন - Git সংস্করণ 1.7.8 বা 1.7.9 সঙ্গে তৈরি করা ভান্ডার ক্ষতিগ্রস্ত করেছে।
AD7six

4
আমি উইন্ডোজ মেশিনে এবং কমান্ড প্রম্পট ব্যবহার করছি। আমি "সিপি" কমান্ড খুঁজে পাইনি। "সিপি" কমান্ড অন্য ওএসের সাথে নির্দিষ্ট?
এলপি 13

4
@ ব্যবহারকারী 3862378, cpপ্রায় প্রতিটি কমান্ড বা ফাংশন অন্যান্য ওএসের জন্য নির্দিষ্ট। আসলে, এটি উইন্ডোজ নয় এমন প্রতিটি ওএসের সাথে নির্দিষ্ট। মাইক্রোসফ্টকে কল করার চেষ্টা করুন এবং তাদের কেন পসিক্স নয় তা জিজ্ঞাসা করুন। যাইহোক, cpঅনুলিপি। mvমানে সরানো। rmমানে অপসারণ। আপনি উইন্ডোজ সমতুল্য খুঁজে পেতে পারেন।
শাহবাজ

@ শাহবাজ ধন্যবাদ, উপরের সমাধানটি নীচের কাঠামোটি তৈরি করেছে "নিউরেপো ->। গিট" এবং "নিউরেপো-> অন্যান্য সমস্ত ফাইল গিটারপো 1" থেকে ... এটি "গিটারপো 1" ফোল্ডারটি "নিউরেপো" এর ভিতরে রাখছে না .. আমি আগ্রহী যদি উইন্ডোতে ম্যানুয়ালি ফোল্ডার তৈরি করা এবং মূল ফোল্ডারের নীচে ".git" ফোল্ডারটি সরানো হচ্ছে ... ইতিহাসকে প্রভাবিত না করে কি কাজ করা যাবে?
এলপি

4
@ ব্যবহারকারী 3862378, এটি না করার কোনও কারণ নেই। .git/ইতিহাসের সমস্তটি ধারণ করে, এতে আপনার সর্বশেষ প্রতিশ্রুতি অন্তর্ভুক্ত রয়েছে। আপনি যেখানেই এটি রাখুন, আপনার সমস্ত ইতিহাস আছে। প্রকৃতপক্ষে, সেই ডিরেক্টরিতে থাকা সমস্ত ফাইল যদি আপনি যে মূল রেপো থেকে নিয়েছেন তার থেকে আলাদা হয় .git/তবে কেবলমাত্র এটি আপনাকে কিছু ফাইল মুছে ফেলা এবং কিছু চিহ্নবিহীন ফাইল উপস্থিত থাকার কথা বলে। একটি দিয়ে git reset --hard, সরানো ফাইলগুলি স্বয়ংক্রিয়ভাবে পুনরুদ্ধার করা হবে! কেবলমাত্র লক্ষণীয় বিষয় হ'ল কেবল অনুলিপি করার মাধ্যমে .git/আপনি আপত্তিজনক পরিবর্তনগুলি পুনরুদ্ধার করতে পারবেন না।
শাহবাজ

4

এটি কিছুটা দেরি হয়ে গেছে এবং ইতিমধ্যে প্রশ্নের উত্তর দেওয়া হয়েছে তবে কোনও মাথা ব্যথা ছাড়াই এটি করা:

  1. পুরানো গিট ফোল্ডারে আপনি বর্তমান শাখায় কী আছেন তা পরীক্ষা করে দেখুন git status, শাখা বিকাশ বলি
  2. ডিরেক্টরিটিকে নতুন গিট ফোল্ডারে পরিবর্তন করুন, তারপরে git cloneরেপো থেকে নতুন ফোল্ডারে প্রকল্পটি
  3. আপনার নতুন ফোল্ডারে বর্তমান শাখাটি পরীক্ষা করুন: git checkout development
  4. পুরোনো এক সঙ্গে আপনার নতুন ফোল্ডার Syncronize ব্যবহার rsync, .git ফোল্ডারের ব্যতীত :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1

তারপরে আপনি যেখানে রেখে গেছেন সেখানে চালিয়ে যাওয়া ভাল


4

এটি তার চেয়েও সহজ। এটি কেবল (উইন্ডোজে, তবে এটি অন্যান্য ওএসে কাজ করা উচিত) করেছে:

  1. নিউরেপো তৈরি করুন ।
  2. গিটারপো 1 কে নিউরেপোতে সরান ।
  3. সরান .git থেকে gitrepo1 করার newrepo (এক স্তর উপরে)।
  4. পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ (ট্র্যাকিং প্রয়োজনীয় হিসাবে ঠিক করুন)।

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


আমার কাছে এটি যথাযথ উত্তরের মতো মনে হচ্ছে (এটি গ্রহণযোগ্য উত্তরের মতো গিট ইতিহাসের ক্ষতি হতে পারে না)।
মঙ্গল

@ মার্সেস: টিএনএক্স। (আমি এখনও বিশ্বাস করতে পারি না যে আমি একটি গিট প্রশ্নের উত্তর দিয়েছি!)
david.pfx

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