โครงการสามารถมีจุดกำเนิดหลายจุดได้หรือไม่?


188

โปรเจ็กต์สามารถมี "ต้นกำเนิด" สองตัวใน Git ได้หรือไม่?

ฉันต้องการผลักดันโครงการเดียวให้กับทั้งGitHubและเซิร์ฟเวอร์Heroku

ข้อผิดพลาดนี้ปรากฏขึ้นเมื่อเพิ่มที่เก็บ github:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.

8
คุณสามารถมีที่เก็บข้อมูลระยะไกลได้มากเท่าที่คุณต้องการ แต่คุณต้องตั้งชื่อให้ต่างกัน
เฟลิกซ์คลิง

ชื่อที่เก็บแตกต่างกันในกรณีนี้ คำว่า "กำเนิด" เป็นชื่อที่สามารถเปลี่ยนแปลงได้หรือไม่?
Chris Dutrow

4
อ๋อgit remote rename <old> <new>: linux.die.net/man/1/git-remote แต่คุณยังสามารถตั้งชื่อพื้นที่เก็บข้อมูลที่แตกต่างกัน ... Github
เฟลิกซ์แพรว


และเป็นไปได้ไหมที่จะทำให้รีโมตเป็นหนึ่งในค่าเริ่มต้นดังนั้นฉันจึงไม่ได้ขอให้เขียนชื่อของรีโมตนั้นทุกครั้งที่ฉันกด
40detectives

คำตอบ:


275

คุณสามารถมีรีโมตได้มากเท่าที่คุณต้องการ แต่คุณสามารถมีรีโมตเดียวที่ชื่อ "จุดกำเนิด" รีโมตที่เรียกว่า "จุดเริ่มต้น" ไม่ได้พิเศษ แต่อย่างใดยกเว้นว่าเป็นรีโมตเริ่มต้นที่สร้างโดย Git เมื่อคุณโคลนที่เก็บข้อมูลที่มีอยู่ คุณสามารถกำหนดค่ารีโมตที่สองกดไปที่ / ดึงจากรีโมตนั้นและตั้งค่าบางสาขาเพื่อติดตามสาขาจากรีโมตนั้นแทนกำเนิด

ลองเพิ่มรีโมตที่เรียกว่า "github" แทน:

$ git remote add github https://github.com/Company_Name/repository_name.git

# push master to github
$ git push github master

# Push my-branch to github and set it to track github/my-branch
$ git push -u github my-branch

# Make some existing branch track github instead of origin
$ git branch --set-upstream other-branch github/other-branch

4
ตามที่ระบุโดยคำตอบด้วยคะแนนโหวตสูงสุดสำหรับคำถามที่ว่าสิ่งนี้อาจซ้ำซ้อน - รีโมตสามารถอ้างถึงที่เก็บหลายแห่ง ดังนั้นคุณสามารถผลักดันรีโมทหนึ่งเครื่องและอัปเดตที่เก็บข้อมูลสองแห่งขึ้นไปไม่ชัดเจนว่าเป็นเป้าหมายของ OP หรือไม่
AD7six

มีตัวอย่างเชิงปฏิบัติอะไรบ้างที่ทำให้คุณอยากทำเช่นนี้? ทำไมคุณมีหนึ่งไดเรกทอรีชี้ไปที่ที่เก็บหลายแห่ง? แต่ละพื้นที่เก็บข้อมูลมักจะมี dir เฉพาะของตัวเอง
dspacejs

4
@mightyspaj ทุกคนสวยมากที่ใช้งานเพื่อ Heroku ได้ที่เรียกว่าระยะไกลและระยะไกลที่เรียกว่าorigin heroku
meagar

@mightyspaj หรือหากทีมของคุณใช้ส้อมและบางครั้งคุณต้องการเข้าถึงพวกเขา เราทำเช่นนั้นในทีมของเราที่ทำงานร่วมกับทีมใน UTC ที่แตกต่างกันดังนั้นเมื่อเราอนุมัติ PRs เราสามารถ rebase / push ในนามนั้นโดยใช้ fork นั้นและสามารถที่จะรวมโค้ดตอนนี้ไม่ใช่พรุ่งนี้)
เบอนัวต์ Drapeau

