ইতিহাস ছাড়া গিট রেপো অনুলিপি করুন


200

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

কিছু প্রতিশ্রুতিবদ্ধ ইতিহাসের কিছু বা না রেখে সর্বশেষ প্রতিশ্রুতি জনসাধারণের পক্ষে সর্বসাধারণের সহজতম রাস্তাটি কী (সর্বজনীন ভাণ্ডারে পূর্ববর্তী অঙ্গীকারগুলির সত্যই দরকার নেই বা চাই না)?


আপনি কেবল একটি নতুন সংগ্রহশালা তৈরি করবেন না কেন?
স্টিফান

2
@ স্টেফান আমি একটি নতুন সংগ্রহশালা তৈরি করার পক্ষে ঠিক আছি, তবে কীভাবে আমি পুরাতন সংগ্রহশালা থেকে সর্বশেষ রাজ্যটিকে ছিনিয়ে এনে নতুনটিতে প্রতিশ্রুতিবদ্ধ করব?
রাফে

19
আপনি কেবলমাত্র .git ফোল্ডারটি মুছতে পারেন এবং আপনার উত্সগুলি ফোল্ডারে আবার একটি গিট টিম করতে পারেন
স্টিফান

2
.Git ফোল্ডারটি মোছা আপনার দুটি ভান্ডারকে বেমানান করে তুলবে, আপনি এক থেকে অন্যটিতে মিশতে পারবেন না
আর্নল্ড রোয়া

আপনি কি এটি পুনরায় চালু করতে পারবেন না? আপনি আক্ষরিক অর্থে সমস্ত পুরানো কমিটগুলি স্কোয়াশ করুন এবং তারপরে (জোর করে) চাপ দিন।
xaxxon

উত্তর:


321

ক্লোন করার সময় আপনি ইতিহাসের গভীরতা সীমাবদ্ধ করতে পারেন :

--depth <depth>
Create a shallow clone with a history truncated to the specified 
number of revisions.

আপনি যদি সীমাবদ্ধ ইতিহাস চান তবে এটি ব্যবহার করুন some


40
এই ব্যক্তিকে একটি কুকি দিন (এই উত্তরটি সঠিকভাবে চিহ্নিত করার আকারে) :)
ফ্যাটনুলার

7
এটি প্রশ্নের দ্বারা অন্তর্নিহিত উদ্দেশ্যে ব্যবহারের সমাধান করে না, যা দূরবর্তী, পাবলিক ভান্ডারগুলিতে চাপ দিতে সক্ষম হবে। একটি অগভীর ক্লোনটির ফলাফলগুলিকে ধাক্কা দেওয়ার চেষ্টা করছে shallow update not allowed
ব্র্যাড নাক্স

279

নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

git clone --depth <depth> -b <branch> <repo_url>

কোথায়:

  • depthআপনি অন্তর্ভুক্ত করতে চান এমন কমিটের পরিমাণ। যেমন আপনি যদি সর্বশেষতম প্রতিশ্রুতি ব্যবহার করতে চানgit clone --depth 1
  • branchআপনি যে ক্লোন করতে চান তা দূরবর্তী শাখার নাম। অর্থাত্ যদি আপনি masterশাখার ব্যবহার থেকে সর্বশেষ 3 টি কমিট করতে চানgit clone --depth 3 -b master
  • repo_url আপনার সংগ্রহস্থলের url

7
এটি গৌটিয়ারের চেয়ে আসলে একই উত্তর তবে আরও সম্পূর্ণ এবং একটি উদাহরণ সহ।
aled

3
অবশ্যই এটা. কখনও কখনও উদাহরণ যা প্রয়োজন হয়। আমার জন্য, এটি লেখার
বিষয়টিই

3
মূল উত্তরটির সাথে +1, তবে আপনি কোন শাখায় গভীরতা প্রয়োগ করতে চান তা নির্বাচন করার বিষয়ে এই ব্যাখ্যাটির জন্য - আমি জানি এটি ক্লোন কমান্ডের একটি অংশ - তবে এটি আমার সাধারণ মনের মধ্যে সুন্দরভাবে এটি একত্রিত করে ... এবং আমার মতো সহজ:)
কোড_ফড্ডার

