2010-10-29 64 views
78

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

Làm thế nào tôi có thể thay đổi điều đó vị trí rất .gitconfig được lưu trữ trong c:\my_configuration_files\?

Có thể làm gì không?

+0

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

+4

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. –

Trả lời

46

Nếu bạn đặt HOME thành c:\my_configuration_files\, thì git sẽ định vị .gitconfig tại đó. Chỉnh sửa biến môi trường được mô tả here. 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ị.

Thay đổi HOME sẽ, tất nhiên, cũng ả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 phải điều chỉnh dòng lệnh. Bạn cũng nên xem xét phản ứng của Stefan: bạn có thể đặt biến GIT_CONFIG. Tuy nhiên, để cung cấp cho nó hiệu ứng bạn mong muốn, bạn cần phải vượt qua cờ --global cho tất cả các yêu cầu git (cộng với bất kỳ tệp .git/config cục bộ nào bị bỏ qua).

+1

Uhmm, chỉ là một người mới ở đây.Bạn có thể mô tả một chút về cách làm điều đó không? Xin vui lòng :) – Rook

+0

Xem chỉnh sửa của tôi ở trên. –

+2

Hmm, không chắc chắn nếu tôi hiểu chính xác nhưng sẽ không thay đổi HOME có ả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 là địa phương để Git? – Rook

36

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 vào thư mục HOME.

  1. Di chuyển tệp .gitconfig của bạn từ thư mục chính của người dùng, đến thư mục bạn muốn.
  2. Run dòng lệnh as Administrator
  3. Đến thư mục chính người dùng của bạn
  4. Nhập mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig
+8

Có thể đáng kể nếu bạn chạy git config --global để thêm một mục vào cấu hình của bạn, liên kết tượng trư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 chạy vào vấn đề này khi thử nghiệm một vị trí mà \ PathForNewLocationOfConfig.gitconfig là thư mục Dropbox của tôi – MotoWilliams

+0

@MotoWilliams thực sự rất khó chịu. Có bất kỳ cách giải quyết nào mà tôi tự hỏi không? Khác với chuyển sang Linux :) –

+5

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", quy tắc này tùy chọn. – noonand

3

Nếu bạn đang ở trên các cửa sổ và gặp sự cố hoặc thay đổi các biến môi trường hoặc mklink vì không đủ đặc quyền, giải pháp dễ dàng cho vấn đề của bạn là bắt đầu git batch ở 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\.

+0

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 cắt ngắn mới và dưới 'properties-> start in' thay đổi '% HOMEDRIVE %% HOMEPATH%' thành 'c: \ my_repo_folder \'. Làm việc một say mê. – Shane

+1

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

3

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 
} 
9

Tôi không có chủ git, nhưng không phải tìm kiếm giải pháp mà làm việc dễ dàng nhất đối với tôi là chỉ cần vào C: \ Program Files (x86) \ Git \ etc và mở "profile" trong một văn bản biên tập viên. Có một câu lệnh if trên dòng 37 "# Thiết lập thư mục chủ của USER" Tôi đã lấy câu lệnh if và đặt vào thư mục cục bộ mà tôi muốn gitconfig, sau đó tôi chỉ sao chép tập tin gitconfig hiện có của tôi (trên ổ đĩa mạng) đến vị trí đó.

+0

Cảm ơn một tấn. Trong khi tất cả các tùy chọn khác không thành công cho tôi, điều này chỉ lưu cho tôi 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

5

Đối với tôi, việc thay đổi vị trí bắt đầu (ít nhất là của git-gui) không ảnh hưởng đến vị trí 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ó quyền viết U: trực tiếp, chỉ có các thư mục con được tạo ra cho chúng tôi bên trong, vì vậy đây là một công cụ giải quyết vấn đề đối với tôi.

Tôi đã giải quyết vấn đề bằng cách tạo tập lệnh theo lô sẽ ghi đè biến env HOMEDRIVE và HOMEPATH chỉ dành cho ứng dụng đó. Sau đó thay đổi shortcut menu Start của tôi để trỏ đến tập lệnh batch đó thay thế.

+0

http://stackoverflow.com/help/how-to-answer –

+0

Tôi muốn biết thêm thông tin về những gì bạn đã làm để thực hiện sửa lỗi này. –

9

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 công 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ỳ cập nhật nào được viết bởi Git vào tệp .gitconfig sẽ không ghi đè đường dẫn bao gồm của tôi. Nó có nghĩa là đôi khi tôi có thể cần phải di chuyển các giá trị từ .gitconfig đến my.config.

+0

+1: không có cấu hình lẻ và gitconfig toàn cầu của tôi là thứ mà tôi lưu trữ trong bản repo git, vì vậy hãy theo dõi những gì trong đó là công việc của tôi. Khi thực hiện 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 làm việc hoàn hảo cho tôi, và không đòi hỏi sự kỳ quặc như thay đổi biến môi trường "HOME" của bạn, đó là một ý tưởng lạ chỉ vì lợi ích của việc cấu hình của Git mà bạn muốn. Thư mục chính sau khi tất cả có ý nghĩa khác đối 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 nhau ở trên cùng và giữ các cài đặt chính của bạn giống nhau trên danh tính với giải pháp này. Xuất sắc! – user62177541

+0

Tuyệt. Điều này làm việc _with_ công cụ thay vì làm việc _around_ nó (có thể không được hỗ trợ khi câu hỏi này ban đầu được hỏi, và có thể không làm việc cho tất cả mọi người như người bình luận với một tập tin gitconfig nằm trên một ổ đĩa mạng). [Chủ đề này] (http://stackoverflow.com/a/9733277/301857) có thể hữu ích cho khách truy cập. –

+0

Đây phải là câu trả lời đúng, cảm ơn người đàn ông. – spongeworthy

2

Kiểm tra cài đặt HOME đầu tiên, sau đó thay đổi HOME và HOMEDRIVE thành thư mục hiện có.

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

sau đó thay đổi CHỦ và HOMEDRIVE bởi

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

Là một người đã quan tâm đến việc này trong một thời gian rất dài. Xem từ hướng dẫn sử dụng:

$XDG_CONFIG_HOME/git/config - Tệp cấu hình dành riêng cho người dùng thứ hai. 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ỳ thứ gì nằm trong ~/.gitconfig. Bạn nên tạo tệp này nếu đôi khi bạn sử dụng các phiên bản cũ hơn của Git, vì hỗ trợ cho tệp này đã được thêm khá gần đây.

Chỉ được thêm gần đây. Bãi chứa này là từ 2,15.0.

Làm việc cho tôi.

Các vấn đề liên quan