Apa arti 'stage' dalam git?

317

Saya menemukan git sulit dimengerti karena saya tidak dapat menemukan arti dari kata-kata yang digunakan untuk tindakan. Saya telah memeriksa kamus untuk arti 'panggung' dan tidak ada makna yang terkait dengan konsep kontrol sumber.

Apa arti 'tahap' dalam konteks git?

000
sumber
11
Git memang memiliki kosa kata sendiri. Dan karena setiap instruksi dirumuskan dalam kosa kata khusus, sulit untuk memulai. Untuk "tahap" adalah melakukan git add file.extuntuk file tertentu, atau git add .untuk mempengaruhi semua file yang dimodifikasi dan tidak terlacak. File yang telah ditambahkan dengan cara ini dikatakan "dipentaskan" dan akan dimasukkan dalam "komit" berikutnya. Komit adalah cuplikan dari karya Anda yang dibuat misalnya dengan git commit -m "I wrote something".
Jonatan Öström
11
Git sulit dimengerti karena tidak ada tutorial konseptual di luar sana. Semua melewati detail yang tidak perlu.
Xaqron
2
Apakah Anda bermaksud menghapus tag "terminologi" dari pertanyaan ini? Tampaknya ini adalah tag yang benar-benar valid bagi saya.
Philip Kendall
Untuk beberapa alasan, cara terbaik yang saya bisa memahami pentingnya pementasan adalah dari jawaban ini di Quora: qr.ae/TbSK2I
Lamar

Jawaban:

310

Untuk tahap file adalah hanya untuk mempersiapkannya dengan baik untuk komit. Git, dengan indeksnya memungkinkan Anda untuk melakukan hanya bagian tertentu dari perubahan yang telah Anda lakukan sejak komit terakhir. Katakanlah Anda sedang mengerjakan dua fitur - satu selesai, dan satu lagi masih perlu beberapa pekerjaan. Anda ingin membuat komit dan pulang (jam 5, akhirnya!) Tetapi tidak ingin mengkomit bagian dari fitur kedua, yang belum selesai. Anda menggelar bagian yang Anda tahu milik fitur pertama, dan melakukan. Sekarang komit Anda adalah proyek Anda dengan fitur pertama selesai, sementara yang kedua masih dalam proses dalam direktori kerja Anda.

Benteng
sumber
5
Penjelasan yang bagus. Perhatikan bahwa git, yang didistribusikan, jelas memungkinkan Anda untuk melakukan kedua fitur, karena komit bersifat lokal (pada awalnya). Namun, Anda mungkin ingin membagi modifikasi menjadi satu komit per fitur, dan lagi pementasan berguna.
sleske
77
Saya tidak mengerti mengapa Anda perlu pementasan untuk ini. Saya dapat melakukan ini dengan HG atau bahkan SVN dengan hanya melakukan file yang relevan. Sepertinya fitur ini terutama dirancang untuk membantu orang yang bersikeras bekerja dengan baris perintah di mana lebih sulit untuk memeriksa kotak pada apa yang Anda lakukan.
jiggy
78
@ jiggy git memungkinkan Anda untuk melakukan tahap bagian dari file. Anda juga dapat membuat file, membuat modifikasi lebih lanjut, lalu mengkomit statusnya saat pementasan. Anda tidak dapat melakukannya dalam subversi.
Izkata
4
@jiggy Dalam SVN, ada sesuatu, antara waktu Anda memilih file / bagian file yang akan dikomit dan ketika Anda selesai menulis pesan komit Anda, yang mencatat file / bagian mana yang Anda pilih untuk komit. Mungkin tidak pernah disebutkan secara eksplisit, mungkin diimplementasikan dalam klien SVN daripada bagian aktual dari repositori, mungkin hanya beberapa flag dalam memori, tetapi itu adalah tahap SVN. Saya belum melihat HG, tapi saya curiga itu melakukan hal yang sama. Perbedaannya dengan git adalah bahwa git mengakui bahwa itu adalah sesuatu, merekamnya ke disk, dan memungkinkan pengguna untuk mendapatkannya secara langsung.
8bittree,
7
Panah kedua "file stage" pada gambar mungkin menyesatkan. "stage hunks" mungkin lebih akurat?
Ida
137

