গিট বিদ্যমান নতুন রেপোকে নতুন এবং ভিন্ন দূরবর্তী রেপো সার্ভারে ধাক্কা দেবে?


494

বলুন আমার git.fedorahosted.org- এ একটি সংগ্রহশালা রয়েছে এবং আমি গিথুবে আমার অ্যাকাউন্টে এটি ক্লোন করতে চাই যাতে ফেডোরোহস্টেডের আরও "অফিসিয়াল" রেপো বাদ দিয়ে আমার নিজস্ব খেলার মাঠ থাকে। প্রাথমিকভাবে এটি অনুলিপি করার পদক্ষেপগুলি কী হবে? গিথুবের মধ্যে এই দুর্দান্ত "কাঁটাচামচ" বোতাম রয়েছে তবে আমি স্পষ্ট কারণে এটি ব্যবহার করতে পারি না।

এবং আমি কীভাবে গিথুব-এর মধ্যে ফেডোরোহস্টেড রেপো পরিবর্তনগুলি ট্র্যাক করব?

উত্তর:


750
  1. গিথুবে একটি নতুন রেপো তৈরি করুন।
  2. ফেডোরোহস্টেড থেকে আপনার স্থানীয় মেশিনে রেপো ক্লোন করুন।
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

এখন আপনি অন্যান্য গিথুব রেপোগুলির মতো এটির সাথেও কাজ করতে পারেন। উজান থেকে প্যাচগুলি টানতে, কেবল চালান git pull upstream master && git push origin master


14
মূল উত্সটির নতুন নামকরণের কোনও কারণ নেই, কেবল নতুন প্লে-গ্রাউন্ডকে অন্য কিছু বলে।
টাকসওয়েল

34
@ টিক্যাসওয়েল প্রযুক্তিগতভাবে না, তবে এটি একটি শক্তিশালী কনভেনশন যা প্রচলিত originদূরবর্তী অবস্থানের দিকে নির্দেশ করে। এই ক্ষেত্রে, গিথুব অবস্থানটি সম্ভবত ধারণাটি হতে পারে।
আফ্রোসकन

1
আমি 'প্রবাহকে' ক্যানোনিকাল অবস্থান হিসাবে বিবেচনা করব, তবে আমি মনে করি এটি চুল কাটা শুরু করেছে start
টাকাসওয়েল

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

13
@ ThatAintWorking আপনার সম্ভবত একটি নতুন প্রশ্ন খোলা উচিত, তবে সংক্ষেপে - আপনি কমান্ডের সাথে অনেকগুলি রিমোট যুক্ত করতে পারেন git remote add। এরপরে আপনি রিমোটটি স্পষ্টভাবে উল্লেখ করে এর মধ্যে একটিতে চাপ দিতে পারেন git push। উদাহরণস্বরূপ git push foobar master, বর্তমান শাখাকে masterদূরবর্তী স্থানে ঠেকাতে foobar
ট্রয়সল্কন

108

এই প্রশ্নে একটি মুছে ফেলা উত্তর রয়েছে যার একটি দরকারী লিঙ্ক ছিল: https://help.github.com/articles/duplicating-a-repository

গিস্টটি হ'ল

0. create the new empty repository (say, on github)
1. make a bare clone of the repository in some temporary location
2. change to the temporary location
3. perform a mirror-push to the new repository
4. change to another location and delete the temporary location

ওপির উদাহরণ:

আপনার স্থানীয় মেশিনে

$ cd $HOME
$ git clone --bare https://git.fedorahosted.org/the/path/to/my_repo.git
$ cd my_repo.git
$ git push --mirror https://github.com/my_username/my_repo.git
$ cd ..
$ rm -rf my_repo.git

5
খালি ক্লোন এবং আয়না ধাক্কা দিয়ে কেবল অন্য রিমোটে যোগ এবং ধাক্কা দিয়ে কী লাভ? এটি কি এখনকার শাখাটি নয় বরং সমস্ত শাখা ঠেলাঠেলি করা হবে? (যদি তা হয় তবে এটি গ্রহণযোগ্য উত্তরের একটি সীমাবদ্ধতার মতো বলে মনে করা উচিত))
ইয়য়ো

