Windows'ta .gitconfig konumunu değiştirme


105

Windows Git varsayılan olarak global .gitconfig'i c:\documents and settings\user\

.Gitconfig’in depolanması için bu konumu nasıl değiştirebilirim c:\my_configuration_files\?

Hiç yapılabilir mi?


Sadece eklemek istedim ben de bununla karşılaşıyorum. % Userprofile% /. Git / .gitignore'da (yani bir klasörde) diğer tüm global git yapılandırma öğelerime ("exludesfiles" ve "attrirutesfile") sahibim, ancak .gitconfig'in hemen yanına oturmasını isterim , ancak% userprofile% dizininde olmalı .. gerçekten can sıkıcı.
WORMSS

6
Soru sorulduğundan beri herhangi bir ilerleme var mı? .Gitconfig’im varsayılan olarak bir ağ sürücüsüne oturur, yani çevrimdışıyken okuyamaz.
Lech Rzedzicki

Yanıtlar:


67

Eğer ayarlarsanız HOMEiçin c:\my_configuration_files\, o git orada .gitconfig bulacaktır. Ortam değişkenlerinin düzenlenmesi burada açıklanmaktadır . HOME değişkenini ayarlamanız ve ardından herhangi bir cmd.exe penceresini yeniden açmanız gerekir. HOME'un gerçekten doğru değeri gösterdiğini doğrulamak için "set" komutunu kullanın.

HOME'un değiştirilmesi elbette diğer uygulamaları da etkileyecektir. Bununla birlikte, git'in kaynak kodunu okumak, bu dosyaların konumunu komut satırını ayarlamaya gerek kalmadan değiştirmenin tek yolu gibi görünüyor. Stefan'ın cevabını da dikkate almalısınız: GIT_CONFIG değişkenini ayarlayabilirsiniz. Ancak, ona istediğiniz etkiyi vermek için --globalbayrağı tüm git çağrılarına iletmeniz gerekir (artı tüm yerel .git / config dosyaları göz ardı edilir).


2
Hmm, doğru anladığımdan emin değilim, ancak HOME'u değiştirmenin onu kullanan diğer tüm uygulamalara da etkisi olmayacak mı? HOME'u değiştirmenin bir yolu var ama Git'e yerel mi?
Kale

Evet, diğer uygulamalar üzerinde de etkisi olacaktır. Yeri nasıl değiştireceğini sordun, ben de sana söyledim. Düzenlememe bakın.
Martin / Löwis

10
Bunu, HOME'u hareket ettirmenin bir sürü başka şeyi karıştırmanın yan etkileri olmadan çalıştıran var mı?
Ade Miller

Bu büyük olasılıkla Windows platformunda çalışan bir çözümdür. Benim için de çalıştı. Ayarladığım HOME ortam değişkenini (kullanıcı ortam değişkeni) yenilemek için Chocolatey'in refreshenv betiğini kullandım. Bundan sonra, istenen dosya konumunu aldım.
Tore Aurstad

Bunun çalışması için Git'i yeniden yüklemem gerekiyordu. HOME adlı yeni bir ortam değişkeni ekleyip .gitconfigdosyayı bu dizine taşıdığımda işe yaramadı.
Csa77

46

Bunun için HOME dizinini değiştirin yanlış. Daha iyisi gitconfig için HOME dizinine sembolik bağlantı oluşturmaktır.

  1. .Gitconfig dosyanızı kullanıcı ana dizininden istediğiniz dizine taşıyın.
  2. Komut satırını Yönetici olarak çalıştır
  3. Kullanıcı ana dizininize gidin
  4. Mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig girin

9
Yapılandırmanıza bir öğe eklemek için git config --global komutunu çalıştırırsanız, sembolik bağınızın, kullanılan .gitconfig'in gerçek kopyası ile üzerine yazılacağını eklemeye değer olabilir. \ PathForNewLocationOfConfig.gitconfig'in Dropbox klasörüm olduğu bir konumu test ederken bu sorunla karşılaştım
MotoWilliams

8
.Gitconfig'iniz bir ağ sürücüsünde bulunuyorsa, bu seçeneği dışlayan bir "Aygıt sembolik bağlantıları desteklemiyor" mesajı alabilirsiniz.
öğlen ve

