Mengubah lokasi .gitconfig di Windows

105

Secara default di Windows Git menempatkan .gitconfig global di c:\documents and settings\user\

Bagaimana cara mengubah posisi itu sehingga .gitconfig disimpan c:\my_configuration_files\?

Bisakah itu dilakukan sama sekali?

Benteng
sumber
Hanya ingin menambahkan, saya juga mengalami ini. Saya memiliki semua barang konfigurasi git global saya yang lain ("exludesfiles" dan "attrirutesfile") di% userprofile% /. Git / .gitignore (jadi di dalam folder), tetapi .gitconfig saya ingin meletakkannya tepat di sebelahnya , tetapi harus berada di root% userprofile% .. benar-benar mengganggu.
WORMSS
6
Kemajuan apa saja sejak pertanyaan diajukan? .Gitconfig saya berada di drive jaringan secara default, artinya drive tersebut tidak dapat membacanya saat saya offline.
Lech Rzedzicki

Jawaban:

67

Jika Anda menyetel HOMEke c:\my_configuration_files\, maka git akan menemukan .gitconfig di sana. Mengedit variabel lingkungan dijelaskan di sini . Anda perlu menyetel variabel HOME, lalu buka kembali jendela cmd.exe mana pun. Gunakan perintah "set" untuk memverifikasi bahwa HOME memang menunjuk ke nilai yang benar.

Mengubah HOME tentu saja akan mempengaruhi aplikasi lain. Namun, dari membaca kode sumber git, itu tampaknya menjadi satu-satunya cara untuk mengubah lokasi file ini tanpa perlu menyesuaikan baris perintah. Anda juga harus mempertimbangkan tanggapan Stefan: Anda dapat menyetel variabel GIT_CONFIG. Namun, untuk memberikan efek yang Anda inginkan, Anda harus meneruskan --globalflag ke semua pemanggilan git (ditambah file .git / config lokal apa pun yang diabaikan).

Martin v. Löwis
sumber
2
Hmm, tidak yakin apakah saya memahaminya dengan benar tetapi tidak akan mengubah HOME mempengaruhi juga semua aplikasi lain yang menggunakannya? Apakah tidak ada cara untuk mengubah HOME, tetapi lokal ke Git?
Benteng
Ya, ini juga akan berpengaruh pada aplikasi lain. Anda bertanya bagaimana cara mengubah lokasi, dan saya memberi tahu Anda. Lihat suntingan saya.
Martin v. Löwis
10
Adakah yang benar-benar mendapatkan ini untuk bekerja tanpa efek samping pindah RUMAH mengacaukan seluruh beban hal lain?
Ade Miller
Ini kemungkinan besar adalah solusi yang berfungsi pada platform Windows. Itu berhasil juga untuk saya. Saya menggunakan skrip refreshenv Chocolatey untuk menyegarkan variabel lingkungan HOME yang saya setel (variabel lingkungan pengguna). Setelah itu, saya mendapatkan lokasi file yang diinginkan.
Tore Aurstad
Saya harus menginstal ulang Git agar ini berfungsi. Jika saya baru saja menambahkan variabel lingkungan baru bernama HOME dan memindahkan .gitconfigfile ke direktori itu, itu tidak berhasil.
Csaba
46

Ubah direktori HOME karena ini salah. Lebih baik buat tautan simbolik untuk gitconfig ke direktori HOME.

  1. Pindahkan .gitconfig Anda dari direktori home user, ke direktori yang Anda inginkan.
  2. Jalankan baris perintah sebagai Administrator
  3. Buka direktori beranda pengguna Anda
  4. Masukkan mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig
MicTech
sumber
9
Mungkin perlu ditambahkan bahwa jika Anda menjalankan git config --global untuk menambahkan item ke konfigurasi Anda, symlink Anda akan ditimpa dengan salinan sebenarnya dari .gitconfig yang sedang digunakan. Saya mengalami masalah ini saat menguji lokasi di mana \ PathForNewLocationOfConfig.gitconfig adalah folder Dropbox saya
MotoWilliams
8
Jika .gitconfig Anda terletak di drive jaringan, Anda mungkin mendapatkan pesan "Perangkat tidak mendukung tautan simbolik" yang mengesampingkan opsi ini.
siang dan
4
Saya tidak berpikir solusi ini akan berhasil untuk siapa pun. Di perusahaan kami, $HOMEada di drive jaringan dan setiap kali ada masalah dengan koneksi jaringan, juga tautannya tidak dapat dijangkau.
andreee
1
@MotoWilliams mengunjungi kembali ini pada tahun 2017: symlink tetap utuh setelah diedit dengan --global
Snake
2
Di sini, polisi kelompok (AD) menetapkan HOMEDRIVE, HOMEPATH dan HOMESHARE, tapi tidak polos, tua, dan RUMAH sederhana. Dengan tidak adanya HOME, git tampaknya menggunakan beberapa kombinasi dari tiga sebelumnya. Tetapi pengaturan HOME (melalui metodologi biasa untuk mengatur variabel lingkungan khusus pengguna) berfungsi: GIT menggunakan nilai HOME yang Anda setel, dan grouppolicy tidak mengalahkan HOME.
David I. McIntosh
29

