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ả?
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ả?
Câu trả lời:
Nếu bạn đặt HOME
thà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 --global
cờ 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).
.gitconfig
tệp vào thư mục đó, thì nó không hoạt động.
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.
$HOME
trê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.
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.
git config --file "included.file"
Tìm trong phần LỌC và MÔI TRƯỜNG của git help config
.
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\etc
và mở profile
trong trình soạn thảo văn bản.
Có một if
tuyên bố ở dòng 37 # Set up USER's home directory
. Tôi lấy ra bảng sao kê if
và đư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í đó.
Đố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 đó.
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 mklink
do 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\
.
%HOMEDRIVE%%HOMEPATH%
thành `c: \ my_repo_folder`. Làm việc một cách quyến rũ.
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
}
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_HOME
khô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.
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
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.
git config --list --show-origin
thấy, TRANG CHỦ ban đầu vẫn còn ở đây.
Đối với tôi, nó hoạt động rất đơn giản:
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:
.gitconfig
và 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
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.