อะไรคือความแตกต่างระหว่าง IntelliJ's Shelve และ Git stash?


109

IntelliJ รองรับ git stashes เช่นเดียวกับคำสั่งที่สร้างขึ้นเองใน Shelve สิ่งเหล่านี้ดูเหมือนเกือบจะเหมือนกันในด้านวัตถุประสงค์และประโยชน์ใช้สอย อะไรคือความแตกต่างระหว่างพวกเขา?


2
อาจซ้ำกันของGit Shelve vs Stash
Vadzim

คำตอบ:


72

จากเอกสาร IntelliJ :

ในการผสานรวม Git นอกเหนือจากการเก็บเข้าลิ้นชักและการไม่มีชั้นวางแล้วยังรองรับ "การเก็บ" และ "การไม่เก็บ" ตามลำดับ คุณสมบัติเหล่านี้มีเหมือนกันมากความแตกต่างเพียงอย่างเดียวคือวิธีการสร้างและใช้แพตช์

  • โปรแกรมแก้ไขที่มีการเปลี่ยนแปลงที่ซ่อนไว้นั้นสร้างขึ้นโดย Git เอง หากต้องการนำไปใช้ในภายหลังคุณไม่จำเป็นต้องใช้ IntelliJ IDEA
  • โปรแกรมแก้ไขที่มีการเปลี่ยนแปลงในชั้นวางถูกสร้างขึ้นโดย IntelliJ IDEA โดยปกติจะใช้ผ่าน IDE ด้วย นอกจากนี้ยังสามารถใช้การเปลี่ยนแปลงที่มีชั้นวางภายนอก IntelliJ IDEA ได้ แต่ต้องมีขั้นตอนเพิ่มเติม

23
ดังนั้นข้อดีของการเก็บเข้าลิ้นชักคืออะไร "เข้ากันได้น้อย" กับคอมไพล์ธรรมดา?
MaxiWheat

18
ดูเหมือนว่าการเก็บเข้าลิ้นชักจะมีประโยชน์หากคุณใช้ VCS ที่ไม่มีคุณลักษณะสไตล์การเก็บแบบเนทีฟ ถ้าคุณใช้ git ฉันไม่เห็นประโยชน์ที่แท้จริง
Daniel Compton

7
'ประโยชน์ที่แท้จริง' แสดงอยู่ในคำตอบโดย id.bobr สิ่งสำคัญสำหรับฉันคือความสามารถในการเลือกไฟล์ / ชิ้นส่วนที่จะซ่อนได้เช่นเดียวกับเมื่อกระทำ
Martin Melka

2
ตั้งแต่ Git 2.13 คุณสามารถซ่อนไฟล์แต่ละไฟล์ด้วยไฟล์git stash push.
Deric Lima

Shelve ช่วยให้คุณเห็นภาพรวมที่ดีขึ้นมากเกี่ยวกับสิ่งที่อยู่ภายในและสิ่งที่แตกต่าง ง่ายกว่าที่จะใช้เฉพาะบางส่วนของไฟล์ที่เปลี่ยนแปลง ตอนแรกฉันไม่มั่นใจในคุณสมบัตินี้ แต่ตอนนี้ฉันใช้บ่อยกว่าที่ซ่อน
itachi

54

มันค่อนข้างคล้ายกันยกเว้น:

  • คุณไม่สามารถใช้ชั้นวางนอก IDE ได้เนื่องจากเป็นคุณสมบัติของ Intellij
  • Git stash ใช้งานได้กับไดเร็กทอรีและดัชนีการทำงานทั้งหมดเท่านั้น ชั้นวางของ IntelliJ สามารถทำงานกับไฟล์และรายการการเปลี่ยนแปลงแต่ละไฟล์ได้ (คุณสมบัติอื่นของ IntelliJ) อย่างที่คุณเห็นเช่นที่นี่บางครั้งก็จำเป็น
  • Idea มีการรองรับชั้นวางในตัวที่ดีกว่า การทำงานกับ git stash นั้นตรงไปตรงมามากขึ้น โดยเฉพาะอย่างยิ่งคุณสามารถจัดเก็บ \ ยกเลิกการจัดเก็บการเปลี่ยนแปลงของคุณหรือตรวจสอบไฟล์ที่เก็บเข้าลิ้นชักจากหน้าต่างเครื่องมือควบคุมเวอร์ชัน

นอกจากนี้ IMHO ชั้นวางยังทำงานได้เร็วขึ้นเล็กน้อยโดยเฉพาะอย่างยิ่งในโครงการขนาดใหญ่เมื่อมีการเปลี่ยนแปลงไฟล์จำนวนมาก

ดูเอกสารสำหรับข้อมูลเพิ่มเติม


ฉันพบว่าการคลิกขวาที่ไม่มีการเปลี่ยนแปลงเพื่อเก็บเข้าลิ้นชักอย่างรวดเร็วจะมีประโยชน์มาก ตามที่คุณพูดถึงฉันพบว่ามันเร็วกว่าเล็กน้อย
vikingsteve

4
"Git stash ใช้งานได้กับไดเร็กทอรีและดัชนีการทำงานทั้งหมดเท่านั้น" ซึ่งไม่ถูกต้อง Git stash สามารถซ่อนไฟล์และโฟลเดอร์แต่ละไฟล์ได้เช่นกันgit stash -- foo/bar.txt
Chaoz

22

ข้อได้เปรียบที่แตกต่างอย่างหนึ่งที่ Intellij's Shelve มีมากกว่าที่ซ่อนของ Git คือการใช้ Shelve คุณสามารถบันทึกการเปลี่ยนแปลงที่เป็นของหลาย repos ในรายการการเปลี่ยนแปลงเดียว การใช้ที่เก็บคุณจะต้องซ่อน / ยกเลิกการเก็บในแต่ละ repo ทีละรายการ สิ่งนี้มีประโยชน์มากในโปรเจ็กต์ขนาดใหญ่ที่มีหลายโมดูล (แต่ละโมดูลมี repo ของตัวเอง) ซึ่งการทำงานของฟีเจอร์บางอย่างอาจตัดผ่านหลายโมดูล (ดังนั้นจึงมีหลาย repos)


0

นี่คือสิ่งที่เอกสารกล่าวว่า

การเปลี่ยนแปลงที่ซ่อนคล้ายกับการเก็บเข้าลิ้นชัก ความแตกต่างเพียงอย่างเดียวคือวิธีการสร้างและใช้แพตช์ Git สร้าง Stashes และสามารถใช้ได้จากภายใน IntelliJ IDEA หรือภายนอก แพตช์ที่มีการเปลี่ยนแปลงแบบปิดถูกสร้างขึ้นโดย IntelliJ IDEA และยังถูกนำไปใช้ผ่าน IDE นอกจากนี้การซ่อนยังเกี่ยวข้องกับการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดทั้งหมดในขณะที่คุณใส่การเปลี่ยนแปลงในชั้นวางคุณสามารถเลือกการเปลี่ยนแปลงบางอย่างในเครื่องแทนที่จะเก็บไว้ในชั้นวางทั้งหมด

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