Apakah mungkin untuk memasukkan file dalam .gitconfig Anda

245

Saya ingin memasukkan file dalam .gitconfig saya yang memiliki pengaturan github saya - apakah ini mungkin?

Dapatkah saya melakukan sesuatu seperti ini:

[core]
    include = /path/to/file
David Reynolds
sumber
3
"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:

  1. Ekspansi variabel lingkungan, misalnya $HOME, tidak didukung. (Perluasan ~muncul di Git 1.7.10.2.)

  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.

  3. Jika git tidak dapat menemukan file target, ia diam-diam mengabaikan kesalahan. Ini tampaknya dirancang.

Mike Morearty
sumber
7
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).
Franklin Yu
16

Pembaruan 2012:

Lihat Mike Morearty 's jawabannya :

Termasuk

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.


Saya kira tidak.

Saya lebih suka meletakkan pengaturan itu di ~/.gitconfigfile

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 .


bjeanes menambahkan dalam komentar:

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.

teks alternatif

Dalam .gitattributes(atau .git/info/a..) digunakan:

myPrivateInfosFile filter=gpg diff=gpg

Dalam file .config repo Anda:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

( 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.

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 )

VonC
sumber
5
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.
David Reynolds
10

Anda dapat memuatnya dari baris perintah:

$ git config --local include.path "/path/to/.gitconfig"

Gunakan "$PWD"/.gitconfigsebaliknya, jika Anda ingin memuat file dari direktori saat ini.

Setelah menjalankan perintah di atas, baris berikut ditambahkan ke .git/configfile Anda :

[include]
        path = /path/to/.gitconfig
kenorb
sumber
2

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.

Geoff Lanotte
sumber