Github เพิ่มพื้นที่เก็บข้อมูลเป็นทางแยกจากโคลนที่มีอยู่


21

ดังนั้นฉันมีที่เก็บคอมไพล์ที่ฉันโคลนจากแหล่งต้นน้ำบน ghithub ฉันทำการเปลี่ยนแปลงเล็กน้อยกับมัน (ที่ไม่ได้ผูกมัดและอยู่ในสาขาหลัก) สิ่งที่ฉันต้องการจะทำคือผลักดันการเปลี่ยนแปลงของฉันไปยังหน้า GitHub ของฉันเป็นสาขาใหม่และมี GitHub ยังคงเห็นว่ามันเป็นทางแยก

เป็นไปได้ไหม ฉันค่อนข้างใหม่กับคอมไพล์และ GitHub คำถามของฉันไม่สมเหตุสมผล

วิธีที่ง่ายที่สุดที่ฉันสามารถนึกได้ โคลนแบบโลคัลไปยังไดเร็กทอรีอื่น เพิ่มธุรกรรมซื้อคืนต้นทาง สร้างสาขาใน repo ที่แยกใหม่ คัดลอกการเปลี่ยนแปลงรหัสของฉันด้วยมือลงใน repo ท้องถิ่นใหม่ จากนั้นดันกลับขึ้นไปยัง GitHub ของฉัน

นี่เป็นกรณีการใช้งานทั่วไปที่มีวิธีการทำที่ง่ายกว่าโดยไม่ต้องทำซ้ำไดเรกทอรีหรือไม่

ฉันเดาว่าฉันถามที่นี่ตรงข้ามกับ SO เนื่องจากฉันอยู่บน linux โดยใช้คอมไพล์บรรทัดคำสั่งและผู้คนที่นี่ให้คำตอบที่ดีกว่า imo =]


ฉันเดาว่านี่เป็นเทคนิคในหัวข้อ แต่อาจจะทำได้ดีกว่าที่อื่นเนื่องจากดูเหมือนว่าเป็นคำถาม
Github

คำตอบ:


22

คุณสามารถทำได้ทั้งหมดจากพื้นที่เก็บข้อมูลที่มีอยู่ของคุณ (ไม่จำเป็นต้องคัดลอกทางแยกลงในที่เก็บใหม่ (ในพื้นที่) สร้างสาขาของคุณคัดลอกการกระทำ / การเปลี่ยนแปลง ฯลฯ )

  1. เตรียมความพร้อมให้พร้อมที่จะเผยแพร่

    ปรับแต่งการกระทำในท้องถิ่นที่มีอยู่ (เช่นกับgit commit --amendและ / หรือgit rebase --interactive)

    ยอมรับการเปลี่ยนแปลงใด ๆ ที่คุณไม่ต้องการซึ่งคุณต้องการเผยแพร่ (ฉันไม่แน่ใจว่าคุณหมายถึงการที่คุณให้คำมั่นสัญญากับเจ้านายท้องถิ่นของคุณและการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดหรือการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดใด ๆ สาขา” พวกเขาเคร่งครัดในทรีของคุณ)

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

    git branch -m master my-feature
    
  2. ส้อม GitHub พื้นที่เก็บข้อมูลต้นน้ำ
    (เช่น) github.com:UpstreamOwner/repostory_name.gitเป็น(เช่น)
    github.com:YourUser/repository_name.git

    สิ่งนี้ทำบนเว็บไซต์ GitHub (หรือ "ลูกค้า" ที่ใช้ GitHub APIs) ไม่มีคำสั่ง Git ในท้องถิ่นที่เกี่ยวข้อง

  3. ในที่เก็บโลคัลของคุณ (ที่ถูกโคลนจากที่เก็บต้นน้ำ GitHub และมีการเปลี่ยนแปลงในต้นแบบของคุณ) เพิ่มที่เก็บทางแยกของคุณเป็นรีโมต:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. ผลักสาขาของคุณไปยังที่เก็บของแยกบน GitHub

    git push github my-feature
    
  5. ทางเลือกให้เปลี่ยนชื่อรีโมตเพื่อให้ส้อมของคุณเป็นที่รู้จักกันว่า“ กำเนิด” และอัปสตรีมเป็น“ อัปสตรีม”

    git remote rename origin upstream
    git remote rename github origin
    

    เหตุผลหนึ่งในการเปลี่ยนชื่อรีโมตอาจเป็นเพราะคุณต้องการให้สามารถใช้งานได้git pushโดยไม่ต้องระบุที่เก็บ (ค่าเริ่มต้นคือ "แหล่งกำเนิด")


ทำงานได้อย่างไร้ที่ติ แต่เมื่อคุณสร้างรีโมต Github ฉันคิดว่าคุณขาด "https: //" ใน URL Github
jesjimher

1
@jesjimher: "URL" ในโพสต์นี้ใช้"ไวยากรณ์เหมือน scp"ที่ใช้ SSH ไม่ใช่ HTTP (S) คุณจะต้องเปลี่ยนโคลอนเป็นสแลชเพื่อใช้เป็น HTTP (S) URL (สมมติว่าเซิร์ฟเวอร์รองรับทั้งคู่โดยไม่มีการเปลี่ยนแปลงเนมสเปซเพิ่มเติมซึ่ง GitHub ทำ)
Chris Johnsen

โอ๊ะโอเคคริสฉันพิมพ์ผิดลำไส้ใหญ่ว่าเป็นเครื่องหมายทับและดังนั้นจึงไม่ได้ผลสำหรับฉันจนกว่าฉันจะเพิ่ม "https" ขออภัยเสียง ...
jesjimher

ในขั้นตอนที่ 4 การใช้-uตัวเลือกสามารถทำให้สาขาในพื้นที่ของคุณmy-feature ติดตามสาขาระยะไกลเดียวกันorigin/my-featureได้ คำสั่งคือ:git push -u github my-feature
YaOzI

เยี่ยมมาก สิ่งเดียวที่ฉันต้องเปลี่ยนคือที่อยู่ GitHub!
Tico

0

มีเครื่องมือ: hub

hub เป็นเครื่องมือบรรทัดคำสั่งที่ล้อม gitเพื่อขยายด้วยคุณสมบัติพิเศษและคำสั่งที่ทำให้การทำงานกับ GitHub ง่ายขึ้น

ตอนนี้คุณสามารถ:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.