.Gitconfig dosyasına bir dosya eklemek mümkün mü


245

.Gitconfig dosyasına github ayarlarımı içeren bir dosya eklemek istiyorum - bu mümkün mü?

Böyle bir şey yapabilir miyim:

[core]
    include = /path/to/file

3
"Github ayrıntılarını içine dahil etmek istemiyorum, bu yüzden onları neden bir şekilde harici bir dosyadan dahil etmek istiyorum": tam olarak global yapılandırma dosyası bunun içindir. Sizin durumunuzda kullanmamanız için herhangi bir neden var mı?
VonC

11
Evet, çünkü .gitconfig dosyasını git deposunda yayınlamak istiyorum ve birisinin github kimlik bilgilerimi çalmasını istemiyorum.
David Reynolds

Sizi takip etmiyorum: normal gitconfig dosyanız github'a yayınlanacak, ancak github ayarları olmadan yayınlanacaktır . Neden? Çünkü bunlar global yapılandırma dosyanızda ( ~/.gitconfig) olacak, yani github deponuza aktarılamayacak. ' ' Yazdığınızda gördüğünüz şey 3 yapılandırma dosyasının (repo, global ve sistem) birleşimidir. Yalnızca repo yapılandırma dosyası aktarılır. Diğer 2 yerel kalır. git config
VonC

90
Görünüşe göre herkes bu sorunun anlamını kaçırdı. David, tüm nokta dosyalarının (bashrc, gemrc, vb.) Bir kopyasını yukarı itmek istiyor. Özel girişler ekleyerek ve yok sayarak bir .gitconfig dosyasının parçalarını zorlamanın bir yolu onun (ve ben bu konuda) peşinde olmasıdır
Bo Jeanes

5
@bjeanes: kesinlikle! Yine de bunu yapmanın bir yolunu bulamadım.
David Reynolds

Yanıtlar:


302

Git (1.7.10+) artık şu sözdizimini desteklemektedir.gitconfig :

[include]
    path = /path/to/file

Git değişikliğinin ve uç durumlarının ayrıntılı bir açıklaması için buraya bakın .

