วิธีการเปลี่ยน URI (URL) สำหรับที่เก็บ Git ระยะไกล


3892

ฉันมี repo (ต้นกำเนิด) บนคีย์ USB ที่ฉันโคลนบนฮาร์ดไดรฟ์ของฉัน (ในเครื่อง) ฉันย้าย "ต้นกำเนิด" ไปที่ NAS และทดสอบการโคลนได้สำเร็จจากที่นี่

ฉันต้องการทราบว่าฉันสามารถเปลี่ยน URI ของ "แหล่งกำเนิด" ในการตั้งค่าของ "ท้องถิ่น" ได้หรือไม่ดังนั้นจึงจะดึงจาก NAS และไม่ใช่จากคีย์ USB

สำหรับตอนนี้ฉันเห็นโซลูชันสองอย่าง:

  • ผลักทุกอย่างไปที่ usb-orign และคัดลอกไปที่ NAS อีกครั้ง (บอกเป็นนัย ๆ ว่ามีงานทำมากมายเนื่องจากภารกิจใหม่ ๆ

  • เพิ่มรีโมตใหม่เป็น "local" และลบอันเก่า (ฉันกลัวว่าจะทำลายประวัติของฉัน)


6
ฉันต้องทำเช่นนี้ใน git เวอร์ชันเก่า (1.5.6.5) และตัวเลือก set-url ไม่มีอยู่จริง เพียงแค่ลบรีโมตที่ไม่ต้องการและเพิ่มใหม่ด้วยชื่อเดียวกันที่ทำงานได้โดยไม่มีปัญหาและรักษาประวัติไว้ได้ดี
HotN

ในกรณีของฉันฉันต้องการที่จะตรวจสอบได้รับอนุญาตของฉันฉันมีสองเก็บ Git ส่วนตัวและบัญชีที่สองนี้เป็นผู้ดูแลที่ repo ใหม่และคนแรกคือบัญชีผู้ใช้เริ่มต้นของฉันและฉันควรจะให้สิทธิ์ในการครั้งแรก
ดาบ tabatabaee Yazdi

คำตอบ:


6328

คุณสามารถ

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

(ดูgit help remote) หรือคุณสามารถแก้ไข.git/configและเปลี่ยน URL ที่นั่นได้ คุณไม่ได้อยู่ในอันตรายจากการสูญเสียประวัติเว้นแต่คุณจะทำอะไรที่โง่มาก (และถ้าคุณเป็นกังวลให้ทำสำเนาของ repo ของคุณเนื่องจาก repo ของคุณเป็นประวัติของคุณ)


29
หากคุณมีผู้ใช้เชลล์ที่แตกต่างกันคุณอาจต้องการระบุผู้ใช้ git ของคุณในตอนต้นของ url ใหม่เช่น:myself@git://new.url.here
sobi3ch

13
git branch -u origin/masterนอกจากนี้คุณยังอาจต้องการตั้งต้นแบบสาขาต้นน้ำสำหรับสถานที่กำเนิดใหม่ของคุณด้วย: สิ่งนี้จะช่วยให้คุณgit pushแทนที่จะต้องไปgit push origin masterทุกครั้ง
kelorek

32
@kelorek หรือคุณสามารถเพียงแค่git push -u origin masterครั้งแรก :)
ฮอบส์

26
ฉันยังต้องgit remote set-url --push origin git://...ตั้งค่าจุดเริ่มต้น ... (กด) URL
jpillora

3
สำหรับสาขาหลายแห่งคุณสามารถใช้git push -u --allเพื่อผลักดันสาขาทั้งหมดในครั้งเดียวไปยัง URL ใหม่ (แทนgit push -u origin master)
Ben


100

เปลี่ยนโฮสต์สำหรับเซิร์ฟเวอร์ Git Origin

จาก: http://pseudofish.com/blog/2010/06/28/change-host-for-a-git-origin-server/

หวังว่านี่ไม่ใช่สิ่งที่คุณต้องทำ เซิร์ฟเวอร์ที่ฉันใช้เพื่อทำงานร่วมกับโครงการ git สองสามตัวที่มีชื่อโดเมนหมดอายุ นี่หมายถึงการหาวิธีย้ายที่เก็บข้อมูลในเครื่องเพื่อกลับไปซิงก์

