git - tutorial - বিদ্যমান ফোল্ডারে "ক্লোন গিট" করার সর্বোত্তম অনুশীলন কী?




gitlab (8)

আমি প্রকল্পের একটি কাজ কপি আছে, কোন উৎস নিয়ন্ত্রণ মেটা তথ্য ছাড়া। এখন, আমি এই ফোল্ডারে গিট ক্লোন সমান করতে চাই এবং আমার স্থানীয় পরিবর্তনগুলি রাখতে চাই।

গিট ক্লোন আমাকে একটি বিদ্যমান ফোল্ডারে ক্লোন করার অনুমতি দেয় না। এখানে সেরা অনুশীলন কি?

https://code.i-harness.com


অনেক প্রশ্নের উত্তর ইতিমধ্যেই ওপিকে জিজ্ঞেস করল যে কীভাবে। কিন্তু এটি উল্টো যে এটি বিপরীত ভাবে করা প্রায় সহজতর:

git clone repo-url tmp/
cp -R working/ tmp/

আপনি এখন পছন্দসই লক্ষ্য অবস্থা আছে - তাজা ক্লোন + স্থানীয় পরিবর্তন।


আপনি কমপক্ষে গিট 1.7.7 ব্যবহার করছেন (যা --config বিকল্প clone শিখিয়েছে), বর্তমান ডিরেক্টরিটি একটি কার্যকর অনুলিপিতে পরিণত করতে:

git clone example.com/my.git ./.git --mirror --config core.bare=false

এটি দ্বারা কাজ করে:

  • একটি নতুন .git ফোল্ডারে সংগ্রহস্থল ক্লোন
  • .git একটি .git মেটাডেটা ফোল্ডারে নতুন ক্লোন করে তোলে। .git হতে হবে
  • --config core.bare=false --mirror বিকল্পের implicit bare=true countermands, ফলে রিপোজিটরিটিকে একটি সম্পর্কিত কাজের নির্দেশিকা এবং স্বাভাবিক ক্লোন হিসাবে কাজ করার অনুমতি দেয়।

আপনি যদি একটি কাজ কপি চালু করতে চান ডিরেক্টরি একটি .git মেটাডেটা ডিরেক্টরি ইতিমধ্যে বিদ্যমান থাকলে এটি সম্ভবত কাজ করবে না।


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

mv $dir $dir.orig
git clone $url $dir
rsync -av --delete --exclude '.git' $dir.orig/ $dir/
rm -rf $dir.orig

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

অন্য দিকে যদি আপনি সত্যিই এটি অন্য উপায় কাছাকাছি করতে হবে, আপনি এই মত কিছু সঙ্গে একই ফলাফল পেতে পারেন:

cd $dir
git clone --no-checkout $url tempdir
mv tempdir/.git .
rmdir tempdir
git reset --mixed HEAD

যাইহোক, আমি যা করতে চাই তা হল, আপনার সমস্ত স্থানীয় পরিবর্তনের একটি অনুলিপি পাওয়ার জন্য git stash মতো কিছু চালানো হয়, তারপর আপনি তাদের পুনরায় প্রয়োগ করতে পারেন এবং আপনি কোনটি করতে চান তা দিয়ে কাজ করতে পারেন।

* উভয় উদাহরণ আপনার প্রকল্পটির মূল ডিরেক্টরির মধ্যে শেল থেকে শুরু করে অনুমান করে।


একটি temp ডিরেক্টরি ব্যবহার করে জরিমানা, কিন্তু আপনি যদি পদক্ষেপটি এড়াতে চান তবে এটি কাজ করবে। আপনার কাজের নির্দেশিকা রুট থেকে:

$ rm -fr .git
$ git init
$ git remote add origin your-git-url
$ git fetch
$ git reset --mixed origin/master

একটি বিদ্যমান ডিরেক্টরিতে মাস্টার শাখা চেকআউট করার জন্য আমি নিম্নলিখিতটি করেছি:

git init
git remote add origin [my-repo]
git fetch
git checkout origin/master -ft

ক্লোন না, পরিবর্তে আনতে। Repo মধ্যে:

git init
git remote add origin $url_of_clone_source
git fetch origin
git checkout -b master --track origin/master # origin/master is clone's default

তারপরে আপনি যা চান তা পেতে আপনি গাছটি পুনরায় সেট করতে পারেন:

git reset origin/master # or whatever commit you think is proper...

এবং আপনি ক্লোন মত আপনি।

এখানে আকর্ষণীয় প্রশ্ন (এবং উত্তর ছাড়াই যে কেউ): আপনার নগ্ন গাছটি কোনটি করে তা খুঁজে বের করতে হয়, সেই কারণে কোন অবস্থানে রিসেট করতে হয়।


এই আমি পূরণ এসেছি সব পদ্ধতির শ্রেষ্ঠ

একটি খালি অস্থায়ী ডিরেক্টরিতে কেবলমাত্র সংগ্রহস্থলের। জিটি ফোল্ডার ক্লোন করুন (তারা ইতিমধ্যে existing-dir ডিআইআর হিসাবে ফাইলগুলিকে বাদ দিচ্ছে)

  1. git clone --no-checkout repo-path-to-clone existing-dir/existing-dir.tmp // স্থানীয় repo ক্লোন করার জন্য --no-hardlinks চান হতে পারে

ফাইলের সাথে ডিরেক্টরিতে .git ফোল্ডারটি সরান। এই existing-dir একটি গিট repo করে তোলে।

  1. mv existing-dir/existing-dir.tmp/.git existing-dir/

অস্থায়ী ডিরেক্টরি মুছে দিন

  1. rmdir existing-dir/existing-dir.tmp

  2. cd existing-dir

Git মনে করে সব ফাইল মুছে ফেলা হয়, এটি repo অবস্থানে HEAD তে পরিণত হয়।

সতর্কতা: ফাইলগুলিতে যে কোনও স্থানীয় পরিবর্তন হারিয়ে যাবে।

  1. git reset --hard HEAD

এটি একটি নতুন ডিরেক্টরিতে ক্লোন করার মাধ্যমে, আপনার বিদ্যমান ডিরেক্টরিতে .git ডিরেক্টরিটি সরানোর মাধ্যমে করা যেতে পারে।

আপনার বিদ্যমান ডিরেক্টরি "কোড" নামকরণ করা হয়।

git clone https://myrepo.com/git.git temp
mv temp/.git code/.git
rm -rf temp

ক্লোন কমান্ডের সময় চেকআউট না করেও এটি করা যেতে পারে; আরো তথ্য here পাওয়া here





git