Seperti banyak orang, saya mengelola banyak dotfile saya melalui repositori kontrol versi (Mercurial on Bitbucket, pribadi, dalam kasus saya). Ini berguna saat menyiapkan mesin baru atau menyebarkan konfigurasi di antara mesin yang berbeda.
Jadi secara alami saya menambahkan saya .emacs
dan .emacs.d
ke pengaturan ini.
Kemudian saya menginstal beberapa paket, dan akhirnya menambahkan *.elc
ke saya .hgignore
, sama seperti saya menghilangkan *.pyc
file dari repositori Python saya.
Apakah ada hal lain yang tidak boleh saya lacak, misalnya file yang dibuat yang khusus untuk lingkungan dan tidak akan berguna / benar ketika dikloning ke platform lain? (Saya menggunakan Linux dan OS X di desktop, dan FreeBSD di server.)
Apakah ada trik pengaturan yang biasa digunakan untuk membuat berbagi jenis ini lebih berharga? Dengan setup file shell saya, saya masih mencari cara yang baik untuk memilih file individu di cabang misalnya.
sumber
*.elc
. stackoverflow.com/a/24539894/324105Jawaban:
Saya menyimpan konfigurasi Emacs saya di Github karena saya menggunakan dua komputer yang berbeda, satu di tempat kerja, satu di rumah.
Berikut adalah daftar tentang hal-hal yang tidak saya masukkan ke dalam kendali sumber:
Pengaturan yang ditentukan lingkungan.
Sebagai contoh, Emacs saya membuka file org yang berbeda saat start-up di mesin yang berbeda. Anda tidak ingin mengkomit pengaturan ini ke dalam kontrol sumber.
Saya gunakan
(require 'local nil t)
untuk memuat pengaturan ini, tetapi tidak pernah melakukanlocal.el
.Paket yang dikelola oleh manajer paket
Ketika paket dikelola oleh manajer paket, saya sarankan untuk tidak menempatkan paket-paket itu ke dalam kontrol sumber. Karena:
Alih-alih melakukan paket, saya sarankan Anda melakukan mekanisme yang diakui oleh manajer paket Anda.
Sebagai contoh, saya menggunakan Tong untuk mengelola paket ke-3 saya, jadi saya hanya mengkomit file tong, yang berisi paket-paket tertentu yang saya inginkan.
Ketika saya gunakan
package.el
sebelumnya, konfigurasi saya akan memeriksa apakah paket diinstal / perlu diperbarui, jadi tidak ada paket yang dilakukan.Namun , ada beberapa paket yang tidak ada di repositori paket mana pun, dalam hal ini, saya akan mengkomitnya ke kontrol sumber, seperti di
site-lisp
.Semua file yang dihasilkan oleh paket
Sebagai contoh, semua autosave, file-file backup,
tramp
,eshell
,recentf
, bahkancustom.el
. Saya memasukkan file-file ini ke dalam~/.emacs/.gen
, jadi saya bisa mengabaikan direktori ini.File yang sering berubah tetapi harus disinkronkan
Seperti file kamus pribadi yang digunakan oleh
aspell
, basis data file yang digunakan olehelfeed
, Dalam hal ini, saya menggunakan Dropbox untuk menyinkronkannya di komputer yang berbeda. Jadi saya tidak akan lupa untuk berkomitmen.sumber
prelude-require-packages
fungsinya berfungsi sebagai Tong orang miskin (dengan keuntungan juga bekerja dengan Windows).package-install
disebutkan dalam emacs.stackexchange.com/a/410/184 mungkin membantu juga.custom.el
ke dalam kontrol sumber.Pastikan tidak ada hal-hal yang dihasilkan (seperti catatan @ rangi-lin) dalam repo dan, jika Anda berbagi dotfile Anda dengan orang lain, tidak ada hal-hal keamanan terkait (seperti kata sandi dan kunci API). Untuk nanti saya telah membagi kustomisasi menjadi file terpisah dengan:
Kadang-kadang saya memindahkan kustomisasi "aman" ke
setq
pernyataan besar sebelum cuplikan di atas.File .gitignore saya terlihat seperti:
sumber
tl; dr
.emacs.d/init.el
sebagai ganti.emacs
.gitignore
putih Anda.emacs.d / init.el
Saya menggunakan
.emacs.d/init.el
bukannya.emacs
karena pengaturan ini memungkinkan saya untuk meletakkan di.emacs.d
bawah git. Setelah~/.emacs
membuat Anda membuat tautan simbolis ke repositori git atau memiliki repositori git di direktori home Anda. Jika Anda menggunakan.emacs.d
, semua sudah terpecahkan..gitignore
.Gitignore saya adalah daftar putih dan bukan daftar hitam standar.
Konfigurasi ini memungkinkan Anda untuk berkonsentrasi pada apa yang benar-benar Anda butuhkan daripada apa yang tidak Anda butuhkan.
.emacs.d
tidak seperti repositori kode sumber, yang berarti bahwa tidak hanya kode Anda berada tetapi juga semua file temporer yang dibuat secara otomatis atau lainnya ada di sana. Anda tidak benar-benar tahu apa yang akan masuk. Jadi, " abaikan semua secara default dan tambahkan file yang Anda pedulikan " adalah strategi yang lebih baik, IMO.BTW, saya menyimpan sebagian besar konfigurasi di
init.el
, daripada menggunakan skema multi-file. Alasannya adalah bahwa file besar memungkinkan saya untuk a) menggunakan alat standar sukaoccur
atauisearch-forward
untuk pindah ke konfigurasi yang saya inginkan, b) penggunaanoutshine
yang membuat sayainit.el
org-cycle
-able, c) tidak mengubah saya.gitignore
sepanjang waktu.Manajer Paket
Kecuali Anda memiliki kebutuhan khusus untuk menyinkronkan versi Emacs dan atau versi Paket di semua sistem Anda, jangan letakkan paket di bawah git.
Package.el
baik-baik saja.use-package
juga baik-baik saja. Tong itu bagus. Pilih manajer paket Anda dan lakukan hanya file konfigurasi Anda tetapi bukan paket itu sendiri.yaitu. Salah satu kebutuhan khusus yang dapat saya pikirkan adalah memiliki dua sistem, pengembangan dan penyebaran dan mereka harus memiliki konfigurasi Emacs yang persis sama.
sumber
init.el
file berfungsi selama file itu tidak terlalu besar. Emacs tidak pandai menangani file besar, dan setelah beberapa saat ia mulai merangkak saat mengedit besarinit.el
. Keuntungan lain dari memecah konfigurasi Anda ke beberapa file adalah bahwa mereka bermain lebih baik dengan git, yang dalam situasi tertentu dapat menganggap perubahan pada satu file sebagai konflik penggabungan, tetapi tidak demikian jika perubahan tersebut dalam file yang terpisah. Akhirnya, jauh lebih mudah untuk berkomentar hanya dengan satu kebutuhan daripada potongan besar file init Anda.Saya memiliki hal-hal berikut di .hgignore saya
Jika Anda ingin membagikan init Anda dengan orang lain, Anda dapat mempertimbangkan untuk menghapus file histori seperti yang dibuat oleh mode savehist. Selain itu saya tidak berpikir ada trik khusus untuk ini. Panduan apa pun yang Anda ikuti untuk proyek kode versi juga berfungsi dengan baik di sini.
sumber
Seiring waktu paket menambahkan banyak hal ke
~/.emacs
dan saya akhirnya menambahkan mereka satu per satu ke saya.gitignore
. Saya juga punyaprivate.el
yang berisi kata sandi, kode khusus mesin dll yang tidak saya lacak.Inilah yang saya miliki sekarang.
sumber
Itu tergantung pada paket / fitur yang Anda gunakan, sehingga bisa rumit. Di samping file yang disebutkan oleh Vamsi, misalnya, jika Anda menggunakan dired-immage, itu membuat direktori di sana untuk cache cache. Anda mungkin ingin mengabaikan file .elc juga.
sumber
Saya menerbitkan .emacs.d saya, tetapi menggunakan subrepo dengan perubahan pribadi (kata sandi dan semacamnya). Untuk memungkinkan orang lain untuk mengkloningnya, cabang default menunjuk ke subrepo placeholder, dan setiap mesin memiliki cabang bernama sendiri.
Saat menggabungkan antar mesin, saya pertama
graft
- tama mengubah baru kedefault
cabang dan kemudian menggabungkandefault
cabang ke cabang tempat kerja lainnya.Sebagai contoh, Anda dapat menemukan .emacs.d saya di bitbucket , termasuk readme dengan panduan penggunaan singkat.
Anda mungkin ingin menambahkan driver gabungan mode-org ke pengaturan ini.
sumber
Setelah beberapa iterasi, saya telah menentukan bahwa, sementara kontrol versi sangat bagus untuk berbagi kode dan melacak perubahan, itu bukan solusi yang bagus untuk menyinkronkan konfigurasi yang berubah dengan cepat di seluruh komputer. Alasannya adalah bahwa ada banyak hal yang harus disinkronkan dan tidak boleh di kontrol versi. Beberapa contoh:
.elc
file (mengkompilasi ulang mereka ketika ada perubahan konfigurasi adalah masalah besar, dan bug darielc
file yang sudah usang sering menyusahkan untuk debug).elpa
direktori (dan sampai versi-pinning menjadi standar, secara otomatis membangunnya kembali tidak cukup andal).eshell
riwayat dangnus
file.(Perhatikan bahwa masalah lintas-platform tidak ada dalam daftar - seharusnya tidak apa-apa untuk memiliki satu konfigurasi yang bekerja di beberapa sistem operasi.) Daripada menggunakan git sebagai solusi sinkronisasi, saya menggunakannya semata-mata sebagai solusi pelacakan kode dan sinkronisasi menggunakan Dropbox. Dengan begitu, semua file menjengkelkan yang seharusnya tidak ada dalam kontrol versi diurus.
Saya lakukan , bagaimanapun, memiliki tujuan memiliki konfigurasi saya menjadi rebuildable dari sumber jika konfigurasi Dropbox saya menghilang karena alasan apapun, jadi saya melacak semua paket yang diinstal dan yang lainnya di sumber. Informasi pribadi saya disimpan dalam submission git juga. Tetapi untuk sinkronisasi sehari-hari, git bukanlah solusi yang bagus.
sumber