Saya telah memecahkan masalah ini menggunakan pendekatan yang sedikit berbeda yang menurut saya berfungsi untuk file konfigurasi lain. Git Config mendukung include yang memungkinkan Anda mengarahkan ke file konfigurasi di lokasi lain. Lokasi alternatif itu kemudian diimpor dan diperluas seolah-olah itu adalah bagian dari file .gitconfig. Jadi sekarang saya hanya memiliki satu entri di .gitconfig:

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

Pembaruan apa pun yang ditulis oleh Git ke file .gitconfig tidak akan menimpa jalur penyertaan saya. Ini berarti bahwa terkadang saya mungkin perlu memindahkan nilai dari .gitconfig ke my.config.

Joe Brinkman
sumber
+1: tidak ada konfigurasi yang aneh dan gitconfig global saya adalah sesuatu yang saya simpan di repo git itu sendiri, jadi melacak apa yang ada di sana adalah pekerjaan saya. Saat membuat perubahan global, saya hanya mengedit file global dengan tangan. Jadi ini bekerja dengan sempurna untuk saya, dan tidak memerlukan keanehan seperti mengubah variabel lingkungan "HOME" Anda, yang merupakan ide aneh hanya untuk mendapatkan konfigurasi Git di tempat yang Anda inginkan. Direktori home memiliki arti lain untuk banyak program lain. Anda juga dapat meletakkan identitas yang berbeda di bagian atas dan menjaga pengaturan kunci Anda tetap sama di seluruh identitas dengan solusi ini. Luar biasa!
pengguna62177541
2
Saya ingin tahu apakah mungkin membuat git config menulis ke file di file [include] d sebagai gantinya.
Jonathan Nazario
1
@JonathanNazariogit config --file "included.file"
Pero P.
12

Lihat di FILES dan LINGKUNGAN bagian git help config.

Stefan Näwe
sumber
11

Saya bukan master Git, tetapi dari mencari solusi yang paling mudah bagi saya adalah dengan C:\Program Files (x86)\Git\etcmembuka dan membuka profiledi editor teks.

Ada ifpernyataan di baris 37 # Set up USER's home directory. Saya mengeluarkan ifpernyataan itu dan meletakkannya di direktori lokal yang saya inginkan untuk menjadi gitconfig, lalu saya baru saja menyalin file gitconfig saya yang ada (ada di drive jaringan) ke lokasi itu.

scottsandersdev
sumber
Terima kasih banyak. Sementara semua opsi lain gagal bagi saya, ini hanya menghemat satu juta pernyataan git dikalikan dengan 6 detik: D inilah yang saya lakukan ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas
2
Kata 'home' (atau apapun yang mirip dengan baris Anda: 37) tidak ada lagi di git 2.24 (Desember 2019).
Frank Nocke
6

Bagi saya, mengubah lokasi Start In (setidaknya dari git-gui) tidak memengaruhi tempat pencarian .gitconfig. Pengaturan saya di tempat kerja memasang U: untuk rumah kami, tetapi kami tidak memiliki izin untuk menulis dalam U: secara langsung, hanya subdirektori yang dibuat untuk kami di dalam, jadi ini adalah pemecah kesepakatan bagi saya.

Saya memecahkan masalah dengan membuat skrip batch yang akan menimpa variabel env HOMEDRIVE dan HOMEPATH hanya untuk aplikasi itu. Kemudian ubah pintasan menu Start saya untuk menunjuk ke skrip batch itu.

Brian Blackburn
sumber
1
Saya ingin informasi lebih lanjut tentang apa yang Anda lakukan untuk menyelesaikan perbaikan ini.
Matt Casto
Bisakah Anda membagikan solusi Anda?
Sal
4

Pertama periksa pengaturan HOME, kemudian ubah HOME dan HOMEDRIVE ke direktori yang ada.

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

lalu ubah HOME dan HOMEDRIVE dengan

set HOME=c:\tmp
set HOMEDRIVE=C:
Aliti
sumber
3

Jika Anda menggunakan windows dan mengalami masalah baik mengubah variabel lingkungan atau mklinkkarena hak istimewa yang tidak memadai, solusi mudah untuk masalah Anda adalah memulai git batch di lokasi lain.

Cukup klik kanan pada Git Bash.exe, klik properti dan ubah properti "Mulai di" menjadi c:\my_configuration_files\.

FatAlbert
sumber
Wow ini benar-benar bekerja dengan mudah. Membuat jalan pintas baru dan di bawah 'properties-> start in' diubah %HOMEDRIVE%%HOMEPATH%menjadi `c: \ my_repo_folder`. Menghasilkan pesona.
Shane
2
Ini tidak berhasil untuk saya. File .gitconfig masih dimuat dari direktori home saya
Dave B
3

