"Saya tidak ingin memasukkan perincian github di dalamnya, karenanya mengapa saya ingin memasukkannya dari file eksternal": itulah tepatnya file konfigurasi global. Apakah ada alasan untuk tidak menggunakannya dalam kasus Anda?
VonC
11
Ya, karena saya ingin menerbitkan .gitconfig dalam repositori git dan saya tidak ingin seseorang mencuri kredensial github saya.
David Reynolds
Saya tidak mengikuti Anda: file gitconfig biasa Anda akan dipublikasikan ke github, tetapi tanpa pengaturan github. Mengapa? Karena itu akan ada di file konfigurasi global Anda ( ~/.gitconfig), yaitu tidak didorong ke repo github Anda. Ketika Anda mengetikkan ' git config', apa yang Anda lihat adalah gabungan dari 3 file konfigurasi (repo, global dan sistem). Hanya file konfigurasi repo yang didorong. 2 lainnya tetap lokal.
VonC
90
sepertinya semua orang melewatkan inti pertanyaan ini. David jelas ingin mendorong repo semua file dot-nya (bashrc, gemrc, dll.) TERMASUK .gitconfig-nya sehingga ia dapat memiliki semua pengaturannya di semua mesinnya. Cara untuk mendorong bagian-bagian dari file .gitconfig dengan memasukkan dan mengabaikan entri pribadi adalah apa yang dia (dan saya, dalam hal ini) adalah setelah
Bo Jeanes
5
@bjeanes: tepatnya! Saya masih belum menemukan cara untuk melakukannya.
David Reynolds
Jawaban:
302
Git (1.7.10+) sekarang mendukung sintaks ini di .gitconfig:
[include]
path = /path/to/file
Lihat di sini untuk penjelasan terperinci tentang perubahan git dan penutupnya.
Ngomong-ngomong, beberapa kehalusan patut ditunjukkan:
Ekspansi variabel lingkungan, misalnya $HOME, tidak didukung. (Perluasan ~muncul di Git 1.7.10.2.)
Jika path relatif ditentukan, maka itu relatif terhadap file .gitconfig yang memiliki [include]pernyataan. Ini berfungsi dengan benar bahkan di seluruh rantai yang dirantai termasuk - misalnya ~/.gitconfigdapat:
[include]
path = subdir/gitconfig
dan subdir/gitconfigdapat memiliki:
[include]
path = nested_subdir/gitconfig
... yang akan menyebabkan subdir/nested_subdir/gitconfigdimuat.
Jika git tidak dapat menemukan file target, ia diam-diam mengabaikan kesalahan. Ini tampaknya dirancang.
sebenarnya kamu tidak perlu ~. ini karena file .gitconfig Anda masih harus berada di ~/.gitconfigjalur relatif di konfigurasi akan menyiratkan ~...
robustus
2
The ~/ $HOMEekspansi sebenarnya pada git describe --contains 4c0a89fc-> v1.7.10.2~12^2(yaitu v1.7.10.2atau lambat), terkenal karena tampaknya Debian 7 dan Ubuntu quantal akan merilis dengan v1.7.10.4.
FauxFaux
1
Apakah ini mendukung gumpalan? misal path = ~ / gitconfig.d / *?
Bret
1
@Bret tidak, ini tidak mendukung gumpalan.
Mike Morearty
8
Perhatikan bahwa konfigurasi yang disertakan dengan cara ini tidak akan ditampilkan ketika file tertentu diberikan (yaitu, dengan --global, --localatau --file), kecuali jika diberitahukan secara eksplisit dengan --includes(seperti git config --global --includes --list).
Anda dapat memasukkan satu file konfigurasi dari yang lain dengan mengatur include.pathvariabel khusus ke nama file yang akan disertakan.
File yang dimasukkan segera diperluas, seolah-olah isinya telah ditemukan di lokasi arahan include.
Jika nilai include.pathvariabel adalah jalur relatif, jalur tersebut dianggap relatif terhadap file konfigurasi tempat direktif sertakan ditemukan.
Nilai include.pathtunduk pada ekspansi tilde: ~/diperluas ke nilai $HOME, dan ~user/ke direktori home pengguna yang ditentukan.
File konfigurasi khusus pengguna. Juga disebut file konfigurasi "global".
Dengan begitu, ia melengkapi file spesifik proyek .gitconfig, tanpa dipublikasikan ketika didorong ke GitHub. Lihat juga jawaban SO ini untuk informasi lebih lanjut tentang file konfigurasi global.
Git memiliki 3 file konfigurasi .
sepertinya semua orang melewatkan inti pertanyaan ini.
David jelas ingin mendorong repo dari semua file dot-nya ( bashrc, gemrc, dll) TERMASUK nya .gitconfigsehingga ia dapat memiliki semua pengaturan nya pada semua mesin nya.
Cara untuk mendorong bagian .gitconfigfile dengan memasukkan dan mengabaikan entri pribadi adalah apa yang dia (dan saya, dalam hal ini) cari.
Cara yang mungkin adalah dengan menggunakan driver filter smudge / clean untuk mendekripsi / mengenkripsi satu file dengan informasi sensitif pribadi (lihat utas ini ), untuk melengkapi file lokal seperti ~ / .gitconfig dengan bagian yang didekripsi yang relevan dengan itu mengajukan.
Dengan begitu Anda dapat memiliki repo Git dengan semua file dot Anda, ditambah satu file dengan informasi terenkripsi yang dimaksudkan untuk didekripsi dan ditambahkan ke file dot tersebut.
Dalam .gitattributes(atau .git/info/a..) digunakan:
( solusi berbasis GPG berarti, tentu saja, Anda telah mengkomunikasikan kunci privat / publik Anda dengan cara lain ke komputer tujuan di mana Anda ingin mengembalikan semua file titik Anda dengan mengkloning repo khusus ini)
Sebenarnya, dalam kasus Anda, skrip smudge perlu diselesaikan sebagaimana mestinya, setelah mendekripsi file itu, pergi dan tambahkan bagian yang relevan ke ~/.gitconfigfile global Anda (kecuali Anda menimpa file konfigurasi global dengan lokasi lain ) atau file dot lainnya untuk itu masalah.
Saya ingin menerbitkan file .gitconfig dasar saya di repositori git, tetapi saya tidak ingin memasukkan detail github di dalamnya, karena itu mengapa saya ingin memasukkannya dari file eksternal.
Saya yakin Anda dapat melakukannya menggunakan alat hub defunkt . Ini adalah pembungkus untuk perintah git yang antara lain memungkinkan Anda untuk memiliki GITHUB_USERdan GITHUB_TOKENvariabel lingkungan. Yang akan menimpa pengaturan di lokal.gitconfig file .
Kemudian untuk membuatnya mulus pengguna yang Anda tunjuk alias alias git=hubdalam konfigurasi ZSH- nya . Anda harus dapat kemudian sumber file lokal di mana Anda mengatur variabel lingkungan Anda dan mendorong repositori Anda ke dunia publik dengan semua informasi pribadi Anda dalam kebijaksanaan.
** CATATAN untuk pengguna rumahan di OSX, Anda dapat menginstal alat melalui brew install hub.
~/.gitconfig
), yaitu tidak didorong ke repo github Anda. Ketika Anda mengetikkan 'git config
', apa yang Anda lihat adalah gabungan dari 3 file konfigurasi (repo, global dan sistem). Hanya file konfigurasi repo yang didorong. 2 lainnya tetap lokal.Jawaban:
Git (1.7.10+) sekarang mendukung sintaks ini di
.gitconfig
:Lihat di sini untuk penjelasan terperinci tentang perubahan git dan penutupnya.
Ngomong-ngomong, beberapa kehalusan patut ditunjukkan:
Ekspansi variabel lingkungan, misalnya
$HOME
, tidak didukung. (Perluasan~
muncul di Git 1.7.10.2.)Jika path relatif ditentukan, maka itu relatif terhadap file .gitconfig yang memiliki
[include]
pernyataan. Ini berfungsi dengan benar bahkan di seluruh rantai yang dirantai termasuk - misalnya~/.gitconfig
dapat:dan
subdir/gitconfig
dapat memiliki:... yang akan menyebabkan
subdir/nested_subdir/gitconfig
dimuat.Jika git tidak dapat menemukan file target, ia diam-diam mengabaikan kesalahan. Ini tampaknya dirancang.
sumber
~
. ini karena file .gitconfig Anda masih harus berada di~/.gitconfig
jalur relatif di konfigurasi akan menyiratkan~
...~
/$HOME
ekspansi sebenarnya padagit describe --contains 4c0a89fc
->v1.7.10.2~12^2
(yaituv1.7.10.2
atau lambat), terkenal karena tampaknya Debian 7 dan Ubuntu quantal akan merilis denganv1.7.10.4
.--global
,--local
atau--file
), kecuali jika diberitahukan secara eksplisit dengan--includes
(sepertigit config --global --includes --list
).Pembaruan 2012:
Lihat Mike Morearty 's jawabannya :
Termasuk
Saya kira tidak.
Saya lebih suka meletakkan pengaturan itu di
~/.gitconfig
fileDengan begitu, ia melengkapi file spesifik proyek .gitconfig, tanpa dipublikasikan ketika didorong ke GitHub. Lihat juga jawaban SO ini untuk informasi lebih lanjut tentang file konfigurasi global.
Git memiliki 3 file konfigurasi .
bjeanes menambahkan dalam komentar:
Cara yang mungkin adalah dengan menggunakan driver filter smudge / clean untuk mendekripsi / mengenkripsi satu file dengan informasi sensitif pribadi (lihat utas ini ), untuk melengkapi file lokal seperti ~ / .gitconfig dengan bagian yang didekripsi yang relevan dengan itu mengajukan.
Dengan begitu Anda dapat memiliki repo Git dengan semua file dot Anda, ditambah satu file dengan informasi terenkripsi yang dimaksudkan untuk didekripsi dan ditambahkan ke file dot tersebut.
Dalam
.gitattributes
(atau.git/info/a..
) digunakan:Dalam file .config repo Anda:
( solusi berbasis GPG berarti, tentu saja, Anda telah mengkomunikasikan kunci privat / publik Anda dengan cara lain ke komputer tujuan di mana Anda ingin mengembalikan semua file titik Anda dengan mengkloning repo khusus ini)
Sebenarnya, dalam kasus Anda, skrip smudge perlu diselesaikan sebagaimana mestinya, setelah mendekripsi file itu, pergi dan tambahkan bagian yang relevan ke
~/.gitconfig
file global Anda (kecuali Anda menimpa file konfigurasi global dengan lokasi lain ) atau file dot lainnya untuk itu masalah.https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (ketidaknyamanan gpg dibahas lebih lanjut di utas ini ) (ini berbeda dengan memiliki repo Git terenkripsi penuh, seperti yang dibahas di sini )
sumber
Anda dapat memuatnya dari baris perintah:
Gunakan
"$PWD"/.gitconfig
sebaliknya, jika Anda ingin memuat file dari direktori saat ini.Setelah menjalankan perintah di atas, baris berikut ditambahkan ke
.git/config
file Anda :sumber
Saya yakin Anda dapat melakukannya menggunakan alat hub defunkt . Ini adalah pembungkus untuk perintah git yang antara lain memungkinkan Anda untuk memiliki
GITHUB_USER
danGITHUB_TOKEN
variabel lingkungan. Yang akan menimpa pengaturan di lokal.gitconfig
file .Kemudian untuk membuatnya mulus pengguna yang Anda tunjuk alias
alias git=hub
dalam konfigurasi ZSH- nya . Anda harus dapat kemudian sumber file lokal di mana Anda mengatur variabel lingkungan Anda dan mendorong repositori Anda ke dunia publik dengan semua informasi pribadi Anda dalam kebijaksanaan.** CATATAN untuk pengguna rumahan di OSX, Anda dapat menginstal alat melalui
brew install hub
.sumber