เช่นนี้จะติดแท็กด้วยคอมไพล์ผมหวังว่าขาดความรู้ SVN เป็น neglectable
ขณะนี้ฉันกำลังโคลน repo และโคลนสาขาเฉพาะโดยใช้ gitk
คุณกำลังโคลนพื้นที่เก็บข้อมูลระยะไกลทั้งหมดไม่เพียง แต่สาขาที่เฉพาะเจาะจง
ที่เก็บจะถูกจินตนาการว่าเป็นฐานข้อมูลที่ดีที่สุดดังนั้นคุณจึงทำการโคลนสถานะปัจจุบันของฐานข้อมูลระยะไกล แต่หลังจากนั้นคุณกำลังทำงานกับสำเนาของฐานข้อมูลนั้นเอง ถ้าคุณกระทำคุณจะแก้ไขฐานข้อมูลท้องถิ่นของคุณ
fetch
คำสั่งที่ใช้ในการเก็บฐานข้อมูลท้องถิ่นในการซิงค์กับรีโมทหนึ่งเดียว
โดยปกติจากฐานข้อมูลท้องถิ่นนั้นคุณจะต้องทำการตรวจสอบสาขาเพื่อใช้งาน สิ่งนี้ไม่เหมือนเครื่องหมายภายในสำหรับคอมไพล์ซึ่งงานปัจจุบันของคุณเริ่มต้นขึ้น
สมมติว่าคุณกำลังทำงานในที่เก็บง่าย ๆ ที่ไม่มีสาขานอกจากmaster
คุณสามารถเข้าไปดูใน.git
โฟลเดอร์เพื่อเผย "magic":
สมมติสุดท้ายของการกระทำ (บนmaster
) คือคุณจะพบว่าที่อยู่ภายใต้182e8220b404437b9e43eb78149d31af79040c66
cat .git/refs/heads/master
จากที่คุณปิดสาขาสาขาใหม่ที่คุณจะได้พบกับตัวชี้เดียวกันแน่นอนในแฟ้มgit checkout -b mybranch
cat .git/refs/heads/mybranch
สาขาไม่มีอะไรมากไปกว่า "ตัวชี้" "การทำงาน" HEAD
เครื่องหมายที่เรียกว่า
หากคุณต้องการทราบว่าคุณอยู่ที่ไหนHEAD
:
cat .git/HEAD
ซึ่งกล่าวว่าเช่นref: refs/heads/mybranch
ซึ่งจะเปลี่ยนจุด ( cat .git/refs/heads/mybranch
) เพื่อแฮชกระทำ78a8a6eb6f82eae21b156b68d553dd143c6d3e6f
การกระทำที่เกิดขึ้นจริงจะถูกเก็บไว้ภายใต้objects
โฟลเดอร์ (วิธีเป็นหัวข้อของตัวเอง)
โฟลเดอร์โปรเจ็กต์มีเฉพาะเนื้อหาสำหรับสาขานั้นและฉันไม่เห็นทุกสาขาเหมือนใน SVN ซึ่งทำให้ฉันสับสนเล็กน้อย
อย่าสับสนworking directory
กับ "ฐานข้อมูล git" โดยรวม ดังที่ฉันได้กล่าวไปแล้วไดเรกทอรีทำงานของคุณเป็นเพียงส่วนหนึ่งของ (อาจ) ส่วนย่อย
สมมติว่าคุณมีสาขาที่แตกต่างกันไดเรกทอรีการทำงานของคุณทุ่มเทให้กับการทำงานในสาขานั้นเท่านั้น (แม้ว่าคุณจะสามารถนำงานจากที่อื่นมาใช้)
โดยปกติถ้าคุณต้องการดูว่าสาขาใดที่กำหนดไว้สำหรับโครงการคุณมีความเป็นไปได้
git branch
สำหรับสาขาท้องถิ่น
git branch --remote
สำหรับสาขาระยะไกล
git branch -a
สำหรับทั้ง
(หรือgit branch -v
)
เนื่องจาก git เป็นระบบควบคุมเวอร์ชันแบบกระจายจึงไม่เพียงเป็นไปได้ แต่ได้รับการสนับสนุนเพื่อทำให้สาขาแตกต่างกันในพื้นที่ / ระยะไกล
เวิร์กโฟลว์ทั่วไปของฉันคือ:
- แยกสาขาคุณลักษณะออก
- แยกสาขา WIP (อยู่ระหว่างดำเนินการ) จากสาขานั้น
- ทำงานได้ตามที่คุณต้องการ - แม้ว่าคุณจะมอบหมายงานหลังจากบรรทัดเดียว มันไม่สำคัญ
เมื่อคุณสมบัติเสร็จสมบูรณ์:
- สควอช / ทำใหม่
WIP
สาขา (ด้วยการรีบูตแบบโต้ตอบ) = ทำให้การกระทำเดียวจากที่
- รวม
WIP
สาขาเข้ากับสาขาฟีเจอร์และข้อเสนอที่ (ถ้าคุณทำงานกับ GitHub ข้อเสนอนั้นจะเรียกว่า "คำขอดึง") เพื่อรวมเข้ากับสาขาที่มั่นคง (มาสเตอร์)
นอกจากนี้ฉันต้องการทราบวิธีจัดการกับกระบวนการที่ฉันต้องการ wprl ในสองสาขาในเวลาเดียวกันในกรณีเช่นฉันต้องสร้างโปรแกรมแก้ไขด่วนบนต้นแบบ แต่เก็บเนื้อหาของสาขาอื่นด้วย
ขึ้นอยู่กับว่าโครงการของคุณมีโครงสร้างอย่างไร:
สมมติว่าคุณมีเจ้านายที่มั่นคง และฟีเจอร์นั้นได้รับการพัฒนาออกมาจากสาขาที่มีเสถียรภาพเท่านั้นดังนั้นโดยปกติแล้วจะอยู่หลังสาขาฟีเจอร์ จากนั้นคุณจะมีความมุ่งมั่นต่ออาจารย์ที่จะเป็นรากของสาขาคุณลักษณะ
จากนั้นคุณจะทำคอมมิชชันในสาขาหลักและสามารถตัดสินใจได้ว่าจะผสานทั้งสองสาขาเข้าด้วยกันหรือเพื่อทำการรีบูท (ซึ่งเป็นการผสานสำหรับผู้ใช้ที่มีความต้องการขั้นสูง
หรือคุณสามารถทำการเปลี่ยนแปลงสาขา (เช่นmaster
) และทำให้พวกเขาเปลี่ยนเป็นสาขาอื่นได้
อะไรคืออนุสัญญาชื่อที่แนะนำในการสร้างโฟลเดอร์ซึ่งรวมถึงสาขาที่โคลนจาก repo ใน GIT เช่น myproject-branchname
มันขึ้นอยู่กับคุณ.
โดยทั่วไปแล้วคุณจะได้ชื่อที่เก็บ
แต่มีโอกาสเมื่อไม่ต้องการ:
เช่นคุณคัดลอก oh-my-zsh ด้วยgit clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
Here .oh-my-zsh
ถูกตั้งชื่ออย่างชัดเจนว่าเป็นเป้าหมาย