Apa perbedaan antara IntelliJ's Shelve dan Git Stash?

104

IntelliJ mendukung git simpanan serta perintah bawaannya sendiri di rak. Ini tampaknya hampir identik dalam tujuan dan kegunaan. Apa perbedaan di antara keduanya?

Daniel Compton
sumber
2
Kemungkinan duplikat dari Git Shelve vs Stash
Vadzim

Jawaban:

69

Dari dokumentasi IntelliJ :

Dalam integrasi Git, selain rak dan unshelving, "menyimpan" dan "melepaskan" masing-masing didukung. Fitur-fitur ini memiliki banyak kesamaan, satu-satunya perbedaan adalah cara patch dibuat dan diterapkan.

  • Tambalan dengan perubahan yang disimpan dibuat oleh Git itu sendiri. Untuk menerapkannya nanti, Anda tidak memerlukan IntelliJ IDEA.
  • Patch dengan perubahan rak dihasilkan oleh IntelliJ IDEA. Biasanya, mereka juga diterapkan melalui IDE. Menerapkan perubahan yang disimpan di luar IntelliJ IDEA juga memungkinkan, tetapi membutuhkan langkah-langkah tambahan.
Daniel Compton
sumber
23
Nah, lalu apa sih kelebihan rak karena hanya "kurang cocok" dengan git polos?
MaxiWheat
17
Sepertinya rak akan berguna jika Anda menggunakan VCS yang tidak memiliki fitur gaya simpanan asli. Jika Anda menggunakan git, saya tidak dapat melihat manfaat nyata apa pun.
Daniel Compton
5
'Manfaat nyata' tercantum dalam jawaban id.bobr. Hal utama bagi saya adalah dapat memilih file / potongan mana yang akan disimpan, seperti saat melakukan.
Martin Melka
1
Sejak Git 2.13, dimungkinkan untuk menyimpan file individual dengan git stash push.
Deric Lima
Shelve memberi Anda gambaran yang lebih baik tentang apa yang ada di dalamnya dan apa yang berbeda. Lebih mudah menerapkan hanya beberapa bagian dari file yang diubah. Awalnya saya tidak yakin dengan fitur ini, tetapi sekarang saya menggunakannya lebih sering daripada simpanan.
itachi
47

Mereka sangat mirip kecuali:

  • Anda tidak dapat menggunakan rak di luar IDE, karena ini adalah fitur Intellij.
  • Git stash hanya berfungsi dengan seluruh direktori dan indeks kerja. Rak IntelliJ dapat bekerja dengan file individual dan daftar perubahan (fitur IntelliJ lainnya). Seperti yang Anda lihat, misalnya, di sini , terkadang perlu.
  • Ide memiliki dukungan bawaan yang lebih baik untuk rak. Bekerja dengan git stash lebih mudah. Secara khusus, Anda dapat menyimpan \ unshelve perubahan Anda atau meninjau file yang disimpan dari jendela alat kontrol versi.

Selain itu, IMHO, shelve bekerja sedikit lebih cepat, terutama dalam proyek besar, ketika banyak file diubah.

Lihat dokumentasi untuk info lebih lanjut.

id.bobr
sumber
Saya menemukan mengklik kanan pada perubahan untuk menyimpannya dengan cepat menjadi sangat berguna. Seperti yang Anda singgung, saya merasa sedikit lebih cepat.
vikingsteve
4
"Git stash hanya berfungsi dengan seluruh direktori dan indeks kerja" - ini salah. Git simpanan juga dapat menyimpan file dan folder individual - mis .:git stash -- foo/bar.txt
Chaoz
21

Satu keuntungan berbeda yang dimiliki Intellij's Shelve dibandingkan simpanan Git biasa adalah bahwa dengan menggunakan Shelve, Anda dapat menyimpan perubahan yang termasuk dalam beberapa repo dalam satu daftar perubahan. Menggunakan simpanan, Anda perlu menyimpan / melepas di setiap repo satu per satu. Ini sangat berguna dalam proyek besar dengan banyak modul (masing-masing memiliki repo sendiri) di mana pekerjaan fitur tertentu dapat memotong beberapa modul (dan karenanya banyak repo)

riyasvaliya
sumber
0

Inilah yang Dikatakan Dokumentasi

Menyimpan perubahan sangat mirip dengan rak. Satu-satunya perbedaan adalah cara patch dibuat dan diterapkan. Stash dibuat oleh Git, dan dapat diterapkan dari dalam IntelliJ IDEA, atau di luarnya. Patch dengan perubahan yang disimpan dibuat oleh IntelliJ IDEA dan juga diterapkan melalui IDE. Selain itu, penyimpanan melibatkan semua perubahan yang tidak mengikat, sementara saat Anda meletakkan perubahan ke rak, Anda dapat memilih beberapa perubahan lokal daripada menyimpan semuanya.

Sagar
sumber