2012-06-29 32 views
41

Tôi có biến hệ vỏ trỏ đến thư mục chứa tất cả các tệp cấu hình của tôi. Giả sử biến được tạo với export RC=$HOME/rc. Tôi có tệp bỏ qua chung trong thư mục cấu hình: ~/rc/globalgitignore.Mở rộng biến dạng vỏ trong cấu hình git

Câu hỏi của tôi là làm cách nào để mở rộng biến số RC trong tệp .gitconfig của tôi?

Tôi đã thử như sau:

  • excludesfile = $RC/globalgitignore

  • excludesfile = !$RC/globalgitignore

  • excludesfile = !echo $RC/globalgitignore

  • excludesfile = !$(echo $RC/globalgitignore)

Không có giải pháp nào trong số này hoạt động.

Cách duy nhất hoạt động nếu tôi nhập đường dẫn đầy đủ: excludesfile = ~/rc/globalgitignore, nhưng sau đó tôi phải thay đổi đường dẫn nếu di chuyển thư mục rc của mình đến một vị trí khác.

Trả lời

32

Bạn không thể. git-config(1) không hỗ trợ mở rộng biến môi trường, nhưng chỉ chuyển đổi loại hạn chế và mở rộng đường dẫn:

Các Bộ xác định kiểu có thể là --int hoặc --bool, để làm cho git config đảm bảo rằng các biến (s) là của loại đã cho và chuyển đổi giá trị thành dạng chuẩn (số thập phân đơn giản cho int, chuỗi "true" hoặc "false" cho bool) hoặc --path, một số mở rộng đường dẫn (xem --path bên dưới) . Nếu không có thông số cụ thể loại được thông qua, không kiểm tra hoặc chuyển đổi được thực hiện trên giá trị.

Các tài liệu cho --path trạng thái:

--path

git-config sẽ mở rộng hàng đầu ~ với giá trị của $ HOME, và ~ người dùng đến thư mục home cho quy định người dùng. Tùy chọn này không có hiệu lực khi thiết lập giá trị (nhưng bạn có thể sử dụng git config bla ~/từ dòng lệnh để cho trình bao của bạn thực hiện mở rộng).

Thuật ngữ "mở rộng" không xuất hiện trong bất kỳ ngữ cảnh nào khác trong git-config(1). Vì vậy, làm thế nào bạn thậm chí có được ý tưởng rằng nó nên, cho rằng không có tính năng như vậy là tài liệu bất cứ nơi nào?

Để mở rộng biến môi trường, bạn phải tự xử lý tệp cấu hình Git, tức là tạo tệp mẫu và mở rộng biến bằng tập lệnh trước khi sao chép tệp vào thư mục $HOME của bạn.

Nếu đó là về quản lý dotfile, thì hãy làm, tất cả mọi người làm gì: Đặt chúng vào một thư mục và thêm liên kết tượng trưng vào thư mục này từ $HOME của bạn.

+0

Trước đây tôi đã liên kết tất cả các tệp cấu hình từ thư mục 'rc' vào thư mục chính của tôi. Để bỏ qua các liên kết này, tôi đã tạo biến 'RC' và hầu hết các chương trình của tôi sử dụng nó. Bằng cách này, '~' được mở rộng và khi bạn sử dụng bí danh git config ... thì bạn có thể sử dụng lệnh shell và biến mở rộng. – SvenK

+3

@ SvenK: Hãy đọc 'git-config (1)': Thực tế là 'git-config (1)' mở rộng '~' không "tự động" có nghĩa là mở rộng biến hoặc thậm chí các lệnh shell cũng được hỗ trợ. '~' được * xử lý đặc biệt * bởi 'git-config' nếu và chỉ khi một giá trị là * được lấy ra với bộ định kiểu kiểu' --path' *. Đây là kiểu mở rộng * duy nhất * được hỗ trợ bởi 'git-config'. Tôi đã cập nhật câu trả lời của mình để bao gồm các phần liên quan từ 'git-config (1)' – lunaryorn

+2

Đây là một chút bực bội, vì tôi không thể chỉ định biến môi trường proxy http của tôi cho toàn bộ hệ thống của mình; Tôi phải cho một số lý do xác định nó trong gitconfig của tôi là tốt. Khá khó chịu cho những người không làm việc ở nhà hoặc một cửa hàng nhỏ, và/hoặc những người ngồi trên các mạng khác nhau tùy thuộc vào nơi họ đang làm việc. –

15

Tôi sử dụng tập lệnh bash trong cấu hình của mình để bật mở rộng biến. Chỉ cần xuất biến mà bạn cần trong .bashrc của bạn và sử dụng nó trong các kịch bản:

Trong tôi ~/.bashrc:

export TESTVARIABLE="hello" 

Trong tôi ~/.gitconfig:

[alias] 
    test = !bash -c '"echo \"Value: $TESTVARIABLE\";"' 

Tại nhắc bash của tôi:

bash> git test 
    Value: hello 

Th e cách khác để làm điều đó, là thêm lệnh git config vào rc của trình bao. Tôi ví dụ có trong .bashrc của tôi:

git config --global user.name "[email protected]$HOSTNAME" 

tôi có cấu hình tương tự trên tất cả các máy của tôi, và bằng cách thêm này tôi có thể phân biệt giữa các cam kết từ các máy khác nhau. Bạn có thể làm tương tự và thêm vào vỏ của bạn rc:

export RC="$HOME/rc" 
git config --global core.excludesfile "$RC/globalgitignore" 
+1

gospes: Tôi đã thử phương pháp đầu tiên bạn đề xuất cho trường email. Email kết quả (mà tôi thấy trong thông tin cam kết) bằng chuỗi " ".Ý tưởng? – tivoni

+8

@tivoni ví dụ của @gospes chỉ hoạt động vì nó nằm trong' nhóm git alias' –

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