Karena semua orang sejauh ini telah menjawabnya dengan cara "formal", izinkan saya melakukan ini dengan alternatif untuk meningkatkan pembelajaran dengan kekuatan metafora.

Jadi area pementasannya seperti:

  • cache file yang ingin Anda komit
  • bukan serangkaian tabung tetapi sebenarnya dump truck, siap untuk memindahkan pekerjaan Anda memuatnya, ke repositori
  • tempat ajaib di mana file yang dipilih akan diubah menjadi batu dengan sihir Anda dan dapat secara ajaib diangkut ke repositori sesuai keinginan Anda
  • jalan bata kuning untuk file untuk pergi dengan senang ke repositori (atau jatuh jika Anda ingin kembali)
  • tempat fiksi di pelabuhan laut di mana file diterima sepasang sepatu semen dan kemudian dibuang ke laut repositori
  • di meja resepsi di perpustakaan, Anda meletakkan file-file di sana untuk pustakawan untuk mempersiapkan pengarsipan ke perpustakaan
  • sebuah kotak tempat Anda meletakkan barang-barang sebelum mendorongnya di bawah tempat tidur Anda, di mana tempat tidur Anda adalah gudang dari kotak-kotak yang sebelumnya telah Anda masukkan
  • ruang pemuatan file sebelum masuk ke gudang repositori dengan pemuat daya
  • filter pembuat kopi tetes listrik, jika file-file tersebut seperti bubuk kopi, maka file yang dikomit adalah kopi yang diseduh
  • kantor Scrooge McDuck di sebelah lemari besi, file-file itu seperti koin sebelum mereka masuk ke dalam brankas Bin Uang besarnya
  • toko hewan peliharaan, begitu Anda membawa pulang hewan peliharaan, Anda berkomitmen

Ini ajaib !

Spoike
sumber
Cinta analoginya; cara untuk pergi bud ^ _ ^
Musa Al-hassy
Cinta analogi terakhir.
meTchaikovsky
35

Pementasan adalah langkah sebelum proses komit di git. Yaitu, komit di git dilakukan dalam dua langkah: staging dan commit aktual

Selama changeset berada di area pementasan, git memungkinkan Anda untuk mengeditnya sesuka Anda (ganti file yang dipentaskan dengan versi lain dari file yang dipentaskan, hapus perubahan dari pementasan, dll.).

Waktu metafora yang rusak:

Pertimbangkan sebuah skenario di mana Anda memanggil penggerak untuk mendapatkan barang-barang Anda dari apartemen lama Anda ke apartemen baru Anda. Sebelum Anda melakukan itu, Anda akan memeriksa barang-barang Anda, memutuskan apa yang Anda bawa dan apa yang Anda buang, bungkus dalam tas dan tinggalkan di lorong utama. Penggerak hanya datang, mengambil tas (sudah dikemas) dari lorong dan mengangkutnya. Dalam contoh ini, semuanya sampai penggerak mendapatkan barang-barang Anda, adalah pementasan: Anda memutuskan apa yang pergi ke mana, bagaimana mengemasnya dan sebagainya (misalnya Anda dapat memutuskan bahwa setengah barang Anda akan dibuang sebelum penggerak bahkan sampai di sana - itu bagian pementasan).

Dari sudut pandang teknis, pementasan juga mendukung komitmen transaksional, dengan memecah semua operasi menjadi apa yang bisa gagal (pementasan) dan apa yang tidak bisa gagal (komit):

