Thay đổi vị trí .gitconfig trên Windows


105

Theo mặc định trên Windows Git đặt .gitconfig toàn cầu vào c:\documents and settings\user\

Làm cách nào để thay đổi vị trí đó để .gitconfig được lưu trữ c:\my_configuration_files\?

Nó có thể được thực hiện ở tất cả?


Tôi chỉ muốn thêm tôi cũng đang chạy vào điều này. Tôi có tất cả nội dung cấu hình git chung khác của mình ("exludesfiles" và "attrirutesfile") trong% userprofile% /. Git / .gitignore (vì vậy trong một thư mục), nhưng .gitconfig tôi rất thích để nó nằm ngay bên cạnh chúng , nhưng phải ở trên thư mục gốc của% userprofile% .. chỉ thực sự khó chịu.
WORMSS

6
Bất kỳ tiến bộ nào kể từ khi câu hỏi đã được hỏi? .Gitconfig của tôi nằm trên một ổ đĩa mạng theo mặc định, có nghĩa là nó không thể đọc nó khi tôi ngoại tuyến.
Lech Rzedzicki

Câu trả lời:


67

Nếu bạn đặt HOMEthành c:\my_configuration_files\, thì git sẽ định vị .gitconfig ở đó. Việc chỉnh sửa các biến môi trường được mô tả ở đây . Bạn cần đặt biến HOME, sau đó mở lại bất kỳ cửa sổ cmd.exe nào. Sử dụng lệnh "set" để xác minh rằng HOME thực sự trỏ đến đúng giá trị.

Tất nhiên, việc thay đổi HOME cũng sẽ ảnh hưởng đến các ứng dụng khác. Tuy nhiên, từ việc đọc mã nguồn của git, đó dường như là cách duy nhất để thay đổi vị trí của các tệp này mà không cần điều chỉnh dòng lệnh. Bạn cũng nên xem xét phản hồi của Stefan: bạn có thể đặt biến GIT_CONFIG. Tuy nhiên, để mang lại cho nó hiệu ứng mà bạn mong muốn, bạn cần chuyển --globalcờ cho tất cả các lệnh gọi git (cộng với bất kỳ tệp .git / config cục bộ nào đều bị bỏ qua).


2
Hmm, không chắc liệu tôi có hiểu đúng không nhưng việc thay đổi HOME sẽ không ảnh hưởng đến tất cả các ứng dụng khác sử dụng nó? Không có cách nào để thay đổi HOME, nhưng cục bộ thành Git?
Rook

Có, nó cũng sẽ ảnh hưởng đến các ứng dụng khác. Bạn hỏi làm thế nào để thay đổi vị trí, và tôi đã nói với bạn. Xem bản chỉnh sửa của tôi.
Martin kiện Löwis

10
Có ai thực sự làm cho điều này hoạt động mà không có tác dụng phụ của việc chuyển NHÀ làm rối tung cả đống thứ khác không?
Ade Miller

Đây rất có thể là một giải pháp hoạt động trên nền tảng Windows. Nó cũng làm việc cho tôi. Tôi đã sử dụng tập lệnh refreshv của Chocolatey để làm mới biến môi trường HOME mà tôi đã đặt (biến môi trường người dùng). Sau đó, tôi đã có được vị trí tệp mong muốn.
Tore Aurstad

Tôi đã phải cài đặt lại Git để cái này hoạt động. Nếu tôi vừa thêm một biến môi trường mới có tên HOME và chuyển .gitconfigtệp vào thư mục đó, thì nó không hoạt động.
Csaba

46

Thay đổi thư mục HOME cho điều này là sai. Tốt hơn là tạo liên kết tượng trưng cho gitconfig đến thư mục HOME.

  1. Di chuyển .gitconfig của bạn từ thư mục chính của người dùng, đến thư mục mà bạn muốn.
  2. Chạy dòng lệnh với tư cách Quản trị viên
  3. Đi tới thư mục chính người dùng của bạn
  4. Nhập mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig

