«Я не хочу включать в него детали github, поэтому я хотел бы как-то включить их из внешнего файла»: именно для этого и нужен глобальный конфигурационный файл. Есть ли причина не использовать его в вашем случае?
VonC
11
Да, потому что я хочу опубликовать .gitconfig в репозитории git и не хочу, чтобы кто-то украл мои учетные данные на github.
Дэвид Рейнольдс
Я не следую за вами: ваш обычный файл gitconfig будет опубликован на github, но без каких-либо настроек github. Зачем? Потому что они будут в вашем глобальном конфигурационном файле ( ~/.gitconfig), то есть не будут отправлены в репозиторий github. Когда вы набираете ' git config', вы видите соединение трех конфигурационных файлов (репо, глобальный и системный). Только файл конфигурации репо толкают. 2 других остаются местными.
VonC
90
похоже, все упустили суть этого вопроса. Очевидно, что Дэвид хочет создать репо всех своих точечных файлов (bashrc, gemrc и т. Д.), ВКЛЮЧАЯ свой .gitconfig, чтобы он мог иметь все свои настройки на всех своих машинах. Способ выдвинуть части файла .gitconfig путем включения и игнорирования личных записей - это то, что он (и я, если на то пошло) следует за
Бо Джинс
5
@bjeanes: точно! Я все еще не нашел способ сделать это все же.
Дэвид Рейнольдс
Ответы:
302
Git (1.7.10+) теперь поддерживает этот синтаксис в .gitconfig:
[include]
path = /path/to/file
Смотрите здесь для подробного описания изменения git и его крайних случаев.
Кстати, пара тонкостей стоит отметить:
Расширение переменной среды, например $HOME, не поддерживается. (Расширение ~появилось в Git 1.7.10.2.)
Если указан относительный путь, то он относится к файлу .gitconfig с [include]оператором. Это работает правильно даже в цепочках включений - например, ~/.gitconfigможет иметь:
[include]
path = subdir/gitconfig
и subdir/gitconfigможет иметь:
[include]
path = nested_subdir/gitconfig
... что приведет subdir/nested_subdir/gitconfigк загрузке.
Если git не может найти целевой файл, он молча игнорирует ошибку. Похоже, что это по замыслу.
на самом деле вам не нужно ~. это потому, что ваш .gitconfig-файл все еще должен находиться в ~/.gitconfigотносительном пути в конфигурации, что подразумевает ~...
robustus
2
Расширение ~/ на $HOMEсамом деле относится к git describe --contains 4c0a89fc-> v1.7.10.2~12^2(то есть v1.7.10.2или позже), примечательно, так как кажется, что Debian 7 и Ubuntu Quantal выпустят с v1.7.10.4.
FauxFaux
1
Это поддерживает globs? например, путь = ~ / gitconfig.d / *?
Брет
1
@ Нет, это не поддерживает глобусы.
Майк Морарти
8
Обратите внимание , что конфигурации включен этот путь не будет отображаться , когда конкретный файл дан (то есть, с --global, --localили --file), если не сказано явно с --includes(например git config --global --includes --list).
Вы можете включить один файл конфигурации из другого, установив в специальной include.pathпеременной имя файла, который будет включен.
Включаемый файл раскрывается немедленно, как если бы его содержимое было найдено в месте расположения директивы include.
Если значение include.pathпеременной является относительным путем, путь считается относительным к файлу конфигурации, в котором была найдена директива include.
Значение include.pathподлежит расширению тильды: ~/расширяется до значения $HOMEи ~user/до домашнего каталога указанного пользователя.
Пользовательский файл конфигурации. Также называется «глобальным» файлом конфигурации.
Таким образом, он завершает файл, специфичный для проекта .gitconfig, и не публикуется при отправке в GitHub. Смотрите также этот ответ SO для получения дополнительной информации о глобальном конфигурационном файле.
Git имеет 3 конфигурационных файла .
похоже, все упустили суть этого вопроса.
Дэвид , очевидно , хочет , чтобы подтолкнуть вверх репо всех его точечных файлов ( bashrc, gemrcи т.д.) , включая его .gitconfigтак , что он может иметь все его настройки на всех своих машинах.
Способ выдвинуть части .gitconfigфайла путем включения и игнорирования личных записей - это то, за чем он (и я, если на то пошло) следует.
Один из возможных способов - использовать драйвер фильтра smudge / clean для дешифрования / шифрования одного файла с конфиденциальной конфиденциальной информацией (см. Эту ветку ), чтобы дополнить локальный файл, такой как ~ / .gitconfig, расшифрованными частями, относящимися к этому. файл.
Таким образом, у вас может быть Git-репо со всеми вашими точечными файлами, плюс один файл с зашифрованной информацией, предназначенный для расшифровки и добавления к указанным точечным файлам.
В .gitattributes(или .git/info/a..) использовании:
( Решение на основе GPG означает, что вы, конечно, передали свои личные / открытые ключи другим способом на конечный компьютер, где вы хотите восстановить все свои точечные файлы путем клонирования этого специального репозитория)
На самом деле, в вашем случае сценарий smudge необходимо завершить так, как он должен, после расшифровки этого файла, продолжить и добавить соответствующие части в ваш глобальный ~/.gitconfigфайл (если вы не перезаписываете файл глобальной конфигурации другим местоположением ) или другие точечные файлы для этого иметь значение.
Я хочу опубликовать свой основной файл .gitconfig в репозитории git, но я не хочу включать в него детали github, поэтому я хотел бы как-то включить их из внешнего файла.
Я полагаю, что вы можете сделать это с помощью инструмента-концентратора defunkt . Это оболочка для команды git, которая, помимо прочего, позволяет иметь GITHUB_USERи GITHUB_TOKENпеременные окружения. Который переопределит настройки в локальном .gitconfigфайле.
Затем, чтобы сделать его понятным для пользователя, на которого вы указали псевдоним alias git=hubв его конфигурации ZSH . После этого вы сможете найти локальный файл, в котором вы устанавливаете переменные среды, и перенести свой репозиторий в публичный мир со всей вашей личной информацией в такте.
** ПРИМЕЧАНИЕ для доморощенных пользователей на OSX, вы можете установить инструмент через brew install hub.
~/.gitconfig
), то есть не будут отправлены в репозиторий github. Когда вы набираете 'git config
', вы видите соединение трех конфигурационных файлов (репо, глобальный и системный). Только файл конфигурации репо толкают. 2 других остаются местными.Ответы:
Git (1.7.10+) теперь поддерживает этот синтаксис в
.gitconfig
:Смотрите здесь для подробного описания изменения git и его крайних случаев.
Кстати, пара тонкостей стоит отметить:
Расширение переменной среды, например
$HOME
, не поддерживается. (Расширение~
появилось в Git 1.7.10.2.)Если указан относительный путь, то он относится к файлу .gitconfig с
[include]
оператором. Это работает правильно даже в цепочках включений - например,~/.gitconfig
может иметь:и
subdir/gitconfig
может иметь:... что приведет
subdir/nested_subdir/gitconfig
к загрузке.Если git не может найти целевой файл, он молча игнорирует ошибку. Похоже, что это по замыслу.
источник
~
. это потому, что ваш .gitconfig-файл все еще должен находиться в~/.gitconfig
относительном пути в конфигурации, что подразумевает~
...~
/ на$HOME
самом деле относится кgit describe --contains 4c0a89fc
->v1.7.10.2~12^2
(то естьv1.7.10.2
или позже), примечательно, так как кажется, что Debian 7 и Ubuntu Quantal выпустят сv1.7.10.4
.--global
,--local
или--file
), если не сказано явно с--includes
(напримерgit config --global --includes --list
).Обновление 2012:
См Mike Morearty «сек ответ :
Включает
Не думаю.
Я бы предпочел поместить эту настройку в
~/.gitconfig
файлТаким образом, он завершает файл, специфичный для проекта .gitconfig, и не публикуется при отправке в GitHub. Смотрите также этот ответ SO для получения дополнительной информации о глобальном конфигурационном файле.
Git имеет 3 конфигурационных файла .
Bjeanes добавляет в комментариях:
Один из возможных способов - использовать драйвер фильтра smudge / clean для дешифрования / шифрования одного файла с конфиденциальной конфиденциальной информацией (см. Эту ветку ), чтобы дополнить локальный файл, такой как ~ / .gitconfig, расшифрованными частями, относящимися к этому. файл.
Таким образом, у вас может быть Git-репо со всеми вашими точечными файлами, плюс один файл с зашифрованной информацией, предназначенный для расшифровки и добавления к указанным точечным файлам.
В
.gitattributes
(или.git/info/a..
) использовании:В вашем репо-файле .config:
( Решение на основе GPG означает, что вы, конечно, передали свои личные / открытые ключи другим способом на конечный компьютер, где вы хотите восстановить все свои точечные файлы путем клонирования этого специального репозитория)
На самом деле, в вашем случае сценарий smudge необходимо завершить так, как он должен, после расшифровки этого файла, продолжить и добавить соответствующие части в ваш глобальный
~/.gitconfig
файл (если вы не перезаписываете файл глобальной конфигурации другим местоположением ) или другие точечные файлы для этого иметь значение.https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (неудобства gpg обсуждаются далее в этой теме ) (это отличается от использования полного зашифрованного репозитория Git, как описано здесь )
источник
Вы можете загрузить его из командной строки:
Используйте
"$PWD"/.gitconfig
вместо этого, если вы хотите загрузить файл из текущего каталога.После выполнения вышеуказанной команды в ваш
.git/config
файл добавляются следующие строки :источник
Я полагаю, что вы можете сделать это с помощью инструмента-концентратора defunkt . Это оболочка для команды git, которая, помимо прочего, позволяет иметь
GITHUB_USER
иGITHUB_TOKEN
переменные окружения. Который переопределит настройки в локальном.gitconfig
файле.Затем, чтобы сделать его понятным для пользователя, на которого вы указали псевдоним
alias git=hub
в его конфигурации ZSH . После этого вы сможете найти локальный файл, в котором вы устанавливаете переменные среды, и перенести свой репозиторий в публичный мир со всей вашей личной информацией в такте.** ПРИМЕЧАНИЕ для доморощенных пользователей на OSX, вы можете установить инструмент через
brew install hub
.источник