อัปเดต: ขอบคุณ @mawolf ที่ชี้ให้เห็นว่าเป็นวิธีที่ง่ายสำหรับเวอร์ชัน git ล่าสุด (โพสต์ ก.พ. 2010):

git remote set-url origin ssh://newhost.com/usr/local/gitroot/myproject.git

ดูหน้าคนสำหรับรายละเอียด

หากคุณใช้เวอร์ชั่นที่เก่ากว่าให้ลองทำสิ่งนี้:

ในฐานะที่เป็นข้อแม้นี้ใช้งานได้เฉพาะในกรณีที่เป็นเซิร์ฟเวอร์เดียวกันโดยใช้ชื่อต่าง

สมมติว่าชื่อโฮสต์ใหม่และชื่อnewhost.comเดิมคือoldhost.comการเปลี่ยนแปลงค่อนข้างง่าย

แก้ไข.git/configไฟล์ในไดเรกทอรีทำงานของคุณ คุณควรเห็นบางสิ่งเช่น:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = ssh://oldhost.com/usr/local/gitroot/myproject.git

เปลี่ยนoldhost.comเป็นnewhost.comบันทึกไฟล์เสร็จแล้ว

จากการทดสอบที่ จำกัด ของฉัน ( git pull origin; git push origin; gitx) ทุกอย่างดูเหมือนจะเป็นไปตามลำดับ และใช่ฉันรู้ว่ามันเป็นรูปแบบที่ไม่ดีที่จะยุ่งกับ git internals


ฟอร์มไม่ดี บางที. แต่ถ้าคุณต้องการทำสิ่งที่ผู้เขียนไม่ได้คาดหวังว่าจะมีใครทำ แต่คุณจะต้องยินดีที่จะยอมรับผลที่ตามมาหากคุณทำผิด Backup your local repository _before_ messing with git internals.
Jesse Chisholm

56
git remote set-url origin git://new.location

