Bagaimana saya bisa memperbarui (menarik) proyek git dengan aman, menjaga file tertentu tidak tersentuh, bahkan jika ada perubahan di hulu?
myrepo / config / config.php
Apakah ada cara, dari, bahkan jika file ini sedang diubah pada jarak jauh, ketika saya git pull, semuanya diperbarui, tetapi file ini tidak berubah (bahkan tidak digabung)?
PS. Saya perlu melakukan apa yang saya minta karena saya hanya menulis skrip deploy berbasis git. Saya tidak dapat mengubah file konfigurasi ke template.
jadi, saya perlu cara untuk menulis skrip pembaruan yang tidak kehilangan apa yang diubah secara lokal. Saya berharap untuk sesuatu yang sederhana seperti:
git assume-remote-unchanged file1
git assume-remote-unchanged file2
kemudian git pull
config.php
dilakukan?Jawaban:
Ada solusi sederhana berdasarkan simpanan Git. Simpan semua yang telah Anda ubah, tarik semua barang baru, terapkan simpanan Anda.
Di stash pop mungkin ada konflik. Jika Anda jelaskan akan ada konflik untuk
config.php
. Tetapi, menyelesaikan konflik itu mudah karena Anda tahu bahwa apa yang Anda masukkan ke dalam simpanan adalah apa yang Anda inginkan. Jadi lakukan ini:sumber
git merge
'milik kita' adalah apa yang saat ini ada di direktori kerja. Tetapi untukgit rebase
(ataugit rebase -onto
) maknanya bisa ditukar.git stash , git pull , git stash apply
Anda dapat membatalkan simpanan dengan:git stash drop
Setelah berhasil menggabungkan perubahangit stash
.Jika Anda memiliki file dalam repo yang seharusnya dikustomisasi oleh sebagian besar penarik, maka ganti nama file tersebut menjadi sesuatu seperti
config.php.template
dan tambahkanconfig.php
ke file Anda.gitignore
.sumber
.gitattributes
untuk selalu menyimpan perubahan saat penggabungan.Perbarui: ini benar-benar menjawab pertanyaan yang diajukan, tetapi saya pikir jawaban KurzedMetal benar-benar yang Anda inginkan.
Berasumsi bahwa:
master
master
diorigin
.... kamu bisa melakukan:
Anda dapat membuat alias untuk itu jika Anda harus sering melakukannya. Perhatikan bahwa jika Anda memiliki perubahan tanpa komitmen
config/config.php
, ini akan membuangnya.sumber
Kita juga bisa mencoba git pull dengan rebase
sumber
Untuk menjawab pertanyaan: jika Anda ingin mengecualikan file checkout tertentu, Anda dapat menggunakan checkout jarang
1) Masuk
.git/info/sparse-checkout
, tentukan apa yang ingin Anda simpan. Di sini, kami ingin semua (*) tetapi (perhatikan tanda seru) config.php:2) Beri tahu git bahwa Anda ingin jarang melakukan checkout
3) Jika Anda sudah mendapatkan file ini secara lokal, lakukan apa yang dilakukan git pada checkout yang jarang (beri tahu ia harus mengecualikan file ini dengan mengatur flag "skip-worktree" di atasnya)
4) Nikmati repositori di mana file config.php Anda adalah milik Anda - perubahan apa pun yang ada di repositori.
Perhatikan bahwa, begitu file diambil oleh git, .gitignore tidak akan berpengaruh apa pun.
Karena itu, setelah file berada di bawah kendali sumber, Anda hanya memiliki dua pilihan (): - rebase semua riwayat Anda untuk menghapus file (dengan
git filter-branch
) - buat komit yang menghapus file. Ini seperti bertempur dalam pertempuran yang sulit, tetapi, yah, terkadang Anda harus hidup dengan itu.sumber
Jika ada perubahan lokal yang tidak dikomit dan hindari menggabungkan konflik saat menarik.
refer - https://happygitwithr.com/pull-tricky.html
sumber