3
এটি হ'ল ঠিক যে তথ্যটি আমি সন্ধান করছিলাম, --bare / --mirror সাধারণত লোকেরা যা করতে চায়! এটি একটি গুরুত্বপূর্ণ উত্তর! ধন্যবাদ
56

1
গ্রেট! বিষয় প্রশ্নের প্রশ্নে অবশ্যই সবচেয়ে সঠিক উত্তর। ধন্যবাদ! যদি আমি এটির মতো না করি তবে আমি সর্বদা পাইerror: failed to push some refs to 'https://github.com/username/testrep.git'
ডেনিস বাবারকিন

45

আপনার বিদ্যমান রেপোগুলিকে আলাদা করার জন্য, আপনার প্রয়োজন:

  1. প্রথমে মূল রেপো ক্লোন করুন।

    git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
    
  2. ক্লোন করা উত্সগুলি আপনার নতুন ভাণ্ডারে পুশ করুন:

    cd rhq
    git push https://github.com/user/example master:master
    

আপনি পরিবর্তন হতে পারে master:masterবা source:destinationশাখা।


আপনি যদি সুনির্দিষ্ট প্রতিশ্রুতি (শাখা) চাপতে চান তবে করুন:

  1. মূল রেপোতে, একটি নতুন শাখা তৈরি করুন এবং চেকআউট করুন:

    git checkout -b new_branch
    
  2. আপনি যে পয়েন্টটি দিয়ে শুরু করতে চান তা চয়ন করুন এবং পুনরায় সেট করুন:

    git log # Find the interesting hash
    git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
    

    বিকল্পভাবে git cherry-pickবিদ্যমান হেডে যোগ করার জন্য প্রতিশ্রুতিটি নির্বাচন করুন ।

  3. তারপরে আপনার নতুন রেপোতে চাপ দিন:

    git push https://github.com/user/example new_branch:master
    

    যদি আপনি রিবাইসিং করেন তবে -fফোর্স পুশের জন্য ব্যবহার করুন (প্রস্তাবিত নয়)। চালান git reflogপরিবর্তনের ইতিহাস দেখার জন্য।


2
এটি git push ... old_branch_name:new_branch_nameআপনাকে পুরানো সংগ্রহশালা থেকে একটি নতুন শাখায় প্রধান শাখা হিসাবে একটি বৈশিষ্ট্য শাখা ঠেলে দেয়। দরকারী!
গর্জনজ

এটি করা আমার পক্ষে সহজতম উপায় ছিল।
অ্যাডাম

15

আপনি কি সত্যিই আপনার স্থানীয় সংগ্রহস্থলটি (তার স্থানীয় শাখাগুলি ইত্যাদির সাথে) নতুন রিমোটে চাপতে চান বা আপনি কি নতুন রিমোটটিতে পুরানো রিমোটটি (তার সমস্ত শাখা, ট্যাগ ইত্যাদির সাহায্যে) সত্যিই আয়না করতে চান? পরেরটি যদি এখানে গিটার সংগ্রহস্থলকে সঠিকভাবে মিরর করতে পারে সে সম্পর্কে একটি দুর্দান্ত ব্লগ ।

আমি আপনাকে খুব গুরুত্বপূর্ণ কিছু তথ্যের জন্য ব্লগটি পড়তে দৃ strongly়ভাবে উত্সাহ দিচ্ছি, তবে সংক্ষিপ্ত সংস্করণটি হ'ল:

একটি নতুন ডিরেক্টরিতে এই কমান্ডগুলি চালান:

git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git

আমি মনে করি এটি লিঙ্ক: Blog.plataformatec.com.br/2013/05/…
ডেভিড

11

