ฉันมีเซิร์ฟเวอร์ที่ใช้งานไม่ได้ สิ่งเดียวที่ฉันเหลือไว้สำหรับการโยกย้ายคือที่เก็บของฉัน เซิร์ฟเวอร์นี้ถูกระบุว่าเป็นจุดเริ่มต้น (หลัก) สำหรับหนึ่งในโครงการของฉัน เป็นวิธีที่เหมาะสมในการย้ายพื้นที่เก็บข้อมูลเพื่อเก็บประวัติอะไร
ฉันมีเซิร์ฟเวอร์ที่ใช้งานไม่ได้ สิ่งเดียวที่ฉันเหลือไว้สำหรับการโยกย้ายคือที่เก็บของฉัน เซิร์ฟเวอร์นี้ถูกระบุว่าเป็นจุดเริ่มต้น (หลัก) สำหรับหนึ่งในโครงการของฉัน เป็นวิธีที่เหมาะสมในการย้ายพื้นที่เก็บข้อมูลเพื่อเก็บประวัติอะไร
คำตอบ:
ในการเพิ่มที่ตั้ง repo ใหม่
git remote add new_repo_name new_repo_url
จากนั้นดันเนื้อหาไปยังตำแหน่งใหม่
git push new_repo_name master
ในที่สุดก็เอาอันเก่าออก
git remote rm origin
หลังจากนั้นคุณสามารถทำสิ่งที่ bdonlan พูดและแก้ไขไฟล์. git / config เพื่อเปลี่ยน new_repo_name เป็น Origin หากคุณไม่ลบต้นกำเนิด (ที่เก็บรีโมตดั้งเดิม) คุณสามารถเพียงแค่ผลักดันการเปลี่ยนแปลงไปยัง repo ใหม่ด้วย
git push new_repo_name master
git push -u new_repo_name --allคุณควรจะสามารถที่จะผลักดันสาขาทั้งหมดในครั้งเดียวผ่าน
git remote rename new_repo_name origin
หากคุณต้องการย้ายสาขาและแท็กทั้งหมดคุณควรใช้คำสั่งต่อไปนี้:
git clone --mirror [oldUrl]
เพื่อโคลน repo เก่ากับทุกสาขา
cd the_repo
git remote add remoteName newRepoUrl
เพื่อตั้งค่ารีโมตใหม่
git push -f --tags remoteName refs/heads/*:refs/heads/*
เพื่อผลักดันการอ้างอิงทั้งหมดภายใต้การอ้างอิง / หัว (ซึ่งอาจเป็นสิ่งที่คุณต้องการ)
--tagsและไม่ได้เข้ากันได้กับrefs/heads/*:refs/heads/* stackoverflow.com/a/26552740/1484831ทำงานได้ดี --mirror
refs/heads/refs/headsด้วยการใช้git push -f --tags remoteName refs/heads/*:refs/heads/*ดังนั้นฉันจึงเปลี่ยนไปgit push remoteName --mirror
push--mirrorนอกจากนี้ยังสนับสนุน git clone --mirror; cd repo; git push --mirror new_remoteควรทำเคล็ดลับ
นี้ทำงานสำหรับฉันไม่มีที่ติ
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
ฉันต้องพูดถึงแม้ว่าสิ่งนี้จะสร้างภาพสะท้อนของ repo ปัจจุบันของคุณแล้วผลักมันไปยังตำแหน่งใหม่ ดังนั้นนี้สามารถใช้เวลาบางอย่างสำหรับ Repos ขนาดใหญ่หรือการเชื่อมต่อช้า
git push --mirror origin -f
คัดลอกมัน มันง่ายจริงๆ :)
ทางฝั่งไคลเอ็นต์เพียงแก้ไข. git / config ใน repo ในพื้นที่ของลูกค้าเพื่อชี้รีโมตของคุณไปยัง URL ใหม่ตามความจำเป็น
นี่เป็นส่วนหนึ่งของคำตอบอื่น ๆ
git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new
--mirrorในการผลักดันเป็นสิ่งสำคัญมาก: นี่ควรเป็นคำตอบที่ถูกต้อง
git init --bare
ฉันเพิ่งโพสต์สิ่งที่คนอื่นพูดในรายการคำแนะนำง่ายๆ
ย้ายที่เก็บ:เพียงเข้าสู่เซิร์ฟเวอร์ใหม่cdไปยังไดเรกทอรีหลักที่คุณต้องการเก็บที่เก็บและใช้rsyncเพื่อคัดลอกจากเซิร์ฟเวอร์เก่า:
new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
ทำให้ไคลเอ็นต์ชี้ไปที่ที่เก็บใหม่:ตอนนี้บนแต่ละไคลเอ็นต์ที่ใช้ที่เก็บเพียงแค่ลบตัวชี้ไปยังจุดเริ่มต้นเก่าและเพิ่มหนึ่งไปยังที่เก็บใหม่
client> git remote rm origin
client> git remote add origin user@new.server.com:path/to/repository.git
git remote set-url origin user@new.server.com:path/to/repository.git
ดูสูตรนี้ใน GitHub: https://help.github.com/articles/importing-an-external-git-repository
git push --mirrorฉันพยายามจำนวนของวิธีการก่อนที่จะพบ
ทำงานเหมือนจับใจ!
git clone --mirror ..., git remote add ...,git push --mirror ...
ฉันทำตามคำแนะนำบน BitBucket เพื่อย้าย repo ที่มีสาขาทั้งหมดที่นั่น ต่อไปนี้เป็นขั้นตอนที่มีคำอธิบายตาม#ตัวละคร:
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
ทำงานได้ดีสำหรับฉัน
กรุณาทำตามขั้นตอน:
นี่เป็นรูปแบบของคำตอบนี้ซึ่งปัจจุบันแนะนำโดยgitlabเพื่อ "โอนย้าย" ที่เก็บ git จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น
ให้เราสมมติว่าโครงการเก่าของคุณถูกเรียกexisting_repoเก็บไว้ในexisting_repoโฟลเดอร์
สร้าง repo บนเซิร์ฟเวอร์ใหม่ของคุณ เราจะสมมติว่า URL ของโครงการใหม่นั้นคือgit@newserver:newproject.git
เปิดอินเตอร์เฟสบรรทัดคำสั่งและป้อนต่อไปนี้:
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
ประโยชน์ของวิธีนี้คือคุณไม่ต้องลบสาขาที่สอดคล้องกับเซิร์ฟเวอร์เก่าของคุณ
คุณสามารถใช้คำสั่งต่อไปนี้:
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)
ควรง่ายเหมือน:
git remote set-url origin git://new.url.here
วิธีนี้ทำให้คุณเก็บชื่อoriginrepo ใหม่ของคุณ - จากนั้นกดไปที่ repo ใหม่อันเก่าตามรายละเอียดในคำตอบอื่น ๆ หากว่าคุณทำงานคนเดียวและคุณมี repo ท้องถิ่นที่คุณต้องการสะท้อนกับ cruft ทั้งหมดของคุณคุณก็อาจจะ (เช่นภายใน repo ท้องถิ่นของคุณ)
git push origin --mirror # origin points to your new repo
แต่ดูว่า"git push --mirror" เพียงพอสำหรับการสำรองที่เก็บของฉันหรือไม่ (ในทั้งหมดไม่ได้ใช้--mirrorแต่ครั้งเดียว)
ทำตามคำแนะนำเหล่านี้หากคุณต้องการที่จะรักษาคอมมิชชันและสาขาทั้งหมดจากเก่าไปสู่ repo ใหม่
git clone --bare <old-repo-url>
cd <old-repo-directory>
git push --mirror <new-repo-url>
คุณสามารถใช้git-copyเพื่อทำซ้ำ repo กับประวัติทั้งหมด
git copy http://a.com/old.git http://a.com/new.git
หากคุณต้องการย้ายจากที่หนึ่งไปยังอีกที่หนึ่งและเก็บสำรองข้อมูลของที่มาปัจจุบันของคุณบนเครื่องท้องถิ่นของคุณคุณสามารถใช้ขั้นตอนเหล่านี้:
ตอนนี้ในโฟลเดอร์ทำ
git remote get-url origin
คำสั่งดังกล่าวให้ URL แหล่งกำเนิดระยะไกลปัจจุบันมีประโยชน์ในการตั้งค่าต้นกำเนิดกลับไปในขั้นตอนสุดท้าย
git remote set-url origin git@github.newlocation:folder/newrepo.git
คำสั่งดังกล่าวตั้งค่าที่มาจากระยะไกลไปยังตำแหน่งใหม่
git push --set-upstream origin develop
คำสั่งข้างต้นผลักสาขาท้องถิ่นที่ใช้งานในปัจจุบันไปยังระยะไกลด้วยการพัฒนา branchname แน่นอนมันเก็บรักษาประวัติศาสตร์ทั้งหมดเช่นเดียวกับคอมไพล์ประวัติทั้งหมดจะถูกผลักด้วย
git remote set-url origin <original old origin>
คำสั่งดังกล่าวตั้งค่าที่มาทางไกลเป็นแหล่งกำเนิดปัจจุบันของคุณ: คุณต้องการสิ่งนี้เพราะคุณอยู่ในโฟลเดอร์ที่มีอยู่ของคุณและคุณอาจไม่ต้องการรวมชื่อโฟลเดอร์ปัจจุบันของคุณกับโฟลเดอร์ใหม่ที่คุณจะสร้างขึ้นเพื่อคัดลอก repo คุณเพิ่งผลักไปที่
หวังว่าจะช่วยได้
หากคุณต้องการโอนย้ายที่เก็บ #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
จะคัดลอกสาขาหลัก (เฉพาะการติดตามสาขา) ไปยังที่เก็บใหม่