(หรือเปิดเปิด.git/configค้นหา[remote "origin"]และแก้ไขurl =บรรทัด

คุณสามารถตรวจสอบมันได้โดยตรวจสอบรีโมท:

git remote -v
# origin  git://new.location (fetch)
# origin  git://new.location (push)

ครั้งต่อไปที่คุณกดคุณจะต้องระบุสาขาต้นน้ำใหม่เช่น:

git push -u origin master

ดูเพิ่มเติมที่: GitHub: การเปลี่ยน URL ของรีโมต


ฉันไม่สามารถตั้งค่าต้นกำเนิดใหม่โดยแก้ไข. git / config มันบอกว่าที่เก็บ git ชื่อใน URL ไม่ใช่ที่เก็บ git เมื่อฉันลบและสร้างต้นกำเนิดใหม่ทั้งหมดก็ดี ฉันไม่ได้ค้นหาคำสั่ง set-url จากทางไกลเพื่อแก้ปัญหาของฉัน
octopusgrabbus

+1 สำหรับการให้คำตอบที่สมบูรณ์กับgit push -uคำสั่ง บางทีอาจจะชัดเจนสำหรับคนอื่นไม่ใช่สำหรับฉัน
testphreak

37

สลับ URL ระยะไกล

เปิด Terminal

ขั้นตอนที่ Ist: - เปลี่ยนไดเรกทอรีการทำงานปัจจุบันเป็นโครงการท้องถิ่นของคุณ

ขั้นตอนที่ 2: - แสดงรายการรีโมตที่มีอยู่ของคุณเพื่อรับชื่อรีโมตที่คุณต้องการเปลี่ยน

git remote -v

origin  https://github.com/USERNAME/REPOSITORY.git (fetch)

origin  https://github.com/USERNAME/REPOSITORY.git (push)

เปลี่ยน URL ของรีโมตจาก HTTPS เป็น SSH ด้วยคำสั่ง git remote set-url

ขั้นตอนที่ 3: - git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

ขั้นตอนที่ 4: - ตอนนี้ตรวจสอบว่า URL ระยะไกลมีการเปลี่ยนแปลง

git remote -v ยืนยัน URL ระยะไกลใหม่

origin  git@github.com:USERNAME/REPOSITORY.git (fetch)
origin  git@github.com:USERNAME/REPOSITORY.git (push)

คุณต้องลบต้นกำเนิดเก่าก่อนที่จะเพิ่มต้นกำเนิดใหม่หรือไม่?
เลื่อน

ฉันไม่ได้ลบอะไรจากโครงการ ฉันทำตามขั้นตอนข้างต้นและใช้งานได้
VIKAS

27
  1. ลบ Origin โดยใช้คำสั่งบน gitbash git remote rm remote
  2. และตอนนี้เพิ่ม Origin ใหม่โดยใช้ gitbash git remote add origin (คัดลอก URL HTTP จากที่เก็บโครงการของคุณในที่เก็บข้อมูลบิต) เสร็จแล้ว

นี่เป็นคำตอบที่มีประโยชน์จริง ๆ เพราะไม่มีgit remote rm originคอมไพล์จำรายละเอียดเกี่ยวกับแหล่งกำเนิดเก่า
mato

ด้านบนgit remote rm originช่วยแก้ไขปัญหาการใช้รีโมตหลายตัว: ปัญหาที่ฉันไม่สามารถตั้งค่า URL ระยะไกล remote.origin.url has multiple values fatal: could not set 'remote.origin.url'
bitsand


18

เขียนคำสั่งด้านล่างจากสถานี repo ของคุณ:

git remote set-url origin git@github.com:<username>/<repo>.git

อ้างถึงลิงค์นี้สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการเปลี่ยน URL ในรีโมท


1
มันช่วยลิงค์นั้นมีประโยชน์
ANP

16

หากคุณโคลนในพื้นที่ของคุณจะประกอบด้วยโดยอัตโนมัติ

รีโมต URL ที่ถูกโคลน

คุณสามารถตรวจสอบได้โดยใช้ git remote -v

หากคุณต้องการเปลี่ยนแปลง

git remote set-url origin https://github.io/my_repo.git

ที่นี่

ที่มา - สาขาของคุณ

หากคุณต้องการเขียนทับสาขาที่มีอยู่คุณยังสามารถใช้งานได้ ... มันจะแทนที่สาขาเดิมของคุณ ... มันจะทำอย่างไร

git remote remove url
and 
git remote add origin url

สำหรับคุณ...


ฉันได้เพิ่มรีโมทหลายตัวดังนั้นgit remote rm originจำเป็นต้องใช้คำสั่งเพื่อลบ URL ที่เกี่ยวข้องทั้งหมด จากนั้นคำสั่งเพิ่มทำงาน
bitsand

14

วิธีตรวจสอบการเชื่อมต่อระยะไกล git:

git remote -v

ตอนนี้ตั้งค่าที่เก็บในท้องถิ่นเป็น git ระยะไกล:

git remote set-url origin https://NewRepoLink.git

ตอนนี้เพื่อทำให้ upstream หรือ push ใช้โค้ดต่อไปนี้:

git push --set-upstream origin master -f


1
ฉันผลักดัน แต่ github ไม่ได้แสดงสาขาใหม่ของฉัน ที่ผ่าน--set-upstreamมาทำให้มันใช้งานได้
OoDeLally

11

คุณมีหลายวิธีที่จะทำเช่นนั้น:

ปลอบใจ

git remote set-url origin [Here new url] 

เพียงให้แน่ใจว่าคุณได้เปิดมันในสถานที่ที่เก็บเป็น

การกำหนดค่า

มันถูกวางใน. git / config (โฟลเดอร์เดียวกับที่เก็บ)

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = [Here new url]  <------------------------------------
...

TortoiseGit

ขั้นตอนที่ 1 - เปิดการตั้งค่า

ขั้นตอนที่ 2 - เปลี่ยน URL

จากนั้นเพียงแก้ไข URL

SourceTree

  1. คลิกที่ปุ่ม "การตั้งค่า" บนแถบเครื่องมือเพื่อเปิดหน้าต่างการตั้งค่าพื้นที่เก็บข้อมูล

  2. คลิก "เพิ่ม" เพื่อเพิ่มเส้นทางที่เก็บข้อมูลระยะไกลไปยังที่เก็บ หน้าต่าง "รายละเอียดระยะไกล" จะเปิดขึ้น

  3. ป้อนชื่อสำหรับเส้นทางระยะไกล

  4. ป้อน URL / เส้นทางสำหรับที่เก็บระยะไกล

  5. ป้อนชื่อผู้ใช้สำหรับบริการโฮสต์สำหรับที่เก็บระยะไกล

  6. คลิก 'ตกลง' เพื่อเพิ่มเส้นทางระยะไกล

  7. กลับไปที่หน้าต่างการตั้งค่าที่เก็บคลิก 'ตกลง' ควรเพิ่มพา ธ รีโมตใหม่บนที่เก็บทันที

  8. หากคุณต้องการแก้ไขเส้นทางระยะไกลที่เพิ่มไว้แล้วเพียงคลิกปุ่ม 'แก้ไข' คุณควรถูกนำไปที่หน้าต่าง "รายละเอียดระยะไกล" ซึ่งคุณสามารถแก้ไขรายละเอียด (URL / เส้นทาง / ประเภทโฮสต์) ของเส้นทางระยะไกล

  9. หากต้องการลบเส้นทางที่เก็บข้อมูลระยะไกลให้คลิกปุ่ม 'ลบ'

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

อ้าง สนับสนุน


11

เปลี่ยน UIT git ระยะไกลgit@github.comเป็นมากกว่าhttps://github.com

git remote set-url origin git@github.com:<username>/<repo>.git

ตัวอย่าง:

git remote set-url origin git@github.com:Chetabahana/my_repo_name.git

ประโยชน์คือคุณสามารถทำได้git pushโดยอัตโนมัติเมื่อคุณใช้ssh-agent :

#!/bin/bash

# Check ssh connection
ssh-add -l &>/dev/null
[[ "$?" == 2 ]] && eval `ssh-agent`
ssh-add -l &>/dev/null
[[ "$?" == 1 ]] && expect $HOME/.ssh/agent

# Send git commands to push
git add . && git commit -m "your commit" && git push -u origin master

วางไฟล์สคริปต์$HOME/.ssh/agentเพื่อให้มันทำงานssh-addโดยใช้ความคาดหวังดังต่อไปนี้:

#!/usr/bin/expect -f
set HOME $env(HOME)
spawn ssh-add $HOME/.ssh/id_rsa
expect "Enter passphrase for $HOME/.ssh/id_rsa:"
send "<my_passphrase>\n";
expect "Identity added: $HOME/.ssh/id_rsa ($HOME/.ssh/id_rsa)"
interact

10

ใน Git Bash ให้ป้อนคำสั่ง:

git remote set-url origin https://NewRepoLink.git

ป้อนข้อมูลรับรอง

เสร็จสิ้น



9
$ git remote rm origin
$ git remote add origin git@github.com:aplikacjainfo/proj1.git
$ git config master.remote origin
$ git config master.merge refs/heads/master

8
เมื่อเพิ่มคำตอบให้กับคำถามอายุสิบปีที่มีคำตอบอีกยี่สิบเอ็ดข้อเป็นสิ่งสำคัญมากที่จะต้องรวมคำอธิบายของคำตอบของคุณและชี้ให้เห็นว่าในแง่มุมใหม่ของคำถามที่คุณตอบอยู่ ด้วยคำตอบที่เป็นชุดคำสั่งจะมีประโยชน์ในการอธิบายสิ่งที่แต่ละคนกำลังทำและวิธีการยกเลิกผลกระทบของแต่ละคนหากเป็นไปได้ การเลิกทำนั้นมีความสำคัญในกรณีที่บางคนสามารถทำตามสองสามขั้นตอนแรก แต่จากนั้นพบข้อผิดพลาดในขั้นตอนต่อไป
Jason Aller

@ JasonAller ฉันคิดว่านี่เป็นคำอธิบายที่อธิบายตัวเองได้ค่อนข้างดีและเป็นคำตอบที่ดีที่สุดที่นี่โดยที่อื่น ๆ เป็นเรื่องตลก
Oliver Dixon

7

หากคุณใช้ TortoiseGit ให้ทำตามขั้นตอนด้านล่าง:

  1. ไปที่โฟลเดอร์ชำระเงินในพื้นที่ของคุณแล้วคลิกขวาเพื่อไปที่ TortoiseGit -> Settings
  2. ในบานหน้าต่างด้านซ้ายให้เลือก Git -> Remote
  3. ในบานหน้าต่างด้านขวาให้เลือก origin
  4. ตอนนี้เปลี่ยนURLค่ากล่องข้อความเป็นที่เก็บข้อมูลรีโมตใหม่ของคุณ

สาขาและการกระทำในท้องถิ่นทั้งหมดของคุณจะยังคงอยู่และคุณสามารถทำงานได้เหมือนเดิม


6

ป้อนคำอธิบายรูปภาพที่นี่

การแก้ไขปัญหา :

คุณอาจพบข้อผิดพลาดเหล่านี้เมื่อพยายามเปลี่ยนรีโมต ไม่มีรีโมตดังกล่าว '[name]'

ข้อผิดพลาดนี้หมายความว่าไม่มีรีโมตที่คุณพยายามเปลี่ยนแปลง:

คอมไพล์ชุด URL ระยะไกล sofake https://github.com/octocat/Spoon-Knife ถึงแก่ชีวิต: ไม่มีการรีโมต 'sofake'

ตรวจสอบว่าคุณพิมพ์ชื่อรีโมตอย่างถูกต้อง

การอ้างอิง: https://help.github.com/articles/changing-a-remote-s-url/


3

ในการเปลี่ยนรีโมตรีโมต: git remote set-url origin <url>


หากต้องการเพิ่ม upstreams เพิ่มเติม: git remote add newplace <url>

เพื่อให้คุณสามารถเลือกสถานที่ทำงาน git push origin <branch>หรือgit push newplace <branch>


1
ฉันไม่สามารถหาคนอื่น ๆ กล่าวถึงการทำงานในหลาย upstreams ..
แอนเดอ Cossul

2

คุณสามารถเปลี่ยน URL โดยแก้ไขไฟล์กำหนดค่า ไปที่รูทโปรเจคของคุณ:

nano .git/config

จากนั้นแก้ไขฟิลด์ URL และตั้งค่า URL ใหม่ของคุณ บันทึกการเปลี่ยนแปลง คุณสามารถตรวจสอบการเปลี่ยนแปลงโดยใช้คำสั่ง

git remote -v 

1

สำหรับผู้ที่ต้องการเปลี่ยนแปลงจาก Visual Studio 2019

เปิด Team Explorer (Ctrl + M)

หน้าแรก -> การตั้งค่า

Git -> การตั้งค่าพื้นที่เก็บข้อมูล

รีโมท -> แก้ไข

ป้อนคำอธิบายรูปภาพที่นี่


1

หากพื้นที่เก็บข้อมูลของคุณเป็นส่วนตัวแล้ว

  1. เปิดแผงควบคุมจากเมนูเริ่ม
  2. เลือกบัญชีผู้ใช้
  3. เลือก "จัดการข้อมูลรับรองของคุณ" ในเมนูด้านซ้าย
  4. ลบข้อมูลรับรองที่เกี่ยวข้องกับ Git หรือ GitHub

การอ้างอิง


1

ตรวจสอบสิทธิ์ของคุณ

ในกรณีของฉันฉันต้องตรวจสอบชื่อผู้ใช้ของฉัน

ฉันมีที่เก็บสองหรือสามที่มีหนังสือรับรองแยกต่างหาก

ปัญหาคือสิทธิ์ของฉันฉันมีเซิร์ฟเวอร์ git ส่วนตัวสองแห่งและที่เก็บข้อมูล

บัญชีที่สองนี้คือผู้ดูแลระบบของ repo ใหม่และบัญชีแรกเป็นบัญชีผู้ใช้เริ่มต้นของฉันและฉันควรให้สิทธิ์ก่อน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.