Có thể bao gồm một tệp trong .gitconfig của bạn


245

Tôi muốn bao gồm một tệp trong .gitconfig có cài đặt github của tôi - điều này có thể không?

Tôi có thể làm một cái gì đó như thế này:

[core]
    include = /path/to/file

3
"Tôi không muốn bao gồm các chi tiết github trong đó, vì vậy tại sao tôi muốn đưa chúng từ một tệp bên ngoài bằng cách nào đó": đó chính xác là những gì tệp cấu hình toàn cầu dành cho. Có bất kỳ lý do để không sử dụng nó trong trường hợp của bạn?
VonC

11
Có, vì tôi muốn xuất bản .gitconfig trong kho git và tôi không muốn ai đó lấy cắp thông tin đăng nhập của tôi.
David Reynold

Tôi không theo bạn: tệp gitconfig thông thường của bạn sẽ được xuất bản lên github, nhưng không có bất kỳ cài đặt github nào. Tại sao? Bởi vì những cái đó sẽ nằm trong tệp cấu hình toàn cầu của bạn ( ~/.gitconfig), tức là không được đẩy vào repo github của bạn. Khi bạn nhập ' git config', những gì bạn thấy là sự kết hợp của tệp 3 cấu hình (repo, toàn cầu và hệ thống). Chỉ có tập tin cấu hình repo được đẩy. Hai người khác ở lại địa phương.
VonC

90
có vẻ như tất cả mọi người đã bỏ lỡ điểm của câu hỏi này David rõ ràng muốn đẩy lên một repo của tất cả các tệp chấm của mình (bashrc, gemrc, v.v.) BAO GỒM .gitconfig để anh ta có thể có tất cả các cài đặt của mình trên tất cả các máy của mình. Một cách để đẩy các phần của tệp .gitconfig bằng cách bao gồm và bỏ qua các mục riêng tư là những gì anh ấy (và tôi, cho vấn đề đó) là sau
Bo Jeanes

5
@bjeanes: chính xác! Tôi vẫn chưa tìm thấy một cách để làm điều đó mặc dù.
David Reynold

Câu trả lời:


302

Git (1.7.10+) hiện hỗ trợ cú pháp này trong .gitconfig:

[include]
    path = /path/to/file

Xem ở đây để mô tả chi tiết về sự thay đổi git và các trường hợp cạnh của nó.

Nhân tiện, một vài sự tinh tế đáng để chỉ ra:

  1. Mở rộng biến môi trường, ví dụ $HOME, không được hỗ trợ. (Mở rộng ~xuất hiện trong Git 1.7.10.2.)

  2. Nếu một đường dẫn tương đối được chỉ định, thì nó có liên quan đến tệp .gitconfig có [include]câu lệnh. Điều này hoạt động chính xác ngay cả trên chuỗi bao gồm - ví dụ ~/.gitconfigcó thể có:

    [include]
        path = subdir/gitconfig
    

    subdir/gitconfigcó thể có:

    [include]
        path = nested_subdir/gitconfig
    

    ... Điều này sẽ gây ra subdir/nested_subdir/gitconfigđược tải.

  3. Nếu git không thể tìm thấy tệp mục tiêu, nó sẽ âm thầm bỏ qua lỗi. Điều này dường như là do thiết kế.


7
thực sự bạn không cần ~. điều này là do tệp .gitconfig của bạn vẫn phải nằm trong ~/.gitconfigmột đường dẫn tương đối trong cấu hình sẽ ngụ ý ~...
chicus

2
Các ~/ $HOMEmở rộng thực sự là thời điểm git describe --contains 4c0a89fc-> v1.7.10.2~12^2(ví dụ v1.7.10.2hoặc mới hơn), đáng chú ý vì nó dường như Debian 7 và Ubuntu Định lượng sẽ phát hành với v1.7.10.4.
FauxFaux

1
Điều này có hỗ trợ sự hả hê? ví dụ: đường dẫn = ~ / gitconfig.d / *?
Bret

1
@ Xin lỗi, điều này không hỗ trợ
Mike Morearty

8
Lưu ý rằng các cấu hình được bao gồm theo cách này sẽ không được hiển thị khi một tệp cụ thể được cung cấp (nghĩa là, với --global, --localhoặc --file), trừ khi được nói rõ ràng với --includes(như git config --global --includes --list).
Franklin Yu

16

Cập nhật 2012:

Xem câu trả lời của Mike Morearty :

Bao gồm