একটি পূর্ণ গিট সংগ্রহস্থল কীভাবে সরানো যায় তা চেষ্টা করুন

  1. টেম্প-ডায়ার ডিরেক্টরিতে এটি ব্যবহার করে একটি স্থানীয় সংগ্রহস্থল তৈরি করুন:

    গিট ক্লোন টেম্প-ডিয়ার

  2. টেম্প-ডিয়ার ডিরেক্টরিতে যান।

  3. ওআরআইয়ের বিভিন্ন শাখার একটি তালিকা দেখতে:

    git branch -a
    
  4. আপনি ওআরআই থেকে নতুনতে যে সমস্ত শাখাগুলি অনুলিপি করতে চান তা ব্যবহার করে:

    git checkout branch-name
    
  5. এখন ওআরআই থেকে সমস্ত ট্যাগগুলি ব্যবহার করে আনুন:

    git fetch --tags
    
  6. পরবর্তী পদক্ষেপটি করার আগে নীচের কমান্ডগুলি ব্যবহার করে আপনার স্থানীয় ট্যাগ এবং শাখা পরীক্ষা করে দেখুন:

    git tag
    
    
    git branch -a
    
  7. এখন নিম্নলিখিত কমান্ডের সাথে ওআরআই সংগ্রহস্থলের লিঙ্কটি সাফ করুন:

    git remote rm origin
    
  8. নিম্নলিখিত কমান্ডটি ব্যবহার করে এখন নতুন সঞ্চিত নতুন সংগ্রহস্থলের সাথে আপনার স্থানীয় সংগ্রহস্থলটিকে যুক্ত করুন:

    git remote add origin <url to NEW repo>
    
  9. এখন এই আদেশগুলি দিয়ে আপনার সমস্ত শাখা এবং ট্যাগগুলি চাপুন:

    git push origin --all
    
    
    git push --tags
    
  10. আপনার কাছে এখন আপনার ওআরআই রেপোর একটি সম্পূর্ণ অনুলিপি রয়েছে।


9

আমি সেট-url ব্যবহার করে একটি সমাধান পেয়েছি যা সংক্ষিপ্ত এবং বোঝার পক্ষে মোটামুটি সহজ :

  1. গিথুবে একটি নতুন রেপো তৈরি করুন
  2. cd আপনার স্থানীয় মেশিনে বিদ্যমান ভাণ্ডারগুলিতে প্রবেশ করুন (আপনি যদি এটি এখনও ক্লোন না করে থাকেন তবে প্রথমে এটি করুন)
  3. git remote set-url origin https://github.com/user/example.git
  4. git push -u origin master

9

আপনার যদি বিদ্যমান গিট সংগ্রহস্থল থাকে:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/newproject
git push -u origin --all
git push -u origin --tags

1
কেবল পরিষ্কার করতে,
গিলকুল

7

এই কমান্ডটি দিয়ে জিআইটি রেপো URL পরিবর্তন করে কেবল নতুন রেপোকে নির্দেশ করুন:

git remote set-url origin [new repo URL]

উদাহরণ: git remote set-url origin git@bitbucket.org:Batman/batmanRepoName.git

এখন, পুশ করা এবং টানানো নতুন আরইপিও-র সাথে যুক্ত।

তারপরে সাধারণভাবে তেমনভাবে চাপ দিন:

git push -u origin master

2

আমারও একই সমস্যা হয়েছে।

আমার ক্ষেত্রে, যেহেতু আমার স্থানীয় মেশিনে মূল সংগ্রহস্থল রয়েছে তাই আমি কোনও লুকানো ফাইল (.git, .gitignore) ছাড়াই একটি নতুন ফোল্ডারে একটি অনুলিপি তৈরি করেছি।

অবশেষে .gitignore ফাইলটি নতুন তৈরি ফোল্ডারে যুক্ত করেছি।

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


1

এখানে করার একটি ম্যানুয়াল উপায় git remote set-url origin [new repo URL]:

  1. ভান্ডারটি ক্লোন করুন: git clone <old remote>
  2. একটি গিটহাবের সংগ্রহশালা তৈরি করুন
  3. খোলা <repository>/.git/config

    $ git config -e
    
    [core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
    [remote "origin"]
        url = <old remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    

    এবং রিমোট পরিবর্তন করুন (ইউআরএল বিকল্প)

    [remote "origin"]
        url = <new remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    
  4. গিটহাবের কাছে সংগ্রহস্থলটি পুশ করুন: git push

আপনি উভয় / একাধিক রিমোট ব্যবহার করতে পারেন ।


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