9
Có thể cần thêm rằng nếu bạn chạy git config --global để thêm một mục vào cấu hình của mình thì liên kết biểu tượng của bạn sẽ bị ghi đè bằng bản sao thực của .gitconfig đang được sử dụng. Tôi gặp sự cố này khi kiểm tra một vị trí trong đó \ PathForNewLocationOfConfig.gitconfig là thư mục Dropbox của tôi
MotoWilliams

8
Nếu .gitconfig của bạn nằm trên ổ đĩa mạng, bạn có thể nhận được thông báo "Thiết bị không hỗ trợ liên kết tượng trưng" loại bỏ tùy chọn này.
noonand

4
Tôi không nghĩ rằng giải pháp này sẽ hiệu quả với bất kỳ ai. Trong công ty của chúng tôi, $HOMEtrên một ổ đĩa mạng và bất cứ khi nào có bất kỳ sự cố nào với kết nối mạng, liên kết cũng không thể truy cập được.
andreee

1
@MotoWilliams xem xét lại này vào năm 2017: việc nghỉ liên kết tượng trưng nguyên vẹn sau khi chỉnh sửa với --global
Rắn

2
Ở đây, cảnh sát nhóm (AD) đặt HOMEDRIVE, HOMEPATH và HOMESHARE, nhưng không phải là HOME đơn giản, cũ kỹ. Trong trường hợp không có HOME, git dường như sử dụng một số kết hợp của ba phần trước. Nhưng việc đặt HOME (thông qua phương pháp thông thường để đặt các biến môi trường dành riêng cho người dùng) lại hoạt động: GIT sử dụng giá trị HOME mà bạn đã đặt và gitolicy không cản trở HOME.
David I. McIntosh

29

Tôi đã giải quyết vấn đề này bằng cách sử dụng một cách tiếp cận hơi khác mà tôi đã thấy làm việc cho các tệp cấu hình khác. Git Config hỗ trợ bao gồm cho phép bạn trỏ đến tệp cấu hình ở một vị trí khác. Vị trí thay thế đó sau đó được nhập và mở rộng tại chỗ như thể nó là một phần của tệp .gitconfig. Vì vậy, bây giờ tôi chỉ có một mục duy nhất trong .gitconfig:

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

Bất kỳ bản cập nhật nào được Git ghi vào tệp .gitconfig sẽ không ghi đè đường dẫn bao gồm của tôi. Điều đó có nghĩa là đôi khi tôi có thể cần phải chuyển các giá trị từ .gitconfig sang my.config.


+1: không có cấu hình kỳ lạ và gitconfig toàn cầu của tôi là thứ mà tôi lưu trữ trong chính git repo, vì vậy việc theo dõi những gì trong đó là công việc của tôi. Khi thực hiện các thay đổi toàn cục, tôi chỉ cần chỉnh sửa tệp toàn cầu bằng tay. Vì vậy, điều này hoạt động hoàn hảo đối với tôi và không yêu cầu kỳ quặc như thay đổi biến môi trường "HOME" của bạn, đó là một ý tưởng kỳ lạ chỉ vì lợi ích của cấu hình Git ở nơi bạn muốn. Thư mục chính sau khi tất cả có ý nghĩa khác với nhiều chương trình khác. Ngoài ra, bạn có thể đặt một danh tính khác ở trên cùng và giữ nguyên các cài đặt khóa của mình giữa các danh tính với giải pháp này. Thông minh!
user62177541

2
Tôi tự hỏi nếu thay vào đó có thể ghi cấu hình git vào tệp trong tệp [include] d.
Jonathan Nazario

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


11

Tôi không phải là bậc thầy về Git, nhưng từ việc tìm kiếm xung quanh giải pháp phù hợp nhất với tôi là chỉ cần truy cập C:\Program Files (x86)\Git\etcvà mở profiletrong trình soạn thảo văn bản.

Có một iftuyên bố ở dòng 37 # Set up USER's home directory. Tôi lấy ra bảng sao kê ifvà đưa vào thư mục cục bộ mà tôi muốn có gitconfig, sau đó tôi chỉ việc sao chép tệp gitconfig hiện có của mình (nằm trên ổ đĩa mạng) vào vị trí đó.