Bạn có thể bao gồm một tệp cấu hình từ một tệp khác bằng cách đặt include.pathbiến đặc biệt thành tên của tệp được bao gồm.
Tệp bao gồm được mở rộng ngay lập tức, như thể nội dung của nó đã được tìm thấy tại vị trí của lệnh bao gồm.
Nếu giá trị của include.pathbiến là một đường dẫn tương đối, đường dẫn được coi là tương đối với tệp cấu hình trong đó chỉ thị bao gồm được tìm thấy.
Giá trị của include.pathcó thể mở rộng dấu ngã: ~/được mở rộng thành giá trị của $HOME~user/vào thư mục chính của người dùng được chỉ định.


Tôi không nghĩ vậy.

Tôi thà đặt cài đặt đó trong ~/.gitconfigtập tin

Tập tin cấu hình người dùng cụ thể. Cũng được gọi là tập tin cấu hình "toàn cầu".

Bằng cách đó, nó hoàn thành tệp cụ thể của dự án .gitconfig mà không được xuất bản khi được đẩy lên GitHub. Xem thêm câu trả lời SO này để biết thêm về tập tin cấu hình toàn cầu.
Git có 3 tập tin cấu hình .


bjeanes thêm vào trong các ý kiến:

có vẻ như tất cả mọi người đã bỏ lỡ điểm của câu hỏi này
David rõ ràng là muốn đẩy mạnh một repo của tất cả các file chấm của mình ( bashrc, gemrc, vv) BAO GỒM mình .gitconfigđể anh có thể có tất cả các thiết lập của mình trên tất cả các máy của mình.
Một cách để đẩy các phần của một .gitconfigtệp bằng cách bao gồm và bỏ qua các mục riêng tư là những gì anh ấy (và tôi, cho vấn đề đó) là sau.

Một cách có thể là sử dụng trình điều khiển bộ lọc smudge / sạch để giải mã / mã hóa một tệp với thông tin nhạy cảm riêng tư (xem chủ đề này ), để hoàn thành một tệp cục bộ như ~ / .gitconfig với các phần được giải mã có liên quan đến điều đó tập tin.

Bằng cách đó, bạn có thể có một repo Git với tất cả các tệp chấm của mình, cộng với một tệp có thông tin được mã hóa có nghĩa là được giải mã và thêm vào các tệp chấm nói.

văn bản thay thế

Trong .gitattributes(hoặc .git/info/a..) sử dụng:

myPrivateInfosFile filter=gpg diff=gpg

Trong tệp repo .config của bạn:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

(một giải pháp dựa trên GPG có nghĩa là, tất nhiên, bạn đã truyền đạt khóa riêng / công khai của mình bằng một phương tiện khác đến máy tính đích nơi bạn muốn khôi phục tất cả các tệp dấu chấm của mình bằng cách sao chép repo đặc biệt này)

Trên thực tế, trong trường hợp của bạn, tập lệnh smudge cần phải được hoàn thành vì sau khi giải mã tập tin đó, hãy tiếp tục và thêm các phần có liên quan vào ~/.gitconfigtệp toàn cầu của bạn (trừ khi bạn ghi đè lên tệp cấu hình chung với một vị trí khác ) hoặc các tệp chấm khác cho điều đó vấn đề.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (sự bất tiện của gpg được thảo luận thêm trong chủ đề này ) (điều này khác với việc có một repo Git được mã hóa đầy đủ, như được thảo luận ở đây )


5
Tôi muốn xuất bản tệp .gitconfig cơ bản của mình trong kho git, nhưng tôi không muốn bao gồm các chi tiết github trong đó, vì vậy tại sao tôi muốn đưa chúng từ một tệp bên ngoài bằng cách nào đó.
David Reynold

10

Bạn có thể tải nó từ dòng lệnh:

$ git config --local include.path "/path/to/.gitconfig"

Sử dụng "$PWD"/.gitconfigthay thế, nếu bạn muốn tải tệp từ thư mục hiện tại.

Sau khi chạy lệnh trên, các dòng sau được thêm vào .git/configtệp của bạn :

[include]
        path = /path/to/.gitconfig

2

Tôi tin rằng bạn có thể thực hiện điều này bằng cách sử dụng công cụ trung tâm của defunkt . Đây là một trình bao bọc cho lệnh git, trong số những thứ khác, cho phép bạn có các biến môi trường GITHUB_USERGITHUB_TOKENbiến. Cái nào sẽ ghi đè cài đặt trong .gitconfigtệp cục bộ .

Sau đó, để làm cho nó liền mạch người dùng mà bạn đã chỉ định bí danh alias git=hubtrong cấu hình ZSH của mình . Sau đó, bạn có thể tìm nguồn tệp cục bộ nơi bạn đặt các biến môi trường của mình và đẩy kho lưu trữ của bạn đến thế giới công cộng với tất cả thông tin cá nhân của bạn một cách khéo léo.

** LƯU Ý cho người dùng homebrew trên OSX, bạn có thể cài đặt công cụ qua brew install hub.

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.