Bu arada, dikkat çekmeye değer birkaç incelik:

  1. Ortam değişkeni genişletmesi, örneğin $HOMEdesteklenmez. ( ~Git 1.7.10.2'de genişledi.)

  2. Göreli bir yol belirtilirse, [include]deyimi içeren .gitconfig dosyasına göredir . Bu, zincirleme kapsüller arasında bile doğru çalışır - örneğin ~/.gitconfig:

    [include]
        path = subdir/gitconfig
    

    ve sahip subdir/gitconfigolabilir:

    [include]
        path = nested_subdir/gitconfig
    

    ... subdir/nested_subdir/gitconfigyüklenmesine neden olacak .

  3. Git hedef dosyayı bulamazsa, hatayı sessizce yok sayar. Bunun tasarım gereği olduğu anlaşılıyor.


7
aslında ihtiyacın yok ~. Bunun nedeni, .gitconfig dosyanızın hala ~/.gitconfigyapılandırmadaki göreli bir yolda bulunması gerektiğidir ~...
robustus

2
~/ $HOMEGenleşme itibariyle aslında git describe --contains 4c0a89fc> - v1.7.10.2~12^2(yani v1.7.10.2o Debian 7 gibi görünüyor ve Ubuntu Quantal ile yayınlayacak olarak veya üstü) dikkate değer v1.7.10.4.
FauxFaux

1
Bu globları destekliyor mu? örneğin path = ~ / gitconfig.d / *?
Bret

1
@ Hayır, bu globları desteklemiyor.
Mike Morearty

8
Bu şekilde dahil edilen yapılandırmaların , açıkça (gibi ) belirtilmedikçe belirli bir dosya verildiğinde (yani --global, --localveya --fileile ) gösterilmeyeceğini unutmayın. --includesgit config --global --includes --list
Franklin Yu

16

2012 Güncellemesi:

Bkz Mike Morearty 'ın cevabı :

İçerir

Özel include.pathdeğişkeni dahil edilecek dosyanın adına ayarlayarak bir yapılandırma dosyasını diğerinden ekleyebilirsiniz .
Dahil edilen dosya, içeriği include yönergesinin yerinde bulunmuş gibi derhal genişletilir. Değişkenin
değeri include.pathgöreceli bir yolsa, yol, include yönergesinin bulunduğu yapılandırma dosyasına göre kabul edilir.
Değeri include.pathtilde genişletmeye tabidir: belirtilen kullanıcının giriş dizinine ve ~/değerine genişletilir .$HOME~user/


Ben öyle düşünmüyorum.

Bu ayarı dosyaya koymayı tercih ederim~/.gitconfig

Kullanıcıya özel yapılandırma dosyası. "Global" yapılandırma dosyası da denir.

Bu şekilde, GitHub'a aktarıldığında yayınlanmadan .gitconfig projesine özgü dosyayı tamamlar. Global yapılandırma dosyası hakkında daha fazla bilgi için bu SO cevabına da bakınız .
Git'in 3 yapılandırma dosyası vardır .


bjeanes ekliyor:

Görünüşe göre herkes bu sorunun anlamını kaçırdı.
David Açıkçası bütün nokta dosyaların bir repo (yukarı itmek istiyor bashrc, gemrconun DAHİL, vs.) .gitconfigbütün makinelerde bu yüzden hepsine sahip olabiliriz onun ayarlarına. Özel girişler ekleyerek ve yok sayarak
bir .gitconfigdosyanın bölümlerini zorlamanın bir yolu onun (ve ben, bu konuda) peşinde olmasıdır.

Olası bir yol, ~ / .gitconfig gibi yerel bir dosyayı bununla ilgili şifresi çözülmüş parçalarla tamamlamak için, bir dosyanın özel hassas bilgilerle şifresini çözmek / şifrelemek için bir bulaşma / temiz filtre sürücüsü kullanmak olabilir ( bu konuya bakın ). dosya.

Bu şekilde, tüm nokta dosyalarınızla birlikte bir Git deposuna ek olarak şifrelenmiş bilgilerin şifresi çözülecek ve adı geçen nokta dosyalarına eklenecek bir dosyaya sahip olabilirsiniz.

alternatif metin

Olarak .gitattributes(ya da .git/info/a..) kullanılması:

myPrivateInfosFile filter=gpg diff=gpg

Repo .config dosyanızda:

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

( GPG tabanlı bir çözüm , elbette, özel / genel anahtarlarınızı, bu özel repoyu kopyalayarak tüm nokta dosyalarınızı geri yüklemek istediğiniz hedef bilgisayara başka bir yolla ilettiğiniz anlamına gelir)

Aslında, sizin durumunuzda, bulaşma komut dosyasının gerektiği gibi tamamlanması gerekir, bu dosyanın şifresini çözdükten sonra devam edin ve ilgili parçaları global ~/.gitconfigdosyanıza ekleyin ( global yapılandırma dosyasının üzerine başka bir konum yazmazsanız ) veya bunun için diğer nokta dosyaları Önemli olmak.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (gpg sakıncaya de açıklanan bu iplik ) (bu, tam encrytped Git Repo sahip farklıdır Burada ele alınan )


5
Temel .gitconfig dosyamı bir git deposunda yayınlamak istiyorum, ancak github ayrıntılarını içine dahil etmek istemiyorum, bu yüzden onları neden bir şekilde harici bir dosyadan dahil etmek istiyorum.
David Reynolds

10

Komut satırından yükleyebilirsiniz:

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

"$PWD"/.gitconfigDosyayı geçerli dizinden yüklemek istiyorsanız bunun yerine kullanın .

Yukarıdaki komutu çalıştırdıktan sonra, .git/configdosyanıza aşağıdaki satırlar eklenir :

[include]
        path = /path/to/.gitconfig

2

Bunu, defunkt'ın hub aracını kullanarak yapabileceğinize inanıyorum . Bu, diğer şeylerin yanı sıra, sahip olmanızı sağlar git komutu için bir sarıcı GITHUB_USERve GITHUB_TOKENçevre değişkenleri. Hangi yerel .gitconfigdosyadaki ayarları geçersiz kılar .

Ardından, bu ad verilmiş işaret kullanıcıyı seamless yapmak için alias git=hubonun içinde ZSH yapılandırma . Daha sonra, ortam değişkenlerinizi ayarladığınız yerel bir dosyayı kaynaklayabilmeniz ve deponuzu tüm özel bilgilerinizle ortak dünyaya iletebilmeniz gerekir.

** OSX'te homebrew kullanıcıları için NOT, aracı yükleyebilirsiniz brew install hub.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.