Komit dalam git diimplementasikan secara transaksi, setelah pementasan berhasil. Beberapa langkah dalam pementasan dapat gagal (misalnya, Anda perlu komit, tetapi HDD Anda 99,9999% penuh, dan git tidak memiliki ruang untuk melakukan komit). Ini akan gagal dalam pementasan (repositori Anda tidak akan rusak oleh komit parsial) dan proses pementasan tidak memengaruhi riwayat komit Anda (itu tidak merusak repositori Anda jika terjadi kesalahan).

utnapistim
sumber
... dan begitu sedikit suara sejauh ini.
ojonugwa ochalifu
26

Untuk tahap file adalah untuk mempersiapkannya untuk komit. Karena git memaparkan tindakan ini ke kontrol pengguna, itu memungkinkan Anda untuk membuat sebagian komitmen, atau untuk memodifikasi file, tahapan itu, memodifikasinya lagi, dan hanya melakukan atau mengembalikan ke modifikasi asli.

Staging memungkinkan Anda mengontrol lebih baik bagaimana Anda ingin mendekati kontrol versi.

Josh K.
sumber
19

Untuk menambah jawaban luar biasa lainnya, dari sinilah nama "panggung" berasal:

Saya memeriksa kamus untuk arti panggung dan tidak ada artinya terkait dengan konsep kontrol sumber.

Dalam bahasa Inggris, "ke panggung" bisa berarti

mengorganisir dan berpartisipasi dalam (acara publik): Pendukung UDF mengadakan demonstrasi di Sofia

(dari http://oxforddictionaries.com/definition/stage )

Nama "staging" untuk fitur git berasal dari makna ini: Ketika staging, Anda sedang mempersiapkan dan mengatur sebuah komit. Tentu saja komit tidak persis sama dengan kinerja, tetapi itu adalah peristiwa penting dalam VCS :-).

sleske
sumber
3
Saya akan berpikir itu lebih cocok dengan penggunaan dalam pementasan pos
berguna
Dito. Juga, "suatu titik, periode, atau langkah dalam suatu proses atau pengembangan."
Darien
Juga 'staging server' adalah istilah yang cukup umum digunakan untuk menggambarkan server yang berada di antara pengembangan dan produksi.
Eternal21
4

Dengan sebagian besar sistem kontrol versi lainnya, ada 2 tempat untuk menyimpan data: copy pekerjaan Anda (folder / file yang saat ini Anda gunakan) dan datastore (di mana kontrol versi memutuskan bagaimana mengemas dan menyimpan perubahan Anda). Di Git ada opsi ketiga: area pementasan (atau indeks). Ini pada dasarnya memuat dok di mana Anda bisa menentukan perubahan apa yang dikirim.

sumber: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Mostafiz Rahman
sumber
1
ini sepertinya tidak menambahkan sesuatu yang substansial di atas 6 jawaban sebelumnya
agas
Itu menyebutkan Indeks. Dan referensi untuk artikel yang sangat teliti. Upvoting. BTW, beberapa jawaban di atas hanyalah lelucon.
Gangnus
1

"Tahap" adalah langkah menengah yang diperlukan secara teknis dalam proses memeriksa file, yaitu mengumpulkan perubahan yang akan ditambahkan ke repositori. Penulis Git memilih untuk membuat langkah ini terlihat dan gigih di mana VCS lainnya menjadikannya bagian sementara dari proses komit. Jadi itu hanya opsi yang git berikan padamu karena bisa jadi kenapa tidak?

Cara saya melihatnya, hal utama git "stage" memberi Anda bahwa VCS lain tidak lakukan adalah Anda dapat menggunakannya untuk memeriksa file. Secara efektif ini adalah komit lokal tanpa nama yang tanpa komentar yang memberi Anda langkah menengah antara menyelesaikan semua pekerjaan Anda dan menyerahkannya ke repositori secara permanen dan tidak menyimpan apa pun di repo lokal Anda sama sekali.

Sebagai contoh, katakanlah Anda memiliki sebagian fitur selesai. Ini dalam keadaan stabil, lulus semua tes, dan bisa masuk ke produksi, tetapi Anda memiliki lebih banyak pekerjaan untuk dilakukan. Anda dapat mengatur semua perubahan Anda dan kemudian terus bekerja pada fitur.