7
কিভাবে এই প্রশ্নের উত্তর দেয়? এই সমস্ত কি স্থানীয়ভাবে একটি অগভীর ক্লোন তৈরি করা, কিন্তু তারপর কি? আপনি কীভাবে এই স্থানীয় অনুলিপিটিকে একটি নতুন রেপিতে সীমিত ইতিহাসের সাথে অনুলিপি করবেন?
ব্র্যাডডবাগ

4
@ ব্র্যাডডাবাগ একটি বৈধ পয়েন্ট আনে। আমি গভীরতা 1 টি সীমাবদ্ধ করে উপরের নির্দেশাবলী অনুসরণ করেছি, তারপরে দূরবর্তী উত্সটি পরিবর্তন করেছি এবং তারপরে আমার নতুন রেপোতে চাপ দেওয়ার চেষ্টা করেছি। তবে আমি উল্লেখ করে একটি ত্রুটি পেয়েছি shallow update not allowed। আমি এই স্ট্যাকের ওভারফ্লো উত্তরটি এই দৃষ্টিতে দরকারী বলে মনে করেছি।
ক্রেগ মাইলস

18

আপনি ইতিহাস চান না / প্রয়োজন হিসাবে .gitফোল্ডারটি মুছে ফেলা সম্ভবত সহজতম পথ (যেমন স্টিফান বলেছিলেন)।

সুতরাং আপনি আপনার সর্বশেষ প্রতিশ্রুতি থেকে একটি নতুন রেপো তৈরি করতে পারেন : ( কীভাবে পুরো ইতিহাস ছাড়াই বীজ / কিক-স্টার্ট প্রকল্পটি ক্লোন করবেন? )

git clone <git_url>

তারপরে মুছুন .gitএবং তারপরে চালান

git init

অথবা আপনি যদি আপনার বর্তমান রেপো পুনঃব্যবহার করতে চান : গিট সংগ্রহস্থলটিতে বর্তমানকে কেবলমাত্র (প্রাথমিক) প্রতিশ্রুতিবদ্ধ করুন?

উপরের পদক্ষেপগুলি অনুসরণ করুন:

git add .
git commit -m "Initial commit"

আপনার রেপোতে চাপ দিন।

git remote add origin <github-uri>
git push -u --force origin master

6
#!/bin/bash
set -e

# Settings
user=xxx
pass=xxx
dir=xxx
repo_src=xxx
repo_trg=xxx
src_branch=xxx

repo_base_url=https://$user:$pass@bitbucket.org/$user
repo_src_url=$repo_base_url/$repo_src.git
repo_trg_url=$repo_base_url/$repo_trg.git

echo "Clone Source..."
git clone --depth 1 -b $src_branch $repo_src_url $dir

echo "CD"
cd ./$dir

echo "Remove GIT"
rm -rf .git

echo "Init GIT"
git init
git add .
git commit -m "Initial Commit"
git remote add origin $repo_trg_url

echo "Push..."
git push -u origin master

2
এক্ষেত্রে --depth 1ইতিহাস অপ্রয়োজনীয় কারণ ইতিহাসটিও মুছে ফেলা হয়rm -rf .git
রায়ফির সাথে

3
আমি মনে করি আমি এটি এটি করব:git clone --depth 1 -b $src_branch $repo_src_url $dir && cd ./$dir && git commit --amend --author "Some One <some@one.com>" -m "Initial Commit" && git remote set-url origin $repo_trg_url && git push -u origin master
রায়ফি

11
@ ইরফি হ্যাঁ এটি --depth 1অপ্রয়োজনীয় তবে এটি নিরীহ এবং এটি একটি সামান্য নেটওয়ার্ক ব্যান্ডউইদথকে সাশ্রয় করে (আপনি যে কোনওভাবেই মুছে ফেলতে চলেছেন এমন ইতিহাস আনার কোনও দরকার নেই)
সিলাস এস ব্রাউন

1
আপনি যদি আপনার সংগ্রহস্থলগুলিকে সামঞ্জস্য রাখতে চান তবে আমি এটি করার পরামর্শ দিচ্ছি না।
আর্নল্ড রোআ

.Git সরানো সমস্ত গিট হুকসও সরিয়ে দেয়।
জুডাপ্রাইস্ট

0

এটি কি পুনরায় স্কোয়াশিংয়ের কাজটি ঠিক তাই করে না? শেষ প্রতিশ্রুতি ব্যতীত সমস্ত কিছুকে স্কোয়াশ করুন এবং তারপরে (জোর করে) এটি চাপ দিন।

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