Cảm ơn rất nhiều. Trong khi tất cả các tùy chọn khác không thành công với tôi, điều này chỉ giúp tôi tiết kiệm được một triệu câu lệnh git nhân với 6 giây: D đây là những gì tôi đã làm ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas

2
Từ 'home' (hoặc bất cứ thứ gì giống với dòng của bạn: 37) không còn tồn tại trong git 2.24 (tháng 12 năm 2019).
Frank Nocke

6

Đối với tôi, việc thay đổi vị trí Start In (ít nhất là git-gui) không ảnh hưởng đến nơi nó tìm kiếm .gitconfig. Thiết lập của tôi tại nơi làm việc gắn kết U: cho nhà của chúng tôi, nhưng chúng tôi không được phép viết trực tiếp bằng U:, chỉ các thư mục con được tạo cho chúng tôi bên trong, vì vậy đây là một công cụ phá vỡ thỏa thuận đối với tôi.

Tôi đã giải quyết vấn đề bằng cách tạo một tập lệnh lô sẽ ghi đè các biến env HOMEDRIVE và HOMEPATH chỉ dành cho ứng dụng đó. Sau đó, thay đổi lối tắt menu Bắt đầu của tôi để trỏ đến tập lệnh hàng loạt đó.


1
Tôi muốn biết thêm thông tin về những gì bạn đã làm để khắc phục sự cố này.
Matt Casto

Bạn có thể chia sẻ giải pháp của bạn?
Sal

4

Trước tiên, hãy kiểm tra cài đặt HOME, sau đó thay đổi HOME và HOMEDRIVE thành một dir hiện có.

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

sau đó thay đổi TRANG CHỦ và HOMEDRIVE bằng

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

3

Nếu bạn đang sử dụng windows và gặp sự cố khi thay đổi biến môi trường hoặc mklinkdo không đủ đặc quyền, giải pháp dễ dàng cho vấn đề của bạn là bắt đầu lô git ở một vị trí khác.

Chỉ cần nhấp chuột phải vào Git Bash.exe, nhấp vào thuộc tính và thay đổi thuộc tính "Bắt đầu trong" thành c:\my_configuration_files\.


Wow điều này hoàn toàn làm việc một cách dễ dàng. Đã tạo một đoạn ngắn mới và trong 'property-> start in' được đổi %HOMEDRIVE%%HOMEPATH%thành `c: \ my_repo_folder`. Làm việc một cách quyến rũ.
Shane

2
Điều này không hiệu quả với tôi. Tệp .gitconfig vẫn được tải từ thư mục chính của tôi
Dave B

3

Tôi cũng muốn làm điều tương tự. Giải pháp tốt nhất mà tôi có thể tìm thấy là giải pháp của @ MicTech. Tuy nhiên, như được chỉ ra bởi @MotoWilliams, điều này không tồn tại trong bất kỳ bản cập nhật nào do Git thực hiện đối với tệp .gitconfig, thay thế liên kết bằng một tệp mới chỉ chứa các cài đặt mới.

Tôi đã giải quyết vấn đề này bằng cách viết tập lệnh PowerShell sau và chạy nó trong tập lệnh khởi động hồ sơ của mình. Mỗi lần chạy nó sẽ sao chép bất kỳ cài đặt nào đã được thêm vào .gitconfig của người dùng vào cài đặt chung và sau đó thay thế tất cả văn bản trong tệp .gitconfig bằng và tiêu đề [include] nhập tệp chung.

Tôi giữ tệp .gitconfig toàn cầu trong một kho lưu trữ cùng với nhiều tập lệnh và công cụ toàn cầu khác. Tất cả những gì tôi phải làm là nhớ kiểm tra bất kỳ thay đổi nào mà tập lệnh gắn vào tệp chung của tôi.

Điều này dường như hoạt động khá minh bạch đối với tôi. Hy vọng nó giúp!

Ngày 9 tháng 9: Cập nhật để phát hiện khi các mục nhập mới được thêm vào tệp cấu hình là bản sao và bỏ qua chúng. Điều này rất hữu ích cho các công cụ như SourceTree, công cụ này sẽ viết các bản cập nhật mới nếu họ không thể tìm thấy các bản cập nhật hiện có và không tuân theo các bản cập nhật.

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