มีวิธีในการผลักดันสาขาในประเทศทั้งหมดพร้อมกันไปยังรีโมตใหม่หรือไม่?
Tanasis

89

ในฐานะที่เป็นหมายเหตุด้านข้างสำหรับทุกคนที่สะดุดกับคำถามนี้ในภายหลังมันเป็นไปได้ที่จะมีจุดเริ่มต้นผลักดันไปยังเซิร์ฟเวอร์ที่เก็บ git มากกว่าหนึ่งครั้ง

คุณสามารถทำสิ่งนี้ได้โดยใช้คำสั่งต่อไปนี้เพื่อเพิ่ม URL อื่นไปยังรีโมทต้นทาง

git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git

8
สำหรับความคิดเกี่ยวกับเรื่องนี้ดูquesion นี้
moi

3
ตกลงดังนั้นฉันจะลบหนึ่งในต้นกำเนิดเหล่านี้โดยไม่ลบทั้งหมดได้อย่างไร
Michael

@Michael คุณสามารถแก้ไข./git/configไฟล์และลบไฟล์ url ในส่วน [remote "origin"]
Pini Cheyni

8
@Michaelgit remote set-url --delete origin ssh://git@bitbucket.org/user/myproject.git
Afrig Aminuddin

รีโมททั้งหมดต้องมีประวัติการส่งเหมือนกันหรือไม่ ถ้าฉันต้องการที่จะผลักดันบางอย่างมุ่งมั่นที่จะเป็นหนึ่งในระยะไกลและไม่อื่น ๆ
Qasim

44

นี่คือตัวอย่างโครงการที่มีรีโมทหลายรายการ GitHub & GitLab:

  1. เพิ่ม repo ระยะไกลสำหรับ GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. เพิ่ม repo ระยะไกลสำหรับ GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. ตอนนี้คุณมีรีโมทหลายตัวในโครงการ ตรวจสอบอีกครั้งด้วยgit remote -v

    $ git remote -v
    github https://github.com/Company_Name/repository_name.git (fetch)
    github https://github.com/Company_Name/repository_name.git (push)
    gitlab https://gitlab.com/Company_Name/repository_name.git (fetch)
    gitlab https://gitlab.com/Company_Name/repository_name.git (push)
    
  4. คุณจะผลักดันไปยังที่เก็บหลายแห่งได้อย่างไร

    $ git push github && git push gitlab
    

2
จะไม่เพียง$ git pushผลักไปที่รีโมททั้งหมด?
ทำน้ำเย็น v2

เรามีปัญหาเมื่อฉันพยายามที่จะผลักดัน GitHub แล้วกด Gitlab อัตโนมัติ คุณช่วยฉันออกได้ไหม ฉันต้องการผลักดันทีละแหล่งกำเนิด
Mitul Marsoniya

ฉันจะทำงานกับสิ่งนี้ได้อย่างไรถ้าฉันมีสองโครงการใน gitlab สองที่เก็บ ฉันได้รับรหัสจากโครงการหนึ่งแล้วผลักไปที่โครงการอื่น?
muzi jack

2

คุณสามารถเพิ่มบัญชีระยะไกลอื่นลงในที่เก็บของคุณได้ด้วยการให้ชื่อที่แตกต่างแทนที่จะเป็นที่มา คุณสามารถใช้ชื่อเช่น origin2 เพื่อให้คำสั่ง git ของคุณสามารถแก้ไขได้

git remote add origin2 https://github.com/Company_Name/repository_name.git


1
git remote set-url --add --push origin git@github.com:user/my-project.git
git remote set-url --add --push origin git@bitbucket.org:user/my-project.git

ตอนนี้คุณมี 2 ต้นกำเนิด


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