GNU/Linux >> Belajar Linux >  >> Linux

Cara Membuat dan Menerapkan Patch di GIT menggunakan diff and apply Command

Membuat tambalan di GIT adalah cara yang bagus untuk membagikan perubahan yang belum siap Anda dorong ke publik cabang proyek.

Untuk lebih memahami bagaimana kita akan membuat patch, pertama-tama mari kita bahas sedikit tentang bagaimana GIT menyimpan perubahan.

Jika Anda baru mengenal GIT, instal git dan dapatkan permulaan dari artikel pengantar GIT ini.

Pertama kali file di-commit ke sebuah proyek di GIT, salinannya disimpan. Untuk semua komit setelah itu, GIT pada dasarnya menyimpan instruksi yang memberitahukannya cara mengubah versi proyek sebelumnya ke versi komit baru.

Dalam GIT, instruksi ini disebut “diffs” . Setiap kali Anda checkout cabang, GIT pada dasarnya akan mulai dari keadaan awal proyek, dan menerapkan semua perbedaan ini secara berurutan, untuk mencapai keadaan yang diinginkan.

Mengetahui bagaimana GIT menyimpan commit, mudah untuk melihat bahwa file patch hanya akan menjadi gabungan dari diff untuk setiap commit yang akan direntang oleh patch.

Sebagai contoh, mari kita asumsikan situasi berikut:Kami memiliki proyek sederhana dengan 2 cabang:master dan eksperimental.

$ git log --oneline --all
  * b36f227 (experimental) third commit -- added file3
  * f39ebe8 second commit -- added file2
  * 04a26e5 (HEAD, master) first commit -- committed file1

Master saat ini berada di komit pertama, sementara eksperimental adalah 2 komit di depannya. Di setiap komit, saya menambahkan file bernama file1, file2, dan file3 masing-masing. Berikut adalah status masing-masing cabang saat ini:

Di master, kami hanya memiliki file1:

$ git status
On branch master
nothing to commit, working directory clean

$ ls
file1

Saat eksperimental, kami memiliki 3 file:

$ git status
On branch experimental
nothing to commit, working directory clean

$ ls
file1 file2 file3

Dalam tutorial ini, kami akan menjelaskan cara membuat tambalan perubahan pada cabang eksperimental dan menerapkannya ke master.

Membuat Patch GIT

Kami akan menggunakan perintah git diff untuk membuat output diff, lalu mengarahkannya ke file. Bentuk perintah diff yang akan kita gunakan adalah sebagai berikut:

git diff from-commit to-commit > output-file

dimana:

  • from-commit – titik di mana kita ingin patch dimulai. (Dalam kasus kami, titik di mana eksperimen menyimpang dari master)
  • untuk-komit – tambalan akan mencakup perubahan hingga dan termasuk titik ini. (Dalam kasus kami, komit eksperimental terbaru)
  • output-file – patch akan ditulis di sini

Catatan:jika from-commit atau to-commit dihilangkan, mereka akan dianggap sebagai HEAD

Kami menentukan dua komit dengan hash unik mereka. Umumnya, Anda hanya perlu menentukan hash komit yang cukup untuk memastikan keunikannya (4 karakter mungkin akan melakukannya).

$ git diff 04a2 b36f > patch.diff

$ ls
patch.diff file1      file2      file3

Seperti yang Anda lihat dari output di atas, file patch telah dibuat.

Dalam kasus khusus ini, di mana kita ingin membuat tambalan dari seluruh cabang, kita dapat membiarkan GIT melakukan beberapa pekerjaan untuk kita. Kita dapat membiarkan GIT menentukan titik di mana cabang eksperimental kita menyimpang dari cabang master menggunakan perintah git merge-base:

git diff $(git merge-base <public branch> <experimental branch>) > <output file>

git merge-base akan menentukan komit umum terbaru antara 2 cabang. Perhatikan juga bagaimana kali ini kita telah menghilangkannya. Ini akan ditetapkan secara default ke HEAD, dan karena cabang eksperimental diperiksa, HEAD akan menjadi komit terbaru dari cabang eksperimental.

$ git diff $(git merge-base master experimental) > anotherPatch.diff

$ ls
anotherPatch.diff patch.diff  file1  file2  file3

Sekali lagi, file patch telah dibuat. File tambalan ini identik.

Menerapkan Patch GIT

Setelah file tambalan dibuat, penerapannya mudah. Pastikan cabang yang Anda periksa adalah cabang yang ingin Anda terapkan tambalannya (master dalam kasus kami). Kemudian Anda dapat menerapkan tambalan menggunakan perintah git apply:git apply

$ git status
On branch master
... (rest of output omitted) ...

$ ls
anotherPatch.diff patch.diff  file1

$ git apply patch.diff

$ ls
anotherPatch.diff patch.diff  file1  file2  file3

Perubahan dari cabang eksperimental kini telah direplikasi di master.

Peringatan:Meskipun menerapkan tambalan dengan cara ini akan benar-benar mereplikasi konten, tidak ada riwayat komit yang akan direplikasi. Ini berarti bahwa bahkan jika tambalan yang Anda buat mencakup beberapa komit, itu akan muncul sebagai satu set perubahan saat diterapkan. Anda akan kehilangan pengetahuan tentang bagaimana komit dipecah dan juga pesan untuk setiap komit. Mari kita bandingkan riwayat komit untuk kedua cabang:

Pada percobaan, kami memiliki 3 komit, masing-masing dengan pesan komit yang bermakna.

$ git branch
  * experimental
    master
$ git log --oneline
  b36f227 third commit -- added file3
  f39ebe8 second commit -- added file2
  04a26e5 first commit -- committed file1

Namun, tambalan kami hanya menerapkan perubahan aktual ke cabang master.

$ git branch
  experimental
  * master
$ git log --oneline
  04a26e5 first commit -- committed file1

Menerapkan tambalan tidak melakukan perubahan, juga tidak membawa riwayat komit yang terkait dengan perubahan ini. Berhati-hatilah saat menggunakan tambalan di GIT.


Linux
  1. Cara Membuat dan Menerapkan Patch di GIT menggunakan diff and apply Command

  2. Cara Membuat Snapshot Sistem File menggunakan Perintah Snapper di Linux

  3. Cara membuat direktori dan memberikan izin dalam satu perintah

  1. Bagaimana melakukan perbandingan file baris demi baris di Linux menggunakan perintah diff

  2. Cara Membuat Database di MySQL Menggunakan Command Line

  3. Bagaimana cara membuat dan menerapkan tambalan SVN?

  1. Cara Membuat Alias ​​​​dan Menggunakan Perintah Alias ​​​​di Linux

  2. Cara Membuat Drive USB yang Dapat Di-boot Menggunakan Perintah dd

  3. 7 Contoh Perintah Patch untuk Menerapkan File Patch Diff di Linux