Là một người đã quan tâm đến điều này trong một thời gian RẤT DÀI. Xem từ sách hướng dẫn:

$ XDG_CONFIG_HOME / git / config - Tệp cấu hình thứ hai dành riêng cho người dùng. Nếu $XDG_CONFIG_HOMEkhông được đặt hoặc trống, $ HOME / .config / git / config sẽ được sử dụng. Bất kỳ biến có giá trị đơn nào được đặt trong tệp này sẽ bị ghi đè bởi bất kỳ biến nào có trong ~ / .gitconfig. Bạn không nên tạo tệp này nếu đôi khi bạn sử dụng các phiên bản Git cũ hơn, vì hỗ trợ cho tệp này đã được bổ sung gần đây.

Mà chỉ mới được thêm vào gần đây. Kết xuất này là từ 2.15.0.

Làm việc cho tôi.


Đây là giải pháp đơn giản nhất, ít xâm nhập nhất, đáng tin cậy nhất trong Windows.
kwill

2
  1. Thay đổi thành thư mục %PROGRAMFILES%\Git\etc
  2. Chỉnh sửa tập tin profile
  3. Thêm vào dòng đầu tiên HOME="c:\location_were_you_want_gitconfig"
  4. Làm xong

Lưu ý: Quyền đối với tệp thường bị hạn chế, vì vậy hãy thay đổi chúng cho phù hợp nếu không bạn sẽ không thể lưu các thay đổi của mình.


Tính năng này không hoạt động kể từ git 2.24, Win10, tháng 12 năm 2019. Cho git config --list --show-originthấy, TRANG CHỦ ban đầu vẫn còn ở đây.
Frank Nocke

1

Đối với tôi, nó hoạt động rất đơn giản:

  1. Sao chép ".gitconfig" từ thư mục cũ: sang% USERPROFILE% (tiêu chuẩn trong "c: \ users \ username")
  2. Nhấp chuột phải vào biểu tượng bắt đầu của GITGUI và GITBASH và thay đổi "chạy trong": "% HOMEDRIVE %% HOMEPATH%" thành "% USERPROFILE%". Trong khoảng thời gian, bạn có thể sử dụng bất kỳ thư mục nào khác thay vì "% USERPROFILE%".

ảnh chụp màn hình trước

ảnh chụp màn hình sau


0

Giải pháp mà không cần phải thay đổi
hệ điều hành biến Windows HOME : Windows 10
git phiên bản: 2.27.0.windows.1

Tôi sử dụng phiên bản di động của Git, vì vậy tất cả các tệp cấu hình của tôi đều nằm trên ổ bút (E :). Đây là những gì làm việc cho tôi:

  1. Tải xuống Git di động từ https://git-scm.com/ . Chạy tệp và cài đặt nó ở vị trí cần thiết. Tôi đã cài đặt nó trong E: \ git .
  2. Chạy git-bash.exe từ E: \ git .
  3. Tôi muốn đặt .gitconfigvà các tệp bash khác trong E , vì vậy tôi đã tạo một thư mục có tên là home , nơi tôi muốn tất cả chúng ở trong đó.
    mkdir home
  4. Đi tới thư mục etc và mở tệp có tên là hồ sơ (Trong trường hợp của tôi, đó là E: \ git \ etc \ profile)
  5. Thêm đường dẫn tuyệt đối đến nhà thư mục chúng tôi tạo ra (hoặc đến thư mục mà bạn muốn có tập tin .gitconfig của bạn nằm) ở phần cuối của các hồ sơ tập tin.
    HOME="E:\git\home"

Bây giờ nó không còn tìm kiếm .gitconfig trong thư mục C: \ Users <username> mà chỉ tìm kiếm trong đường dẫn đã đặt ở trên của bạn.

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

Nó đã xảy ra lỗi vì chưa có tệp .gitconfig ở đó. Điều này chỉ để chứng minh rằng chúng tôi đã thay đổi thành công vị trí của tệp .gitconfig mà không thay đổi thư mục HOME trong Windows.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.