Saya ingin melakukan hal yang sama. Yang terbaik yang bisa saya temukan adalah solusi @ MicTech. Namun, seperti yang ditunjukkan oleh @MotoWilliams, ini tidak bertahan dari pembaruan apa pun yang dibuat oleh Git ke file .gitconfig yang menggantikan tautan dengan file baru yang hanya berisi pengaturan baru.

Saya menyelesaikan ini dengan menulis skrip PowerShell berikut dan menjalankannya di skrip startup profil saya. Setiap kali dijalankan, ia menyalin pengaturan apa pun yang telah ditambahkan ke .gitconfig pengguna ke global dan kemudian mengganti semua teks dalam file .gitconfig dengan dan header [include] yang mengimpor file global.

Saya menyimpan file .gitconfig global dalam repo bersama dengan banyak skrip dan alat global lainnya. Yang harus saya lakukan adalah mengingat untuk memeriksa setiap perubahan yang ditambahkan skrip ke file global saya.

Ini tampaknya bekerja cukup transparan bagi saya. Semoga membantu!

9 Sept: Diperbarui untuk mendeteksi ketika entri baru yang ditambahkan ke file konfigurasi merupakan duplikat dan mengabaikannya. Ini berguna untuk alat seperti SourceTree yang akan menulis pembaruan baru jika mereka tidak dapat menemukan yang sudah ada dan tidak mengikuti termasuk.

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
}
Ade Miller
sumber
2

Sebagai seseorang yang telah tertarik dengan hal ini sejak lama. Lihat dari manual:

$ XDG_CONFIG_HOME / git / config - File konfigurasi khusus pengguna kedua. Jika $XDG_CONFIG_HOMEtidak disetel atau kosong, $ HOME / .config / git / config akan digunakan. Setiap set variabel bernilai tunggal dalam file ini akan ditimpa oleh apa pun yang ada di ~ / .gitconfig. Sebaiknya jangan membuat file ini jika Anda terkadang menggunakan Git versi lama, karena dukungan untuk file ini baru saja ditambahkan.

Yang baru saja ditambahkan. Dump ini dari 2.15.0.

Bekerja untuk saya.

ehiller
sumber
Ini adalah solusi paling sederhana, paling tidak mengganggu, dan paling andal di Windows.
kwill
2
  1. Ubah ke folder %PROGRAMFILES%\Git\etc
  2. Edit file profile
  3. Tambahkan ke baris pertama HOME="c:\location_were_you_want_gitconfig"
  4. Selesai

Catatan: Izin file biasanya dibatasi, jadi ubahlah seperlunya atau Anda tidak akan dapat menyimpan perubahan Anda.

cuasijoe
sumber
Ini tidak berfungsi pada git 2.24, Win10, Desember 2019. git config --list --show-originmenunjukkan, HOME asli masih ada.
Frank Nocke
1

Bagi saya itu bekerja sangat sederhana:

  1. Salin ".gitconfig" dari direktori lama: ke% USERPROFILE% (standar di "c: \ users \ username")
  2. Klik kanan pada start-icon GITGUI dan GITBASH dan ubah "run in": "% HOMEDRIVE %% HOMEPATH%" menjadi "% USERPROFILE%". Tentu saja Anda dapat menggunakan direktori lain selain "% USERPROFILE%".

screen shot sebelumnya

screen shot setelah

Ralph Schwerdt
sumber
0

Solusi tanpa harus mengubah
OS variabel Windows HOME : Windows 10
versi git: 2.27.0.windows.1

Saya menggunakan Git versi portabel, jadi semua file konfigurasi saya ada di pen-drive saya (E :). Inilah yang berhasil untuk saya:

  1. Unduh Git portabel dari https://git-scm.com/ . Jalankan file dan instal di lokasi yang diperlukan. Saya menginstalnya di E: \ git .
  2. Jalankan git-bash.exe dari E: \ git .
  3. Saya ingin meletakkan .gitconfigdan file bash lainnya di E , jadi saya membuat folder bernama home tempat saya ingin semuanya masuk.
    mkdir home
  4. Buka folder etc dan buka file bernama profile (Dalam kasus saya, ini adalah E: \ git \ etc \ profile)
  5. Tambahkan path absolut ke direktori home yang kita buat (atau ke direktori tempat Anda ingin meletakkan file .gitconfig Anda) di akhir file profil .
    HOME="E:\git\home"

Sekarang tidak lagi mencari di direktori C: \ Users <username> untuk .gitconfig tetapi hanya melihat di jalur set Anda di atas.

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

Ini memberikan kesalahan karena belum ada file .gitconfig di sana. Ini hanya untuk menunjukkan bahwa kami telah berhasil mengubah lokasi file .gitconfig tanpa mengubah direktori HOME di Windows.

Allika
sumber