Чи можливо включити файл у свою .gitconfig


245

Я хотів би включити файл у свій .gitconfig, який має мої налаштування github - чи це можливо?

Чи можу я зробити щось подібне:

[core]
    include = /path/to/file

3
"Я не хочу включати в нього деталі github, отже, чому я хотів би якось включити їх із зовнішнього файлу": саме для цього призначений глобальний конфігураційний файл. Чи є якісь причини не використовувати його у вашому випадку?
VonC

11
Так, тому що я хочу опублікувати .gitconfig у сховищі git, і я не хочу, щоб хтось вкрав мої облікові дані github.
Девід Рейнольдс

Я не стежу за вами: ваш звичайний файл gitconfig буде опублікований в github, але без будь-яких налаштувань github. Чому? Тому що це буде у вашому глобальному конфігураційному файлі ( ~/.gitconfig), тобто не буде висунуто на ваше github repo. Коли ви вводите " git config", ви бачите об'єднання 3-х конфігураційних файлів (репо, глобальний та системний). Лише файл конфігурації repo натискається. Два інших залишаються місцевими.
VonC

90
схоже, що всі пропустили пункт цього питання. Девід, очевидно, хоче підняти репост усіх своїх точкових файлів (bashrc, gemrc тощо), Включаючи його .gitconfig, щоб він міг мати всі свої налаштування на всіх своїх машинах. Спосіб перетиснення частин файлу .gitconfig шляхом включення та ігнорування приватних записів - це те, що він (і я, з цього приводу)
шукаю

5
@bjeanes: точно! Я все ще не знайшов способу це зробити.
Девід Рейнольдс

Відповіді:


302

Git (1.7.10+) тепер підтримує цей синтаксис у .gitconfig:

[include]
    path = /path/to/file

Дивіться тут для детального опису зміни git та її крайових випадків.

До речі, на кілька тонкощів варто звернути увагу:

  1. Розширення із змінною середовищем, наприклад $HOME, не підтримується. (Розширення ~з'явилося в Git 1.7.10.2.)

  2. Якщо вказаний відносний шлях, то він має відношення до файлу .gitconfig, у якому є [include]оператор. Це працює правильно навіть у прикутих мережах - наприклад, ~/.gitconfigможе мати:

    [include]
        path = subdir/gitconfig
    

    і subdir/gitconfigможе мати:

    [include]
        path = nested_subdir/gitconfig
    

    ... що призведе subdir/nested_subdir/gitconfigдо завантаження.

  3. Якщо git не може знайти цільовий файл, він мовчки ігнорує помилку. Це здається дизайном.


7
насправді вам не потрібно ~. це тому, що ваш .gitconfig-файл все ще повинен знаходитись у ~/.gitconfigвідносному конфігурації, це означатиме ~...
robustus

2
~/ $HOMEРозширення насправді , як з git describe --contains 4c0a89fc-> v1.7.10.2~12^2(тобто v1.7.10.2чи пізніше), примітно , як це здається Debian 7 і Ubuntu квантовим буде реліз v1.7.10.4.
FauxFaux

1
Чи підтримує це глобус? наприклад шлях = ~ / gitconfig.d / *?
Брет

1
@Ак ні, це не підтримує глобуси.
Майк Морерті

8
Зверніть увагу , що конфігурації включений цей шлях не буде доступний широкому , коли конкретний файл дан (тобто, з --global, --localабо --file), якщо не сказано явно з --includes(наприклад git config --global --includes --list).
Франклін Ю

16

Оновлення 2012 року:

Див Mike Morearty «сек відповідь :

Включає

Ви можете включити один конфігураційний файл з іншого, встановивши спеціальну include.pathзмінну на ім'я файлу, який слід включити.
Включений файл розгортається негайно, як би його вміст був знайдений у місці розташування директиви include.
Якщо значення include.pathзмінної є відносним шляхом, шлях вважається відносним до файлу конфігурації, в якому було знайдено директиву включення.
Значення include.pathпідлягає розширенню tilde: ~/розширюється на значення $HOMEта ~user/на домашній каталог вказаного користувача.


Я так не думаю.

Я б швидше помістив цю настройку у ~/.gitconfigфайл

Конфігураційний файл, визначений користувачем. Також називається "глобальним" файлом конфігурації.

Таким чином, він доповнює специфічний для проекту файл .gitconfig, не публікуючись при натисканні на GitHub. Дивіться також цю відповідь ТА для отримання додаткової інформації про глобальний файл конфігурацій
У Git є 3 конфігураційні файли .


bjeanes додає в коментарях:

схоже, що всі пропустили пункт цього питання.
Девід, очевидно, хоче підсунути репост усіх своїх точкових файлів ( bashrc, gemrcтощо), ВКЛЮЧИТИ його, .gitconfigщоб він міг мати всі свої налаштування на всіх своїх машинах.
Спосіб проштовхування частин .gitconfigфайлу шляхом включення та ігнорування приватних записів - це те, про що він (і я, з цього приводу) пішов.

Можливим способом було б використання драйвера фільтру розмивання / очищення для дешифрування / шифрування одного файлу з приватною конфіденційною інформацією (див. Цю тему ), щоб заповнити локальний файл на зразок ~ / .gitconfig з розшифрованими частинами, які відповідають цьому файл.

Таким чином, у вас може бути репортаж Git з усіма вашими крапковими файлами, а також один файл із зашифрованою інформацією, який мав бути розшифрований та доданий до вказаних точкових файлів.

alt текст

Під час використання .gitattributes(або .git/info/a..):

myPrivateInfosFile filter=gpg diff=gpg

У вашому репо-файлі .config:

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

( Рішення на основі GPG означає, що, звичайно, ви передали свої приватні / відкриті ключі іншим способом на цільовий комп'ютер, де ви хочете відновити всі свої крапкові файли, клонувавши це спеціальне репо)

Насправді у вашому випадку сценарій розмиття потрібно виконати так, як він повинен, після розшифрування цього файлу, продовжити та додати відповідні частини до вашого глобального ~/.gitconfigфайлу (якщо ви не перезаписали глобальний файл конфігурації з іншого місця розташування ) або інші файли крапок для цього матерія.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (незручності gpg обговорюються далі у цій темі ) (це відрізняється від повного зашифрованого репортажу Git, як обговорювалося тут )


5
Я хочу опублікувати свій основний .gitconfig файл у сховищі git, але я не хочу включати в нього деталі github, отже, чому я хотів би якось включити їх із зовнішнього файлу.
Девід Рейнольдс

10

Ви можете завантажити його з командного рядка:

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

Використовуйте "$PWD"/.gitconfigнатомість, якщо ви хочете завантажити файл із поточного каталогу.

Після запуску вище команди, у ваш .git/configфайл додаються наступні рядки :

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

2

Я вважаю, що ви можете досягти цього за допомогою інструмента концентратора defunkt . Це обгортка для команди git, яка, крім іншого, дозволяє вам мати GITHUB_USERі GITHUB_TOKENзмінні середовища. Що буде заміняти налаштування в локальному .gitconfigфайлі.

Потім, щоб зробити його безшовним користувач, якого ви вказали на псевдонім alias git=hubу його конфігурації ZSH . Тоді ви маєте змогу джерелом локального файлу, де ви встановите змінні середовища, та перенесіть своє сховище у загальнодоступний світ із усією вашою приватною інформацією в такт.

** ПРИМІТКА для домашніх користувачів на OSX, ви можете встановити інструмент через brew install hub.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.