คอมไพล์ทำงานสองสาขาพร้อมกัน


168

ฉันมีโครงการที่มีหลายสาขา

ผมอยากจะทำงานในหลายgit checkoutสาขาพร้อมกันโดยไม่ต้องสลับไปมาด้วย

มีวิธีใดที่ฉันสามารถทำได้นอกเหนือจากการคัดลอกพื้นที่เก็บข้อมูลทั้งหมดที่อื่น?



1
Git 2.5+ (Q2 2015) git checkout --to=<path>อย่างเป็นทางการจะสนับสนุนเรื่องนี้มีคำสั่งใหม่ ดูคำตอบของฉันด้านล่าง
VonC

2
ที่จริงแล้วคำสั่งจะเป็นgit worktree add <path> [<branch>](Git 2.5 rc2)
VonC

คำตอบ:


156

Git 2.5+ (Q2 2558) รองรับคุณสมบัตินี้!

หากคุณมี repo คอมไพล์cool-app, CD ไปยังราก ( cd cool-app) git worktree add ../cool-app-feature-A feature/Aวิ่ง การตรวจสอบนี้ออกสาขาในตัวเองไดเรกทอรีทุ่มเทมันใหม่feature/Acool-app-feature-A

ที่แทนที่สคริปต์เก่าcontrib/workdir/git-new-workdirโดยมีกลไกที่แข็งแกร่งกว่าซึ่งต้นไม้การทำงานที่ "เชื่อมโยง" จะถูกบันทึกไว้ใน$GIT_DIR/worktreesโฟลเดอร์repo ใหม่หลัก(เพื่อให้ทำงานบนระบบปฏิบัติการใด ๆ รวมถึง Windows)

อีกครั้งเมื่อคุณโคลน repo (ในโฟลเดอร์ที่ชอบ/path/to/myrepo) คุณสามารถเพิ่ม worktrees สำหรับสาขาที่แตกต่างกันในเส้นทางอิสระที่แตกต่างกัน ( /path/to/br1, /path/to/br2) ในขณะที่มีต้นไม้ทำงานที่เชื่อมโยงกับประวัติ repo หลัก (ไม่จำเป็นต้องใช้--git-dirตัวเลือกอีกต่อไป)

ดูเพิ่มเติมที่ " หลายไดเรกทอรีทำงานกับ Git? "

และเมื่อคุณสร้างworktree แล้วคุณสามารถย้ายหรือนำออกได้ (ด้วย Git 2.17+, Q2 2018)


2
นี่ควรเป็นคำตอบใหม่ที่ได้รับการยอมรับเนื่องจากตอนนี้ 2.5.X เป็นรุ่นที่แนะนำแม้กระทั่งสำหรับ windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00

40

ลองดูที่$ GIT_SRC_DIR / contrib / workdir / Git-new-workdir

สคริปต์ง่ายๆเพื่อสร้างไดเร็กทอรีการทำงานที่ใช้ symlinks เพื่อชี้ไปยังที่เก็บที่มีอยู่ สิ่งนี้อนุญาตให้มีสาขาที่แตกต่างในไดเร็กทอรีการทำงานที่ต่างกัน แต่ทั้งหมดมาจากที่เก็บเดียวกัน


และสิ่งที่คล้ายกัน: stackoverflow.com/questions/655202/…
Tobu

2
ฉันรู้ว่ามันเก่า แต่คุณช่วยอธิบายได้ไหม
dav_i

@dav_i: เช่นนี้ ?
Stefan Näwe

@ StefanNäweอาฉันสับสน - เร็วเกินไปในตอนเช้า ... อัปเดตคำตอบของคุณพร้อมลิงก์
dav_i

0

ฉันแนะนำสคริปต์ตัวเล็ก ๆ ของฉันhttp://www.redhotchilipython.com/en_posts/2013-02-01-clone-per-feature.html

มันจะทำการคอมไพล์ git และแทนที่การตั้งค่า (เป็น "ดู" ที่ repo ดั้งเดิมดังนั้นการดึง / การกดจะเข้าสู่ repo "main") โดยทั่วไป แต่มันง่ายพอที่จะให้บริการนามธรรมจาก bootstrapping จริง


0

เช่นเดียวกับเพื่อนของเราVonCกล่าวเมื่อห้าเดือนที่แล้วตอนนี้มีคุณสมบัติใหม่ตั้งแต่รุ่น 2.5.x ที่ทำงานได้ คอมไพล์ worktree


มันไม่เหมือนกับสิ่งที่ฉันพูดถึง 5 เดือนที่ผ่านมาในคำตอบของฉันข้างต้น ?
VonC

Ops ตอนนี้ฉันรู้สึกแย่มาก ฉันยังไม่ได้จ่ายความสนใจที่เหมาะสมกับที่ ความผิดฉันเอง.

0

Git รองรับหลาย worktree ในเวลาเดียวกัน สำหรับข้อมูลเพิ่มเติมดู:

เป็นเรื่องยากมากที่จะรองรับหลาย worktree ด้วย ID ตัวอย่างเช่นนี่คือคำร้องขอการปรับปรุงใน JGet (eclipse ID) เพื่อสนับสนุน worktree

ดังนั้นคุณต้องจัดการโครงการด้วยตนเอง (บรรทัดคำสั่ง) ที่มีปัญหามากมายหรือทำงานกับ worktree เดียวใน IDE


ณ ตอนนี้คำตอบนี้ไม่ถูกต้อง โปรดอัปเดตคำตอบ
narendra-choudhary

-2

ไม่ได้จริงๆเพราะ Git สนับสนุนให้มีเพียงสำเนาการทำงานของข้อมูลที่เก็บภายในไดเรกทอรีที่เก็บ

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

เมื่อใดก็ตามที่คุณทำอะไรเสร็จคุณเพียงแค่กดไปที่คลังเก็บหลัก "หลัก"

คำแนะนำบางอย่าง:

man git-clone

git clone --bare


3
"Git สนับสนุนเฉพาะที่จะมีหนึ่งสำเนาการทำงานของข้อมูลที่เก็บ" -1 git-new-workdirไม่จริงดูคำตอบเกี่ยวกับ
sleske

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