Tôi muốn làm điều tương tự. Điều tốt nhất 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 bất kỳ cập nhật nào được thực hiện bởi Git đố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 tập lệnh này trong tập lệnh khởi động tiểu sử của tôi. Mỗi lần nó chạy nó 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 tệp toàn cầu và sau đó thay thế tất cả văn bản trong tệp .gitconfig với tiêu đề [include] nhập tệp toàn cục.
Tôi giữ tệp .gitconfig chung trong repo 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 toàn cầu của tôi.
Điều này dường như hoạt động khá rõ ràng đố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 mục nhập mới được thêm vào tệp cấu hình là trùng lặp và bỏ qua chúng. Điều này rất hữu ích cho các công cụ như SourceTree 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 thủ 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
}
Nguồn
2013-08-27 15:22:43
Chỉ muốn thêm tôi cũng tham gia vào quá trình này. Tôi có tất cả các công cụ cấu hình git toàn cầu khác của tôi ("exludesfiles" và "attrirutesfile") trong% userprofile% /. Git/.gitignore (trong một thư mục), nhưng .gitconfig tôi thích để nó ngồi ngay cạnh chúng nhưng phải nằm trong thư mục gốc của% userprofile% .. thực sự gây phiền nhiễu. – WORMSS
Bất kỳ tiến bộ nào kể từ khi câu hỏi đã được hỏi? My .gitconfig nằm trên ổ đĩa mạng theo mặc định, có nghĩa là nó không đọc được khi tôi ngoại tuyến. –