কীভাবে একটি সার্ভার থেকে নতুন সার্ভারে জিআইটি সংগ্রহস্থল স্থানান্তর করতে হয়


263

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


সংগ্রহস্থল সম্পর্কিত সমস্ত তথ্য (orgin, ট্রাঙ্ক, ইত্যাদি) '.git' নামে একটি ফোল্ডারে সংরক্ষণ করা হয়, যেখানে আপনি সংগ্রহশালাটি আরম্ভ করছেন। সুতরাং, আপনাকে এখানে
মনসাব উৎপল

1
কেবল Git কনফিগ remote.origin.url newurl দেখতে stackoverflow.com/questions/3011402/...
নিল্স

1
আপনি যদি নিজের রেপো মাইগ্রেট করতে চান এবং সমস্ত শাখা গৃহীত উত্তরের পরিবর্তে জাজওয়েনার বা রবার্তো দ্বারা উত্তরটি ব্যবহার করে।
জোনগলন

উত্তর:


246

নতুন রেপো অবস্থান যুক্ত করতে,

git remote add new_repo_name new_repo_url

তারপরে সামগ্রীটিকে নতুন জায়গায় চাপ দিন

git push new_repo_name master

অবশেষে পুরানোটি সরিয়ে দিন

git remote rm origin

এর পরে আপনি বিডনলান যা বলেছিলেন তা করতে পারেন এবং নতুন_রেপো_নামটি উত্সে পরিবর্তন করতে.git / config ফাইলটি সম্পাদনা করতে পারেন। আপনি যদি মূলটি (মূল রিমোট রিপোজিটরি) সরিয়ে না ফেলে থাকেন তবে আপনি কেবল নতুন রেপোতে পরিবর্তনগুলি চাপতে পারেন

git push new_repo_name master

8
এটি কি কেবল পুরানো সংগ্রহশালা থেকে নতুন একটিতে একটি শাখা অনুলিপি করবে?
অ্যান্ড্রু গ্রিম

34
সব শাখা স্থানান্তরের সমাধান কী?
emmby

49
আপনি একবার মাধ্যমে এ সব শাখা ধাক্কা করতে সক্ষম হওয়া উচিত git push -u new_repo_name --all
rmarscher

10
সব শাখা মাইগ্রেশন পাওয়া যাবে stackoverflow.com/a/18336145/923599
jzwiener

10
গিট-কনফিগ ফাইল সম্পাদনা করার পরিবর্তে, এই আদেশটি আমার পক্ষে কাজ করেছে:git remote rename new_repo_name origin
সেলিম

210

আপনি যদি সমস্ত শাখা এবং ট্যাগগুলি স্থানান্তর করতে চান তবে আপনার নিম্নলিখিত কমান্ডগুলি ব্যবহার করা উচিত:

git clone --mirror [oldUrl]

সমস্ত শাখা সঙ্গে পুরানো রেপো ক্লোন করতে

cd the_repo
git remote add remoteName newRepoUrl

একটি নতুন রিমোট সেটআপ করতে