4
Bu çözümün kimse için işe yarayacağını sanmıyorum. Şirketimizde, $HOMEbir ağ sürücüsü üzerindedir ve ağ bağlantısıyla ilgili herhangi bir sorun olduğunda, bağlantıya da erişilemez.
andreee

1
2017 yılında bu yeniden ziyaret @MotoWilliams: bozulmamış symlink kalır --global ile düzenledikten sonra
Yılan

2
Burada, grup polisi (AD) HOMEDRIVE, HOMEPATH ve HOMESHARE'i ayarlar, ancak sade, eski, basit EVİ değil. HOME'un yokluğunda git, önceki üçünün bazı kombinasyonlarını kullanıyor gibi görünüyor. Ancak HOME'u ayarlamak (kullanıcıya özgü ortam değişkenlerini ayarlamak için olağan metodoloji yoluyla) çalışır: GIT, ayarladığınız HOME değerini kullanır ve grup politikası HOME'u engellemez.
David I. McIntosh

29

Bu sorunu, diğer yapılandırma dosyaları için çalıştığını gördüğüm biraz farklı bir yaklaşım kullanarak çözdüm. Git Config , başka bir konumdaki bir yapılandırma dosyasına işaret etmenize olanak tanıyan içerir . Bu alternatif konum daha sonra içe aktarılır ve .gitconfig dosyasının bir parçasıymış gibi yerinde genişletilir. Şimdi .gitconfig dosyasında tek bir girişim var:

[include]
   path = c:\\path\\to\\my.config

Git tarafından .gitconfig dosyasına yazılan güncellemeler, içerme yolumun üzerine yazılmaz. Bu, zaman zaman değerleri .gitconfig'den my.config'e taşımam gerekebileceği anlamına geliyor.


+1: tuhaf konfigürasyon yok ve global gitconfig'im bir git deposunun kendisinde sakladığım bir şey, bu yüzden orada ne olduğunu takip etmek benim işim. Global değişiklikler yaparken sadece global dosyayı elle düzenlerim. Yani bu benim için mükemmel çalışıyor ve "HOME" ortam değişkeninizi değiştirmek gibi tuhaflık gerektirmiyor, bu sadece Git'in yapılandırmasını istediğiniz yere getirmek uğruna garip bir fikir. Sonuçta ana dizinin diğer birçok program için başka anlamları vardır. Ayrıca bu çözümle en üste farklı bir kimlik koyabilir ve temel ayarlarınızı kimlikler arasında aynı tutabilirsiniz. Mükemmel!
user62177541

2
Bunun yerine [include] d dosyasındaki dosyaya git config'in yazılmasının mümkün olup olmadığını merak ediyorum.
Jonathan Nazario

1
@JonathanNazariogit config --file "included.file"
Pero P.


11

Ben hiçbir Git usta değilim, ama benim için en kolay çalıştı çözüm etrafında arama sadece gitmek oldu C:\Program Files (x86)\Git\etcve açık profilebir metin editörü.

if37. satırda bir açıklama var # Set up USER's home directory. Ben çıkardı iftablosu ve bu konuma Sonra sadece benim varolan gitconfig dosyasını kopyalanan (ağ sürücüsünde olduğu), olmak gitconfig istediğini yerel dizine koydu.


Çok teşekkürler. Diğer tüm seçenekler benim için başarısız olsa da, bu bana 6 saniyeyle çarpılan bir milyon git ifadesi kazandırdı: D işte yaptığım şey ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas

2
'Ev' kelimesi (veya size benzer görünen satır: 37) artık Git 2.24'te (Aralık 2019) yok.
Frank Nocke

6