Kemudian, Anda akan memiliki opsi untuk hanya melakukan apa yang Anda staged (dan mendorong komit itu ke repositori jarak jauh) atau untuk menambahkan perubahan baru Anda ke area pementasan Anda dan kemudian melakukan itu sekaligus, atau untuk membatalkan hanya perubahan baru Anda dan kembalikan direktori kerja Anda ke status saat Anda melakukan perubahan.

Sangat mungkin untuk melewatkan area pementasan secara praktis dan hanya menggunakan -aopsi untuk git commitjika Anda tidak menemukan area pementasan konsep yang bermanfaat. Banyak orang melewatkan pementasan dan alat GUI biasanya memungkinkan untuk ini juga.

Pro tua
sumber
"VCS lain tidak" - apa yang membuatmu berpikir begitu? Shelving at Perforce tampaknya melakukan apa yang Anda gambarkan, dan bahkan dengan beberapa lonceng dan peluit tambahan
nyamuk
1
@gnat ya, tentu saja banyak VCS lain memberi Anda sesuatu seperti pementasan. Dengan "VCS lain" Maksud saya VCS lain yang tidak memiliki tahap git, karena itulah yang dimaksud OP.
Old Pro
Saya menemukan jawaban ini jauh lebih baik daripada semua yang di atas, karena itu satu-satunya yang menjelaskan mengapa Pementasan ada sama sekali (secara teknis diperlukan ), penjelasan tentang asal-usulnya ( penulis Git memilih untuk membuat langkah ini terlihat dan gigih ), menambahkan apa yang secara pribadi saya temukan sebagai definisi yang baik untuk itu ( komitmen lokal perantara, tanpa nama, tanpa komentar ). Namun, saya pikir ini dapat ditingkatkan dengan mengutip sumber untuk pernyataan tentang asal-usul Staging, dan menguraikan lebih lanjut tentang mengapa itu diperlukan secara teknis . @OldPro
alexlomba87
-1

Pemahaman saya adalah, misalkan saya sedang mengembangkan fitur login dan diperlukan 5 langkah berturut-turut untuk menyelesaikan. Jadi di sini pementasan akan membantu Anda untuk mengerjakan langkah-langkah seperti
dilakukan dengan langkah 1 tahap itu.
dilakukan dengan langkah 2, sekarang langkah 1 dan langkah 2 keduanya sudah benar tahapannya.
mengacaukan dengan langkah 3 tidak ada masalah checkout langkah bertahap terbaru yaitu langkah 2
cara yang sama setelah Anda selesai dengan semua 5 langkah yang berarti fitur selesai sekarang melakukan komit.

palash140
sumber
ini sepertinya tidak menambah sesuatu yang substansial pada poin yang dibuat dan dijelaskan dalam 9 jawaban sebelumnya
agas
ya Anda benar, saya hanya mencoba membuat penjelasan sederhana dan manis
palash140
Dan apa yang saya rasakan untuk menggunakan konsep ini secara praktis saya mencoba menjelaskannya
palash140
pertimbangkan untuk melihat diskusi di sini: Apakah TL kedua; Jawaban DR dapat diterima? (FWIW dibandingkan dengan jawaban sebelumnya, yang ini tidak terlihat sederhana atau manis untuk saya)
agas
terima kasih pak, saya punya pertanyaan untuk ditanyakan. Saya telah menemukan banyak jawaban dan kebanyakan dari mereka terlalu kompleks ya itu benar tetapi sulit dicerna sekaligus, saya percaya jika Anda tidak dapat menjelaskan sesuatu dengan cara sederhana maka Anda belum mempelajarinya dengan baik atau tidak tahu bagaimana caranya. untuk menggunakannya. Jadi apakah sekarang buruk untuk menempatkan ringkasan atau cara sederhana untuk menjawab ??
palash140