git push -f --tags remoteName refs/heads/*:refs/heads/*

সমস্ত রেফিকে রেফ / মাথার নীচে ঠেলাতে (যা সম্ভবত আপনি চান)


5
গিট অভিযোগ করছিলেন --tagsএবং refs/heads/*:refs/heads/*এটি সামঞ্জস্যপূর্ণ নয় --mirrorstackoverflow.com/a/26552740/1484831 ভাল কাজ করেছে।
অজিগিত

3
আমি এটি ব্যবহার করেছি এবং এটি আমার পক্ষে কাজ করেছে। সম্ভবত নির্বাচিত উত্তর হওয়া উচিত। নোট করুন যে আপনি স্থানীয়ভাবে "কোড" পান সেটি মেটা ডেটাতে ভারী বলে মনে হচ্ছে যা কিছু ভুল হয়ে গেলে নবীদের জন্য এটি অস্পষ্ট করে তোলে।
নিক

3
এটি অনুমোদিত উত্তর হওয়া উচিত। অন্যান্য সমাধানগুলির চেয়ে অনেক বেশি ভাল
ট্র্যাভিস গ্রিগস

15
আমি শাখা আমার নতুন দূরবর্তী সংগ্রহস্থল উপর পূর্বে সমাধান সব সঙ্গে শেষ পর্যন্ত refs/heads/refs/headsব্যবহার git push -f --tags remoteName refs/heads/*:refs/heads/*তাই আমি আছে আনা যায়git push remoteName --mirror
dumbledad

1
pushসমর্থন করে --mirrorgit clone --mirror; cd repo; git push --mirror new_remoteকৌশলটি করা উচিত
নিটল

143

এটি আমার জন্য নির্দোষভাবে কাজ করেছিল ।

git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin

যদিও আপনাকে উল্লেখ করতে হবে যে এটি আপনার বর্তমান রেপোর একটি আয়না তৈরি করে এবং তারপরে এটি নতুন জায়গায় ঠেলে দেয়। অতএব, বড় সংগ্রহ বা ধীর সংযোগের জন্য এটি কিছু সময় নিতে পারে


15
*** এটি ***
পল লকউড

1
এটি ভাল সমাধান গিট রিমোট সেট-ইউআরএল উত্স <আমার নতুন রেপো অবস্থানে ইউআরএল>> (পুরানো উত্সটিকে নতুন সার্ভারে / অবস্থানের সাথে সন্ধান করার পরে)
টনি হোমডেস আই সুন

2
এই এক মহান woks। বিভ্রান্তিকর একাধিক রিমোট নেই
তাওপিআর

16
git push --mirror originওভার পছন্দ -f
এডিয়াকাপি

78

এটি অনুলিপি করুন। এটা সত্যিই সহজ। :)

ক্লায়েন্টের পক্ষে, আপনার রিমোটগুলি নতুন ইউআরএল হিসাবে প্রয়োজনীয় হিসাবে চিহ্নিত করতে কেবল ক্লায়েন্টের স্থানীয় রেপোতে .git / কনফিগার করুন।


6
আপনি কেবল এটি ক্লোন করতে পারেন। এছাড়াও .git / কনফিগারেশন ফাইলটি সরাসরি সম্পাদনা করার পরিবর্তে, আপনি গিট দূরবর্তী আরএম উত্স ব্যবহার করতে পারেন; গিট রিমোট অ্যাড অরিজিন <নতুন সংগ্রহশালা>।
ebneter

4
রিমোট rming কনফিগার অংশের অধীনে যে কোনও কনফিগারেশন হারাবে - এবং কোনও অতিরিক্ত পদক্ষেপ না নিয়ে ক্লোনিং করলে ট্রাঙ্ক ব্যতীত অন্য শাখাগুলি হারাবে। এই সমস্যাগুলির সাথে মোকাবিলা করা সম্ভব, তবে, সত্যই - কেবল এটি পুনরায় সিএনসি করুন।
বিডনলান

1
কাজটি করতে কেবল গিট ব্যবহার করে সমাধান কী? rsync মাধ্যমে ঝাঁপ অতিরিক্ত প্রশাসনিক হুপ্স যে কঠিন প্রয়োজন
emmby

2
এটি উদাহরণস্বরূপ হুকস এবং অন্যান্য কনফিগারেশন সংরক্ষণ করে, তাই আমি এটি খাঁটি গিট সমাধানগুলিতে পছন্দ করি
mnagel

65

এটি অন্যান্য উত্তরগুলির কিছু অংশে সাজানো হয়েছে।

git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new

6
এটি আসলে সবচেয়ে সম্পূর্ণ, সরাসরি-উত্তর উত্তর।
লরেন্স ডল

3
--mirror
পুশটি

আপনি যখন নতুন সার্ভারে নতুন সংগ্রহস্থলটি আরম্ভ করবেন তখন মনে রাখবেন একটি খালি আরম্ভ করবেন বা ধাক্কা সফল হবে না:git init --bare
মার্কো

35

আমি অন্যদের যা বললাম তা কেবল পোস্টস্টাস্ট করছি, নির্দেশাবলীর তালিকা অনুসরণ করার জন্য।

  1. সংগ্রহস্থলটি সরান: কেবলমাত্র নতুন সার্ভারে, cdপ্যারেন্ট ডিরেক্টরিতে লগইন করুন যেখানে আপনি এখন সংরক্ষণাগারটি ধরে রাখতে চান এবং rsyncপুরানো সার্ভার থেকে অনুলিপি করতে ব্যবহার করুন :

    new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
    
  2. ক্লায়েন্টদের নতুন সংগ্রহস্থলের দিকে ইঙ্গিত করুন: এখন প্রতিটি ক্লায়েন্টের সংগ্রহস্থল ব্যবহার করে, কেবলমাত্র পুরানো উত্সের পয়েন্টারটি সরিয়ে ফেলুন এবং একটিতে নতুন যুক্ত করুন।

    client> git remote rm origin
    client> git remote add origin user@new.server.com:path/to/repository.git
    

সহজ এবং কার্যকর। আপনি সার্ভারের মধ্যে ট্র্যাফিক সীমাবদ্ধ করতে চাইলে আপনি --bwlimit = XXX পতাকাটি যুক্ত করতে পারেন, যেখানে XXX প্রতি সেকেন্ডে কেবিটাইটে ব্যান্ডউইথের সমান।
গ্রেগ গ্লকনার

7
বিট অপসারণ এবং যোগ করার চেয়ে ভাল: git remote set-url origin user@new.server.com:path/to/repository.git
ক্রিস কেএল

যারা গিট + ক্যাপিস্ট্রানো ব্যবহার করে কোনও সার্ভারে স্থাপন করছেন তাদের জন্য নোট করুন যে আমাকে সেট-url উত্সটি 2 জায়গায় ব্যবহার করতে হয়েছিল: লোকালহোস্টে এবং সার্ভারে থাকা ক্যাশেড-অনুলিপিতে।
anandvc

15

গিটহাবের এই রেসিপিটি একবার দেখুন: https://help.github.com/articles/importing-an-extern-git-repository

আবিষ্কারের আগে আমি বেশ কয়েকটি পদ্ধতি চেষ্টা করেছিলাম git push --mirror

মোহন মত কাজ!


তাই মূলত git clone --mirror ..., git remote add ...,git push --mirror ...
mwfearnley

10

আমি সেখানে তার সমস্ত শাখা সহ একটি রেপো সরানোর জন্য বিটবাকেটের নির্দেশাবলী অনুসরণ করেছি। #চরিত্রটি অনুসরণ করে ব্যাখ্যা সহ পদক্ষেপগুলি এখানে দেখুন :

cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://git@bitbucket.org/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go

আমার জন্য সুন্দর কাজ করেছেন।


8

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

  • গিট রিমোট নতুন-উত্স যোগ করুন
  • গিট পুশ - সমস্ত নতুন-উত্স
  • গিট পুশ - ট্যাগস নতুন-উত্স
  • গিট রিমোট আরএম উত্স
  • গিট রিমোট নতুন নাম মূল উত্স

5

এটি এই উত্তরের একটি ভিন্নতা , বর্তমানে গিটল্যাব একটি গিটার সংগ্রহস্থলকে একটি সার্ভার থেকে অন্য সার্ভারে "মাইগ্রেট" করার পরামর্শ দিয়েছিল ।

  1. আসুন আমরা ধরে নিই যে আপনার পুরানো প্রকল্পটি বলা হয় existing_repo, একটি existing_repoফোল্ডারে সঞ্চিত ।

  2. আপনার নতুন সার্ভারে একটি রেপো তৈরি করুন। আমরা ধরে নেব যে নতুন প্রকল্পটির ইউআরএলgit@newserver:newproject.git

  3. কমান্ড-লাইন ইন্টারফেসটি খুলুন এবং নিম্নলিখিতটি প্রবেশ করুন:

    cd existing_repo
    git remote rename origin old-origin
    git remote add origin git@newserver:newproject.git
    git push -u origin --all
    git push -u origin --tags
    

এই পদ্ধতির সুবিধা হ'ল আপনি আপনার পুরানো সার্ভারের সাথে মিলে যাওয়া শাখাটি মুছবেন না।


4

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

git remote set-url --push origin new_repo_url

Http://gitref.org/remotes/ থেকে উদাহরণ

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)

4

এর মতো সহজ হওয়া উচিত:

git remote set-url origin git://new.url.here

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

git push origin --mirror # origin points to your new repo

তবে দেখুন "গিট পুশ - এমিরর" কি আমার ভাণ্ডার ব্যাক আপ করার জন্য যথেষ্ট? (সব মিলিয়ে --mirrorএকবার না ব্যবহার করুন )।


3

এই নির্দেশাবলী অনুসরণ করুন যদি আপনি পুরানো থেকে নতুন রেপোতে সমস্ত কমিট এবং শাখা রাখতে চান

git clone --bare <old-repo-url>
cd <old-repo-directory>
git push --mirror <new-repo-url>


1

যদি আপনি এক স্থানীয় থেকে অন্য দিকে যেতে চান এবং আপনার স্থানীয় মেশিনে আপনার বর্তমান উত্সের একটি ব্যাকআপ রাখতে চান তবে আপনি এই পদক্ষেপগুলি ব্যবহার করতে পারেন:

  1. প্রথমে স্থানীয়ভাবে আপনি (গিট) ফোল্ডারে যান যা আপনি উপরে যেতে চান
  2. অনলাইনে নতুন সংগ্রহশালা তৈরি করুন এই পদক্ষেপটি এমন একটি সংগ্রহশালা তৈরি করে যেখানে আমরা কোডটি চাপতে পারি

এখন ফোল্ডারে না

git remote get-url origin

উপরের কমান্ডটি বর্তমান প্রত্যন্ত উত্সের url দেয়, মূলটিকে শেষ ধাপে সেট করতে দরকারী

git remote set-url origin git@github.newlocation:folder/newrepo.git

উপরের কমান্ডটি দূরবর্তী উত্সকে নতুন স্থানে সেট করে

git push --set-upstream origin develop

উপরের কমান্ডটি বর্তমান সক্রিয় স্থানীয় শাখাকে ব্রাশনাম বিকাশের সাথে রিমোটে ঠেলে দেয়। অবশ্যই এটি সমস্ত ইতিহাস সংরক্ষণ করে যেমন গিটের সাথে সমস্ত ইতিহাসকেও ঠেলাঠেলি করা হয়।

git remote set-url origin <original old origin>

উপরের কমান্ডটি আপনার বর্তমান উত্সকে দূরবর্তী উত্সকে পিছনে সেট করে: আপনি এটি চান কারণ আপনি আপনার বিদ্যমান ফোল্ডারে রয়েছেন এবং আপনি সম্ভবত বর্তমান স্থানীয় ফোল্ডারের নামটি নতুন ফোল্ডারের সাথে মিশ্রিত করতে চান না যা আপনি রেপো ক্লোনিংয়ের জন্য তৈরি করতে যাচ্ছেন তুমি সবে

আশাকরি এটা সাহায্য করবে,


0

আপনি যদি একটি সার্ভার থেকে নতুন সার্ভারে একটি #git সংগ্রহস্থল স্থানান্তর করতে চান তবে আপনি এটি এইভাবে করতে পারেন:

git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS  NEW_REPOSITORY_PATH
#check out all remote branches 
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags

পুরানো সংগ্রহশালা থেকে সমস্ত দূরবর্তী শাখা এবং ট্যাগগুলি নতুন ভাণ্ডারে অনুলিপি করা হবে।

এই আদেশটি একা চালাচ্ছি:

git push NEW_REPOSITORY_ALIAS

নতুন সংগ্রহস্থলে কেবলমাত্র একটি মাস্টার শাখা (কেবল ট্র্যাকিং শাখা) অনুলিপি করবে।

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