এক গিট রেপো থেকে অন্যটিতে কমিটস কীভাবে অনুলিপি করবেন?


102

গত সপ্তাহে আমি একটি গিথুব রেপো তৈরি করেছি এবং রেপোর জন্য লাইসেন্স নির্বাচন করতে ভুলে গিয়েছি। এখন ইতিমধ্যে 3 টি বড় কমিট রয়েছে।

আমি 3 জন অবদানকারীকে জিজ্ঞাসা করেছি যদি এটি ঠিক আছে, আমি যদি রেপো মুছে ফেলি এবং তারপর আবার একই নামটি তৈরি করি এবং এই সময় রেপো তৈরি করার সময় লাইসেন্সটি নির্বাচন করি এবং তারা ঠিক কী তা ঠিক করে।

প্রশ্ন

নতুন রেপোতে কমিটগুলি পাওয়ার কোনও উপায় আছে (এবার প্রথম প্রতিশ্রুতিটি লাইসেন্সের ফাইল হ'ল) ​​এবং তারপরেও প্রতিশ্রুতি মেটা তথ্য রাখি?


4
আপনি এখনও মূল রেপোতে লাইসেন্স যুক্ত করতে পারেন। বিশদর জন্য help.github.com/articles/open-source-licensing/… দেখুন ।
এডউইনকস্ল


উত্তর:


172

নতুন রেপোতে কমিটগুলি পাওয়ার কোনও উপায় আছে (এবার প্রথম প্রতিশ্রুতিটি লাইসেন্সের ফাইল হ'ল) ​​এবং তারপরেও প্রতিশ্রুতি মেটা তথ্য রাখি?

হ্যাঁ, আপনার প্রথম প্রতিশ্রুতি শীর্ষে একটি রিমোট এবং চেরি-বাছাই করে কমিটস।

# add the old repo as a remote repository 
git remote add oldrepo https://github.com/path/to/oldrepo

# get the old repo commits
git remote update

# examine the whole tree
git log --all --oneline --graph --decorate

# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three

# check your local repo is correct
git log

# send your new tree (repo state) to github
git push origin master

# remove the now-unneeded reference to oldrepo
git remote remove oldrepo

এই উত্তরটির বাকীটি হ'ল যদি আপনি এখনও আপনার পূর্ববর্তী রেপোতে LICENSE যুক্ত করতে চান।

হ্যাঁ. আপনি আপনার লাইসেন্সের প্রতিশ্রুতিটি রিবেসিংয়ের মাধ্যমে প্রথম প্রতিশ্রুতি হিসাবে রাখতে পারেন।

সমস্ত প্রতিশ্রুতিবদ্ধ লেখক এবং প্রতিশ্রুতিবদ্ধ তারিখগুলি অক্ষত রেখে রেবাইজিং প্রতিশ্রুতিবদ্ধ আদেশের পুনর্বিন্যাসের গিটগুলি।

ভাগ করা রেপোতে কাজ করার সময়, আপনার সম্পূর্ণ দলটি গিট-সাবলীল না হলে এটি সাধারণত নিরুৎসাহিত হয়। যাঁরা নেই, তাদের জন্য তারা কেবল সংগ্রহস্থলের একটি নতুন কপি ক্লোন করতে পারেন।

আপনি এখানে প্রথম প্রতিশ্রুতিবদ্ধ হিসাবে আপনার লাইসেন্সের প্রতিশ্রুতি পেতে পারেন তা এখানে।

1. আপনার স্থানীয় অনুলিপি আপডেট করুন এবং পুনর্বাসিত করুন

আপনার প্রকল্পটি দেখুন এবং আপনার বর্তমান 3 টি কমিট স্ট্যাকের শীর্ষ প্রতিশ্রুতিতে লাইসেন্সের ফাইলটি স্থাপন করুন।

#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'

তারপরে কমিটগুলি পুনর্বার করতে মাস্টার শাখায় একটি ইন্টারেক্টিভ রিবেস করুন ।

git rebase -i --root

এটি একটি সম্পাদক খুলবে। নীচের লাইনটি (আপনার "প্রাথমিক প্রতিশ্রুতিবদ্ধ" প্রতিশ্রুতি, অতি সাম্প্রতিক প্রতিশ্রুতি) ফাইলটির শীর্ষে যান। তারপরে সম্পাদকটি সংরক্ষণ করুন এবং প্রস্থান করুন।

আপনি সম্পাদক থেকে প্রস্থান করার সাথে সাথেই গিটটি আপনার সুনির্দিষ্ট ক্রমে কমিটগুলি লিখবে।

আপনার কাছে এখন সংগ্রহস্থলের স্থানীয় কপি আপডেট হয়েছে। কর:

git log

যাচাই করার জন্য.

২. আপনার নতুন রেপো রাষ্ট্রকে গিথুবে চাপ দিন

এখন আপনার অনুলিপি আপডেট করা হয়েছে, আপনাকে এটিকে গিথুবে চাপ দিতে হবে।

git push -f origin master

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

৩. গিথুবে সহযোগীদের সিঙ্ক্রোনাইজ করুন

সবশেষে, সমস্ত সহযোগীদের এই সংগ্রহস্থলের সাথে সিঙ্ক্রোনাইজ করতে হবে।

প্রথমে তাদের অবশ্যই পরিষ্কার সংরক্ষণাগার থাকতে হবে কারণ সংরক্ষণ না করা পরিবর্তনগুলি থাকলে নিম্নলিখিত কমান্ডটি ধ্বংসাত্মক হতে পারে।

# make sure there are no unsaved changes
git status 

# pull the latest version from github
git fetch  

# move their master branch pointer to the one you published to github.
git reset --hard origin/master

এটাই. প্রত্যেকের এখনই সিঙ্কে থাকা উচিত।


4
দুর্দান্ত উত্তর! ধন্যবাদ!
কিরল

অনেক সময় বাঁচিয়েছে। ধন্যবাদ!
an0nh4x0r

9

আমার অনুরূপ সমস্যা হয়েছিল যেখানে আমি আমার গিথুবকে একটি রেপো কাঁটাতে ভুলে গিয়েছিলাম এবং আমার ভুল বুঝতে পারার আগে বেশ কয়েকটি কমিট যোগ করেছি।

আমি একটি খুব সহজ সমাধান খুঁজে পেয়েছি।

প্রথমে রিমোটটি মূল রেপোতে সরান

git remote remove origin

দ্বিতীয়টি আমার গিথুবে নতুন কাঁটাচামচায় একটি রিমোট যুক্ত করুন

git remote add origin <my repo URL>

তারপরে আমি অরিজিনাল মাস্টারের দিকে ধাক্কা দিয়েছিলাম এবং আমার সমস্ত কমিট আমার গিথুব এ দেখায়।


4
এটি যুক্ত করার জন্য, যখন আমি ঠেলাঠেলি করতাম, আমাকে করতে হয়েছিল git push --set-upstream origin master, কিন্তু গিট আপনাকে এ সম্পর্কে সচেতন করে তোলে।
মিরিচার্ডস

দুর্দান্ত এবং সহজ সমাধান!
মেকোগ্রাফ

3
  • গন্তব্য গিট = ইউআরএলডি (বিদ্যমান সামগ্রী কোনও বিষয় নয়)
  • সোর্সজিট = ইউআরএলএস

    git clone UrlS
    
    git remote add origin2 UrlD
    
    git push -f origin2 master
    

এখন গন্তব্যটির উত্স হিসাবে একই ডেটা থাকবে (আপনিও উত্স 2 এর পরিবর্তে উত্স ব্যবহার করতে পারেন)


0

আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করেছি:

  • সোর্স রেপোকে / সি / এসআরসিআরপিওর মতো ফোল্ডারে ক্লোন করুন

  • গন্তব্য রেপোকে / সি / ডিএসটিআরপিওর মতো ফোল্ডারে ক্লোন করুন এবং গন্তব্য শাখায় স্যুইচ করুন

  • গন্তব্য রেপোর মূল ফোল্ডারে কমান্ডটি চালান:

    গিট টান / সি / এসআরসিআরআরসিপিআরসিআরসিআরঙ্ক - নিবন্ধ-সম্পর্কহীন-ইতিহাস

অতিরিক্ত দূরবর্তী রেফারেন্স তৈরি করার দরকার নেই

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