Benim için Başlangıç ​​konumunu (en azından git-gui'nin) değiştirmek, .gitconfig'in nerede arandığını etkilemedi. İş yerindeki kurulumum U: evimiz için, ancak U: doğrudan yazma iznimiz yok, sadece bizim için içeride oluşturulmuş alt dizinler, bu yüzden bu benim için bir anlaşma bozdu.

HOMEDRIVE ve HOMEPATH env değişkenlerini sadece o uygulama için geçersiz kılacak bir toplu komut dosyası oluşturarak sorunu çözdüm. Ardından, Başlat menüsü kısayolumu bunun yerine bu toplu komut dosyasını işaret edecek şekilde değiştirdim.


1
Bu düzeltmeyi gerçekleştirmek için yaptıklarınız hakkında daha fazla bilgi almak istiyorum.
Matt Casto

Çözümünüzü paylaşabilir misiniz?
Sal

4

Önce HOME ayarını kontrol edin, ardından HOME ve HOMEDRIVE'ı mevcut bir dizine değiştirin.

c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\

sonra HOME ve HOMEDRIVE'ı şu şekilde değiştirin:

set HOME=c:\tmp
set HOMEDRIVE=C:

3

Windows'taysanız ve ortam değişkenlerini değiştirmede veya mklinkyetersiz ayrıcalıklardan dolayı sorun yaşıyorsanız, sorununuz için kolay bir çözüm git batch'i başka bir yerde başlatmaktır.

Git Bash.exe'ye sağ tıklayın, özellikleri tıklayın ve "Başlama yeri" özelliğini olarak değiştirin c:\my_configuration_files\.


Vay canına, bu tamamen kolaylıkla çalışıyor. Yeni bir kısa yol oluşturuldu ve "özellikler-> başlangıç" altında %HOMEDRIVE%%HOMEPATH%"c: \ my_repo_folder " olarak değiştirildi . Büyüdü.
Shane

2
Bu benim için işe yaramadı. .Gitconfig dosyası hala ana dizinimden yükleniyordu
Dave B

3

Ben de aynı şeyi yapmak istedim. Bulabildiğim en iyi @ MicTech'in çözümüydü. Ancak, @MotoWilliams tarafından belirtildiği gibi, bu, Git tarafından .gitconfig dosyasına yapılan ve bağlantıyı yalnızca yeni ayarları içeren yeni bir dosyayla değiştiren güncellemelerden sağ çıkmaz.

Aşağıdaki PowerShell betiğini yazıp profil başlangıç ​​betiğimde çalıştırarak bunu çözdüm. Her çalıştırıldığında, kullanıcının .gitconfig dosyasına eklenen tüm ayarları genel olana kopyalar ve ardından .gitconfig dosyasındaki tüm metni genel dosyayı içe aktaran ve [include] başlığıyla değiştirir.

Global .gitconfig dosyasını, diğer birçok global komut dosyası ve araçla birlikte bir depoda tutuyorum. Tek yapmam gereken, komut dosyasının global dosyama eklediği değişiklikleri kontrol etmeyi hatırlamak.

Bu benim için oldukça şeffaf çalışıyor gibi görünüyor. Umarım yardımcı olur!

9 Eylül: Yapılandırma dosyasına eklenen yeni girişlerin yinelendiğini algılamak ve bunları yok saymak için güncellendi. Bu, SourceTree gibi, var olanları bulamazlarsa ve içeriği takip etmezlerse yeni güncellemeler yazacak araçlar için kullanışlıdır.

function git-config-update
{
  $localPath = "$env:USERPROFILE\.gitconfig".replace('\', "\\")
  $globalPath = "C:\src\github\Global\Git\gitconfig".replace('\', "\\")

  $redirectAutoText = "# Generated file. Do not edit!`n[include]`n  path = $globalPath`n`n"
  $localText = get-content $localPath

  $diffs = (compare-object -ref $redirectAutoText.split("`n") -diff ($localText) | 
    measure-object).count

  if ($diffs -eq 0)
  {
    write-output ".gitconfig unchanged."
    return
  }

  $skipLines = 0
  $diffs = (compare-object -ref ($redirectAutoText.split("`n") | 
     select -f 3) -diff ($localText | select -f 3) | measure-object).count
  if ($diffs -eq 0)
  {
    $skipLines = 4
    write-warning "New settings appended to $localPath...`n "
  }
  else
  {
    write-warning "New settings found in $localPath...`n "
  }
  $localLines = (get-content $localPath | select -Skip $skipLines) -join "`n"
  $newSettings = $localLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries) | 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $globalLines = (get-content  $globalPath) -join "`n"
  $globalSettings =  $globalLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries)| 
    where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }

  $appendSettings = ($newSettings | %{ $_.Trim() } | 
    where { !($globalSettings -contains $_.Trim()) })
  if ([string]::IsNullOrWhitespace($appendSettings))
  {
    write-output "No new settings found."
  }
  else
  {
    echo $appendSettings
    add-content $globalPath ("`n# Additional settings added from $env:COMPUTERNAME on " + (Get-Date -displayhint date) + "`n" + $appendSettings)
  }
  set-content $localPath $redirectAutoText -force
}

2

ÇOK UZUN ZAMANDIR bununla ilgilenen biri olarak. Kılavuza bakınız:

$ XDG_CONFIG_HOME / git / config - İkinci kullanıcıya özel yapılandırma dosyası. Eğer $XDG_CONFIG_HOMEayarlamak veya boş değil, $ HOME / .config / git / config kullanılacaktır. Bu dosyadaki tek değerli değişken kümesinin üzerine, ~ / .gitconfig içindeki her ne olursa olsun yazılacaktır. Bazen Git'in eski sürümlerini kullanıyorsanız, bu dosya için destek oldukça yakın zamanda eklendiğinden, bu dosyayı oluşturmamak iyi bir fikirdir.

Hangisi daha yeni eklendi. Bu döküm 2.15.0'dan.

Benim için çalışıyor.


Bu, Windows'daki en basit, en az müdahaleci, en güvenilir çözümdür.
1919

2
  1. Klasöre geç %PROGRAMFILES%\Git\etc
  2. Dosyayı düzenle profile
  3. İlk satıra ekle HOME="c:\location_were_you_want_gitconfig"
  4. Bitti

Not: Dosya izinleri genellikle sınırlıdır, bu nedenle onları uygun şekilde değiştirin, aksi takdirde değişikliklerinizi kaydedemezsiniz.


Bu, Git 2.24, Win10, Aralık 2019 itibarıyla çalışmıyor. git config --list --show-originGösteriliyor, orijinal HOME hala yerinde.
Frank Nocke

1

Benim için çok basit çalıştı:

  1. Eski dizinden ".gitconfig" dosyasını kopyalayın:% USERPROFILE% ("c: \ users \ username" içinde standart)
  2. GITGUI ve GITBASH başlangıç ​​simgelerine sağ tıklayın ve "çalıştır": "% HOMEDRIVE %% HOMEPATH%" değerini "% USERPROFILE%" olarak değiştirin. Elbette "% USERPROFILE%" yerine başka herhangi bir dizini kullanabilirsiniz.

daha önce ekran görüntüsü

sonra ekran görüntüsü


0

Windows HOME değişken
işletim sistemini değiştirmek zorunda kalmadan çözüm : Windows 10
git sürümü: 2.27.0.windows.1

Git'in taşınabilir sürümünü kullanıyorum, bu nedenle tüm yapılandırma dosyalarım kalem sürücümde (E :). Bu benim için çalıştı:

  1. Taşınabilir Git'i https://git-scm.com/ adresinden indirin . Dosyayı çalıştırın ve gerekli konuma kurun. E: \ git içine kurdum .
  2. Çalışma git-bash.exe gelen E: \ git .
  3. E'ye.gitconfig ve diğer bash dosyalarını koymak istedim , bu yüzden hepsini istediğim yerde home adında bir klasör oluşturdum .
    mkdir home
  4. Git vs klasör ve dosya adı verilen açmak profili (Benim durumumda, 's E: \ git \ vb \ profil)
  5. Profil dosyasının sonuna oluşturduğumuz giriş dizininin (veya .gitconfig dosyanızın yerleştirilmesini istediğiniz dizinin) mutlak yolunu ekleyin .
    HOME="E:\git\home"

Artık C: \ Users <username> dizininde .gitconfig için arama yapmaz, yalnızca yukarıdaki ayarlanan yolu arar.

$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory

Henüz bir .gitconfig dosyası olmadığı için bir hata verdi. Bu, Windows'ta HOME dizinini değiştirmeden .gitconfig dosyasının konumunu başarıyla değiştirdiğimizi göstermek içindir.

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.